@event4u/agent-config 10.1.0 → 10.2.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +109 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +38 -0
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +22 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +39 -0
- package/dist/agent-src/rules/token-budget-discipline.md +3 -2
- package/dist/agent-src/rules/token-efficiency.md +22 -0
- package/dist/agent-src/skills/ai-council/SKILL.md +28 -6
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +5 -1
- package/dist/agent-src/templates/agent-settings.md +12 -28
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +2 -2
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-3JUTT26I.js → chunk-6ENSXSBW.js} +1 -1
- package/dist/cli-delegate/{chunk-TVGXH7VA.js → chunk-6LOPHJLD.js} +1 -1
- package/dist/cli-delegate/{chunk-XT2YTJCZ.js → chunk-AYKQGIBG.js} +4 -0
- package/dist/cli-delegate/{chunk-HJSKTMIF.js → chunk-BV3WR67D.js} +3 -19
- package/dist/cli-delegate/{chunk-HTIU3W56.js → chunk-BWMXLD4B.js} +6 -2
- package/dist/cli-delegate/{chunk-2H5SE7DU.js → chunk-E4RUZKXB.js} +165 -38
- package/dist/cli-delegate/{chunk-XTC5ARB6.js → chunk-IR3IVRVC.js} +7 -2
- package/dist/cli-delegate/{chunk-LRXJK6GN.js → chunk-JMQZ7MM5.js} +1 -1
- package/dist/cli-delegate/{chunk-NX5AXSLD.js → chunk-X3VOARZD.js} +3 -3
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +881 -204
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +6 -5
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +2 -2
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +44 -9
- package/dist/cli-delegate/cmd_settings_get.js +2 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +11 -11
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +88 -20
- package/dist/install/install.mjs +9 -21
- package/dist/mcp/registry-manifest.json +1 -1
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1336 -489
- package/dist/scripts/_lib/agent_settings.js +25 -2
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/scripts/_lib/compile_time_toggles.js +4 -3
- package/dist/scripts/_lib/compile_time_toggles.js.map +1 -1
- package/dist/server/io/yamlIO.js +0 -2
- package/dist/server/io/yamlIO.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -9
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/settingsClasses.js +64 -2
- package/dist/shared/settingsClasses.js.map +1 -1
- package/dist/ui/assets/{index-B5qGYOJo.js → index-5fXOHoVh.js} +2 -2
- package/dist/ui/assets/index-5fXOHoVh.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/contracts/settings-classes.md +307 -145
- package/docs/guidelines/agent-infra/layered-settings.md +1 -2
- package/docs/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -1
- package/src/config/agent-settings.template.yml +12 -30
- package/src/config/gate-violation-baselines.json +9 -3
- package/src/config/profiles/balanced.ini +0 -2
- package/src/config/profiles/full.ini +1 -3
- package/src/config/profiles/minimal.ini +0 -2
- package/src/scripts/_cli/cmd_session_recycle.ts +66 -9
- package/src/scripts/_cli/handoff_sessions.ts +3 -2
- package/src/scripts/_lib/agent_settings.ts +25 -2
- package/src/scripts/_lib/bench_telegraph.ts +1 -1
- package/src/scripts/_lib/cc_transcript.ts +25 -0
- package/src/scripts/_lib/compile_time_toggles.ts +4 -3
- package/src/scripts/ai_council/clients.ts +228 -33
- package/src/scripts/cache_realization_report.ts +3 -2
- package/src/scripts/check_rule_projection_integrity.ts +3 -1
- package/src/scripts/conformance_scan.ts +282 -9
- package/src/scripts/cost/track.mjs +10 -4
- package/src/scripts/council_cli.ts +33 -3
- package/src/scripts/external_sources_denylist.json +3 -1
- package/src/scripts/hook_manifest.yaml +17 -6
- package/src/scripts/hooks/block_unauthorized_git.ts +54 -8
- package/src/scripts/hooks/delegation_nudge_hook.ts +33 -8
- package/src/scripts/hooks/evidence_independence.ts +61 -9
- package/src/scripts/hooks/session_eol_hook.ts +123 -3
- package/src/scripts/hooks/turn_end_gate_hook.ts +31 -0
- package/src/scripts/lint_settings_classes.ts +273 -11
- package/src/scripts/lint_symptom_intake.ts +241 -0
- package/src/scripts/report_consultation_rate.ts +2 -1
- package/src/scripts/report_skill_activation.ts +6 -4
- package/src/scripts/report_skill_obligation_violations.ts +2 -1
- package/src/server/io/yamlIO.ts +0 -2
- package/src/server/schemas/settings.ts +3 -19
- package/src/shared/settingsClasses.ts +93 -2
- package/dist/ui/assets/index-B5qGYOJo.js.map +0 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
|
|
9
|
-
"version": "10.
|
|
9
|
+
"version": "10.2.0",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"agent-config",
|
|
12
12
|
"skills",
|
package/CHANGELOG.md
CHANGED
|
@@ -339,6 +339,115 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
|
|
|
339
339
|
> that forces a new era split (`# Era: 9.37.x`, etc.) — see
|
|
340
340
|
> [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
|
|
341
341
|
|
|
342
|
+
## [10.2.0](https://github.com/event4u-app/agent-config/compare/10.1.0...10.2.0) (2026-08-13)
|
|
343
|
+
|
|
344
|
+
### Release highlights
|
|
345
|
+
|
|
346
|
+
<!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
|
|
347
|
+
- **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 1bb1076, 698aa3f, d805133, 973787a.
|
|
348
|
+
- **Default changes + migration:** _none_
|
|
349
|
+
- **Security and correctness:** _auto-derived, rewrite before merge:_ security-scoped commits in 0309b8e.
|
|
350
|
+
- **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in c428ac6.
|
|
351
|
+
- **Known limitations:** _none_
|
|
352
|
+
|
|
353
|
+
### Features
|
|
354
|
+
|
|
355
|
+
* **process:** give operator symptoms a home and codify the loop that resolves them ([6e01a24](https://github.com/event4u-app/agent-config/commit/6e01a24bb9c0a2496feca0a5dfb69d50fefa5fbf))
|
|
356
|
+
* **gates:** warn on unresolved operator symptom entries past 30 days ([ef98cfa](https://github.com/event4u-app/agent-config/commit/ef98cfa7d02c98ec88abf0ec9b778af12b2b6e91))
|
|
357
|
+
* **rules:** size-gated reads — probe a large file before loading it whole ([1bb1076](https://github.com/event4u-app/agent-config/commit/1bb10767269e1d348a874b845f0176fc1c83deba))
|
|
358
|
+
* **hooks:** severity follows the input type — prose alone may not block ([2716d4f](https://github.com/event4u-app/agent-config/commit/2716d4f87280b71f7301a885a9c10da1f1f00ffd))
|
|
359
|
+
* **settings:** gate the deletion side of the surface, not just the addition side ([da3bc3c](https://github.com/event4u-app/agent-config/commit/da3bc3c536184462c73a7214be953b8a57f9c432))
|
|
360
|
+
* **settings:** delete the six keys no code path read ([973787a](https://github.com/event4u-app/agent-config/commit/973787a6026d9b18f86f9961d7286993c6a491b8))
|
|
361
|
+
* **settings:** add the disposition axis to lint_settings_classes ([4c9ced8](https://github.com/event4u-app/agent-config/commit/4c9ced8908a9e89e2f9b8684cb4f1f6642d55c55))
|
|
362
|
+
* **conformance:** give task-completeness a denominator, and cover it ([18e4a0c](https://github.com/event4u-app/agent-config/commit/18e4a0c85cd705e5f404ea5b08f7a1018b7a7c3b))
|
|
363
|
+
* **conformance:** measure task completeness before refusing on it ([11610f8](https://github.com/event4u-app/agent-config/commit/11610f85c46d0eeb024ccb224e9236d264ffe0fe))
|
|
364
|
+
|
|
365
|
+
### Bug Fixes
|
|
366
|
+
|
|
367
|
+
* **roadmap-writing:** fit the symptom-loop route without tripping the size check ([d5b3253](https://github.com/event4u-app/agent-config/commit/d5b3253f7875ab4da2da45a869cbbcb134a03763))
|
|
368
|
+
* **roadmaps:** anonymize the vendored corpus upstream outside its attribution file ([8406ac8](https://github.com/event4u-app/agent-config/commit/8406ac8c52a75355e0c704184aea123c7895d2fc))
|
|
369
|
+
* **roadmaps:** satisfy the complexity and blocker contracts on two active plans ([498cea7](https://github.com/event4u-app/agent-config/commit/498cea7c93bdbea57e00b5d6ba56ca828692e34f))
|
|
370
|
+
* **contracts:** the rule-router described a Claude Code gap that closed in PR #1231 ([f87240d](https://github.com/event4u-app/agent-config/commit/f87240d899e5418fa256e6462160b74466ad728d))
|
|
371
|
+
* **context-hygiene:** name the wait shape both loop clauses miss ([698aa3f](https://github.com/event4u-app/agent-config/commit/698aa3f65e704e3fa796be606c54a880c0736d01))
|
|
372
|
+
* **turn-end-gate:** stop refusing the honest "not done yet" line ([f85a8c7](https://github.com/event4u-app/agent-config/commit/f85a8c713d7bfa1d577ed1897261493ab1336d33))
|
|
373
|
+
* **git-guard:** classify the verb that is invoked, not the one that is named ([1b0d42d](https://github.com/event4u-app/agent-config/commit/1b0d42dd4135af012647853a469b1e43070d6502))
|
|
374
|
+
* **transcripts:** close the store-slug character class instead of widening it ([580f12d](https://github.com/event4u-app/agent-config/commit/580f12ddb9e1dc1c2d0a5ca9d0d2961707fa3b76))
|
|
375
|
+
* **evidence:** a worktree location is not a verdict subject ([351f245](https://github.com/event4u-app/agent-config/commit/351f245b946d5ec186d454888dfa65764003de32))
|
|
376
|
+
* **review:** stop the findings artefact citing a path that is the finding ([3dc1f86](https://github.com/event4u-app/agent-config/commit/3dc1f863d6c15b1afdccf0700897cc463eb80ccb))
|
|
377
|
+
* **council:** close the seven review findings, including two tests of mine that could not fail ([368c895](https://github.com/event4u-app/agent-config/commit/368c895d78d50b79520b686ade54e7d9aeddfe76))
|
|
378
|
+
* **council:** the spawned member answered the caller's hooks, and held tools it never needed ([67efa72](https://github.com/event4u-app/agent-config/commit/67efa720e380e54989c0e95b14285b729f5e279b))
|
|
379
|
+
* **council:** gemini rejects --system too, and two members dropped the system prompt entirely ([9faee19](https://github.com/event4u-app/agent-config/commit/9faee19e22fcf51cd21c04b7b12bd0a4da7bfb4e))
|
|
380
|
+
* **council:** close six of the eight review findings ([01c7b1f](https://github.com/event4u-app/agent-config/commit/01c7b1fb23ecfee991477d5c086ebc977fa5720b))
|
|
381
|
+
* **roadmap:** make the PR the end condition of /roadmap:next, not a step ([0184f3b](https://github.com/event4u-app/agent-config/commit/0184f3b92c8ce975c6f9eab815060f09e0479149))
|
|
382
|
+
* **council:** print the post-run quorum, not only the pre-run one ([cd8e518](https://github.com/event4u-app/agent-config/commit/cd8e518c115b2b873e2c85fc8aaf1c85edc37f67))
|
|
383
|
+
* **council:** codex exec has no --system flag, so stop passing one ([990d698](https://github.com/event4u-app/agent-config/commit/990d6982ff7f79c1979a96e5b8a37beaa788e65c))
|
|
384
|
+
* **review:** close the R2 findings, one of them by admitting the fix was half-built ([ff8be31](https://github.com/event4u-app/agent-config/commit/ff8be31c5aea39a2b85874b1d1224f463a12b0d7))
|
|
385
|
+
* **session-eol:** stop recommending /clear without checking the envelope exists ([ee27132](https://github.com/event4u-app/agent-config/commit/ee2713277230081929096719893739f64b416913))
|
|
386
|
+
* **session-recycle:** refuse a write into an unanchored working directory ([825df09](https://github.com/event4u-app/agent-config/commit/825df094771c44bbab37de44ea03c713e39980cd))
|
|
387
|
+
|
|
388
|
+
### Documentation
|
|
389
|
+
|
|
390
|
+
* **roadmaps:** archive the symptom-driven harvest loop, fully executed ([d8ddccb](https://github.com/event4u-app/agent-config/commit/d8ddccb8707be0e39b15106f5181964c6f32f531))
|
|
391
|
+
* **roadmaps:** adopt the four August plans plus their program layer ([f84ba70](https://github.com/event4u-app/agent-config/commit/f84ba70e4bc56c9413d05ae6f9aa0189c3e629d1))
|
|
392
|
+
* **review:** re-bind the skip declaration to the Phase 2 re-cut scope ([ceac026](https://github.com/event4u-app/agent-config/commit/ceac02600bc198309163b7d269b87c6c648e4049))
|
|
393
|
+
* **roadmap:** re-cut Phase 2 to the downstream evidence control, cancel Phase 3 ([614f3df](https://github.com/event4u-app/agent-config/commit/614f3dfdfe6f4eb3e0c805769bd19ad1846c61ed))
|
|
394
|
+
* **contracts:** correct the prompt-channel residual — the prompt IS readable ([35a7796](https://github.com/event4u-app/agent-config/commit/35a7796ce728c6c6e70d10d813eb0da083c343bb))
|
|
395
|
+
* **roadmap:** corpus knowledge skills — the compiler gap, with eight corrections to the source ([c428ac6](https://github.com/event4u-app/agent-config/commit/c428ac61f8da7aa8e83f0f71758166fcf7e2eb42))
|
|
396
|
+
* **review:** declare the structured-guard-input measurement a no-code-surface skip ([44c5092](https://github.com/event4u-app/agent-config/commit/44c5092c522fbf4cff0db2ade5e731266c521784))
|
|
397
|
+
* **evidence:** measure the three Phase-1 falsifiers before building the field ([e817d50](https://github.com/event4u-app/agent-config/commit/e817d5084d67d5d937e65fcf86926ab4e640a566))
|
|
398
|
+
* **contracts:** state which text a guard reads, pre- or post-expansion ([953e7c1](https://github.com/event4u-app/agent-config/commit/953e7c1efca019061ba37842726fcf8fd27a198e))
|
|
399
|
+
* **review:** declare the waiter-discipline completion a no-code-surface skip ([cf2019e](https://github.com/event4u-app/agent-config/commit/cf2019ea2da0473ee36906f99b98a76be50541fa))
|
|
400
|
+
* **roadmap:** regenerate the dashboard after resolving the merge ([f2e6179](https://github.com/event4u-app/agent-config/commit/f2e617964b360f61d3cf32cf3094564498f25f44))
|
|
401
|
+
* **roadmap:** risk register for the structured-guard-input plan ([224eda9](https://github.com/event4u-app/agent-config/commit/224eda90be5f1918bc0f59cf6aa0072ef0c259a1))
|
|
402
|
+
* **council:** record the convergence and the work it does not fit in ([806e40c](https://github.com/event4u-app/agent-config/commit/806e40c25dbc148d51cccd51438c6622c451f9bc))
|
|
403
|
+
* **roadmap:** close zero-settings 2.1, 2.2 and 4.1, and re-date the blocker ([9acf679](https://github.com/event4u-app/agent-config/commit/9acf679f83a5ec260cc0b8be73aa98cd5bb3a219))
|
|
404
|
+
* **roadmap:** regenerate the dashboard after the merge ([945d614](https://github.com/event4u-app/agent-config/commit/945d6148a4e1cda1f01bdd8da769b58bd66a880e))
|
|
405
|
+
* **roadmap:** record that a failed council attempt still spends quota ([d6e6f11](https://github.com/event4u-app/agent-config/commit/d6e6f11ab78b2ec593098b3e850be94e7e342800))
|
|
406
|
+
* **roadmap:** close zero-settings 2.1, 2.2 and 4.1; record why 3.1 and 3.2 stay open ([c5499d9](https://github.com/event4u-app/agent-config/commit/c5499d94529da815709afa2d9776b69acc6ee5b4))
|
|
407
|
+
* **settings:** the telegraph rule states its own scope, and four contracts stop naming a dead key ([d805133](https://github.com/event4u-app/agent-config/commit/d805133257302e0beaa732cb1dd33ee413ceb4a6))
|
|
408
|
+
* **settings:** republish the counts, the floor, and the reclassification argument ([e53a799](https://github.com/event4u-app/agent-config/commit/e53a7992f4eb49b0859a267c7814434a263fdf4e))
|
|
409
|
+
* **audit:** record the cross-project session audit and its refusals ([dddafe9](https://github.com/event4u-app/agent-config/commit/dddafe91e36f2eceb243d8292e1da087eeff00d0))
|
|
410
|
+
* **review:** re-bind the adapter-follow-up artefact to the fixed scope ([783b784](https://github.com/event4u-app/agent-config/commit/783b784456429ff897538f23ffd83250c8e67b89))
|
|
411
|
+
* **review:** record the R2 findings on the adapter follow-up before fixing them ([a910931](https://github.com/event4u-app/agent-config/commit/a910931b3fe915c97902b90ecdea9540d4b07284))
|
|
412
|
+
* **review:** re-bind the context manifest, not only the marker ([3a22d35](https://github.com/event4u-app/agent-config/commit/3a22d357e7d6f5c93e4a8b855a58dd423762c09f))
|
|
413
|
+
* **review:** re-bind the R2 artefact to the fixed scope ([e6b4ce8](https://github.com/event4u-app/agent-config/commit/e6b4ce8e968d54a5bb22ca0b8d9f0d36ee7069fb))
|
|
414
|
+
* **review:** record the R2 completion review before the fixes ([169fcfd](https://github.com/event4u-app/agent-config/commit/169fcfd9d454ef9951c698783ea8859ff94462a4))
|
|
415
|
+
* **evidence:** task-completeness measures 0 of 3 precision — detector D is not built ([a7f6ffd](https://github.com/event4u-app/agent-config/commit/a7f6ffd459c7b5f19db087b31ccd42de5a85504b))
|
|
416
|
+
* **roadmap:** close zero-settings Phase 1 + 4.2, file the consent blocker ([99e6df2](https://github.com/event4u-app/agent-config/commit/99e6df2aebfae9433eff3ba7ce24c46090706196))
|
|
417
|
+
* **settings:** classify all 140 leaves and ratchet the derivable surface ([4a40578](https://github.com/event4u-app/agent-config/commit/4a405780354a7432d615373577f2e2f0bba4efa6))
|
|
418
|
+
* **review:** ship the reviewer prompt and scope beside the verdict ([0e57c8e](https://github.com/event4u-app/agent-config/commit/0e57c8e27621350fe086304b6f8f4f9143ffb8f4))
|
|
419
|
+
* **review:** re-bind the R2 artefact to the fixed scope, dispositions terminal ([8492864](https://github.com/event4u-app/agent-config/commit/8492864e2a6540fad5d1970cf76ae6a0dea2259c))
|
|
420
|
+
* **evidence:** pre-register the bar for detector D, contamination disclosed ([ee3f43f](https://github.com/event4u-app/agent-config/commit/ee3f43faca834a44eaaf3dab1770e9f422aeae9c))
|
|
421
|
+
* **review:** record the R2 findings before fixing any of them ([a151f36](https://github.com/event4u-app/agent-config/commit/a151f368422afbd18cf1f81175e69129acfa0e05))
|
|
422
|
+
* **roadmap:** close the rootless-write roadmap and record the sibling inventory ([4f5447a](https://github.com/event4u-app/agent-config/commit/4f5447a5ce022adf8e356ebc93419cababa1af0a))
|
|
423
|
+
|
|
424
|
+
### Refactoring
|
|
425
|
+
|
|
426
|
+
* **settings:** delete the five keys nothing ever read ([94b9134](https://github.com/event4u-app/agent-config/commit/94b913481610deb1e981760280019c7ef0ae4aa1))
|
|
427
|
+
|
|
428
|
+
### Tests
|
|
429
|
+
|
|
430
|
+
* **settings:** pin what a deleted unread key can and cannot do ([db0c6bd](https://github.com/event4u-app/agent-config/commit/db0c6bdba4eef271ae6803e4adb12c202d14ee2b))
|
|
431
|
+
* **settings:** pin the inverted invariant per deleted key ([e87af34](https://github.com/event4u-app/agent-config/commit/e87af347d9f0eacfd5f753737fadc85813b181fb))
|
|
432
|
+
|
|
433
|
+
### Build
|
|
434
|
+
|
|
435
|
+
* take the trunk install bundle instead of a worktree rebuild ([f3ef74c](https://github.com/event4u-app/agent-config/commit/f3ef74c800b492cab4327953de7bb8af706e83bc))
|
|
436
|
+
* regenerate the derived outputs after the reconciliation merge ([50b4ce6](https://github.com/event4u-app/agent-config/commit/50b4ce6df13dff915ec0adbbe4f03f0f08475d02))
|
|
437
|
+
* rebuild the tracked install bundle after the schema deletion ([7b143ae](https://github.com/event4u-app/agent-config/commit/7b143ae4e0611f478e0ddd86c8e837d01a738940))
|
|
438
|
+
|
|
439
|
+
### Chores
|
|
440
|
+
|
|
441
|
+
* **index:** regenerate the artifact index and catalog for the new guideline ([5d2d563](https://github.com/event4u-app/agent-config/commit/5d2d56351048163930fba8c8871d4eaddb5d203b))
|
|
442
|
+
* **security:** backstop the anonymization obligation for one more harvest source ([0309b8e](https://github.com/event4u-app/agent-config/commit/0309b8efc7f304bdbbc1886701dad1706c22f543))
|
|
443
|
+
* **tests:** drop the template handle the trimmed assertion orphaned ([ed764a9](https://github.com/event4u-app/agent-config/commit/ed764a9e600d330e5a33d3c49981f2e7e84b840e))
|
|
444
|
+
* **tests:** finish the orphan chain the previous deletion opened ([9bc6020](https://github.com/event4u-app/agent-config/commit/9bc6020a9ddf9578b98898024a2191ffc480a906))
|
|
445
|
+
* **tests:** drop two dead declarations the changed-files linter surfaced ([2d7ff19](https://github.com/event4u-app/agent-config/commit/2d7ff19b3dba4584b83e393a5e6f6c2fdafdd816))
|
|
446
|
+
* **roadmap:** archive road-to-feedback-9-35, which merged complete but unarchived ([2e26094](https://github.com/event4u-app/agent-config/commit/2e26094de27c845466229c6e7842a8217ac3b21f))
|
|
447
|
+
* **roadmaps:** archive road-to-completion-loop, closed as a published null ([92f9b9a](https://github.com/event4u-app/agent-config/commit/92f9b9aa675cbc42cc81e7eb829e68d6ddd3c4b7))
|
|
448
|
+
|
|
449
|
+
Tests: 13506 (+95 since 10.1.0)
|
|
450
|
+
|
|
342
451
|
## [10.1.0](https://github.com/event4u-app/agent-config/compare/10.0.0...10.1.0) (2026-08-12)
|
|
343
452
|
|
|
344
453
|
### Release highlights
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [](https://www.npmjs.com/package/@event4u/agent-config) [](https://glama.ai/mcp/servers/event4u-app/agent-config) [](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
|
|
6
6
|
|
|
7
|
-
[](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](docs/guidelines/) [](dist/agent-src/personas/) [](dist/agent-src/personas/advisors/)
|
|
8
8
|
|
|
9
9
|
**Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
|
|
10
10
|
|
|
@@ -224,6 +224,11 @@ Chunked commits (the agent picks the split — never ask how, per
|
|
|
224
224
|
[`/create-pr`](../../git/pr/create.md): archival sweep, preflight,
|
|
225
225
|
push, PR opened **ready for review** (not draft).
|
|
226
226
|
|
|
227
|
+
This step is where the run **ends**, not a step it may stop before — see the
|
|
228
|
+
second Iron Law below. The invocation already authorised the push and the PR;
|
|
229
|
+
asking for them again is the re-ask
|
|
230
|
+
[`no-cheap-questions`](../../rules/no-cheap-questions.md) § IL 5 forbids.
|
|
231
|
+
|
|
227
232
|
### 7. CI — fix locally, honour the push gate
|
|
228
233
|
|
|
229
234
|
Follow [`/create-pr` § 4d](../../git/pr/create.md): wait for the
|
|
@@ -258,6 +263,39 @@ A ROADMAP CLAIMED "IN FLIGHT", "MERGED", OR "DONE" WITHOUT A LIVE CHECK
|
|
|
258
263
|
AT THE MOMENT OF THE CLAIM IS AN UNVERIFIED CLAIM.
|
|
259
264
|
```
|
|
260
265
|
|
|
266
|
+
## Iron Law — the run ends at a PR, never at an offer to open one
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
STEP 6 IS AN END CONDITION, NOT A STEP THE RUN MAY STOP BEFORE REACHING.
|
|
270
|
+
A RUN THAT PRODUCED COMMITS ENDS WITH A PR OPENED FOR REVIEW.
|
|
271
|
+
THE INVOCATION IS THE ACCEPT — IT COVERS THE BRANCH, THE CHUNKED COMMITS,
|
|
272
|
+
THE FIRST PUSH TO THAT BRANCH, AND THE PR. NEVER RE-ASK FOR THEM.
|
|
273
|
+
"SAY THE WORD AND I'LL OPEN IT" IS A PROMISSORY CLOSE, WHICH
|
|
274
|
+
verify-before-complete ALREADY FORBIDS. SO IS ENDING ON COMMITTED-BUT-UNPUSHED
|
|
275
|
+
WORK WITHOUT NAMING IT.
|
|
276
|
+
STOPPING EARLIER IS LEGAL ONLY AS ONE OF process-full's FIVE NAMED HALTS,
|
|
277
|
+
A HARD-FLOOR TRIGGER, OR AN N=3 EXHAUSTION — AND THE HALT IS NAMED IN THE
|
|
278
|
+
REPORT TOGETHER WITH WHAT IS STILL UNPUSHED.
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**What this does NOT lift.** § 7's re-push restriction stands unchanged: the
|
|
282
|
+
invocation covers the *first* push that opens the PR, never the pushes that
|
|
283
|
+
follow a CI fix. Those are Hard-Floor triggers needing the user's word that turn
|
|
284
|
+
([`non-destructive-by-default`](../../rules/non-destructive-by-default.md)), and
|
|
285
|
+
no reading of this law manufactures a per-PR standing mandate.
|
|
286
|
+
|
|
287
|
+
**Why it needed saying, measured on this command's own run.** A session screened
|
|
288
|
+
30 roadmaps, recovered from a live claim collision, picked, branched and did the
|
|
289
|
+
work — then closed with a status report and no PR, because § 6 read as a step in
|
|
290
|
+
a list rather than as the condition the run terminates on. The user had to ask
|
|
291
|
+
for the PR the invocation had already authorised. A step that can be narrated
|
|
292
|
+
instead of executed is not an obligation; an end condition is.
|
|
293
|
+
|
|
294
|
+
**Honest scope.** `enforced_by: none` — nothing inspects a chat turn for a
|
|
295
|
+
missing PR, so this is model-carried like the live screen above it. The
|
|
296
|
+
deterministic half is elsewhere and unchanged: `/create-pr` runs the archival
|
|
297
|
+
sweep and preflight, and CI gates the branch once the PR exists.
|
|
298
|
+
|
|
261
299
|
## Rules
|
|
262
300
|
|
|
263
301
|
- **One roadmap per invocation.** Never chain a second pick after the
|
|
@@ -83,10 +83,31 @@ When `personal.minimal_output: true`:
|
|
|
83
83
|
### Minimize tool calls
|
|
84
84
|
|
|
85
85
|
- Parallel reads — don't read 5 files sequentially.
|
|
86
|
-
- Regex search over full file reads. View specific line ranges.
|
|
87
86
|
- One codebase search call with all symbols — not 5 separate.
|
|
88
87
|
- Short question → short answer. Summary tables only for 3+ items.
|
|
89
88
|
|
|
89
|
+
### Size-gated read procedure (the 800-line threshold)
|
|
90
|
+
|
|
91
|
+
The rule states the obligation; this is how to discharge it. Three steps, in
|
|
92
|
+
order, and each one narrows the next:
|
|
93
|
+
|
|
94
|
+
1. **Size** — `wc -l <file>`. Under the threshold, stop here and read it.
|
|
95
|
+
2. **Shape** — a structural grep for the anchors you need, emitting offsets:
|
|
96
|
+
`grep -nE '^(class|function|def|export|## )' <file>` for a map, or
|
|
97
|
+
`grep -n '<the symbol>' <file>` when you know what you are after.
|
|
98
|
+
3. **Slice** — a ranged read around those offsets only (the host's
|
|
99
|
+
`offset`/`limit` read, or `sed -n 'A,Bp'`), widened once if the slice
|
|
100
|
+
straddles a boundary.
|
|
101
|
+
|
|
102
|
+
Two failure modes this replaces. **Blind full read:** loading a 3,000-line file
|
|
103
|
+
to answer a question one function answers — the cost is paid on every later turn
|
|
104
|
+
that carries it. **Blind slice:** reading lines 1–200 of an unknown file and
|
|
105
|
+
guessing the rest, which is the probe skipped rather than performed.
|
|
106
|
+
|
|
107
|
+
The step-2 grep is not a second probe of the same file for the same fact — it
|
|
108
|
+
returns information step 1 did not have, so it is one operation with step 3, per
|
|
109
|
+
the enumerated-set carve-out.
|
|
110
|
+
|
|
90
111
|
### Exceptions
|
|
91
112
|
|
|
92
113
|
- Small output (< 30 lines) — read directly.
|
|
@@ -38,7 +38,7 @@ Live Phase 1 schema (see [`templates/agent-settings.md`](../../templates/agent-s
|
|
|
38
38
|
| `verbosity.offer_council_in_delivery` | When `false`, delivery commands skip the optional "run Council on this?" offer. |
|
|
39
39
|
| `verbosity.post_action_reports` | `off` / `minimal` / `full` — multi-line status blocks after a successful action. |
|
|
40
40
|
| `verbosity.intent_announcements` | When `false`, writers must not generate "Let me…", "Now I will…", "Found it" openers. |
|
|
41
|
-
| `telegraph.
|
|
41
|
+
| `telegraph.speak` | When `false` (the shipped default) the telegraph-speak rule does not ship at all; when `true` its own carve-out list states the grammar's scope — options blocks, Iron-Law literals, code, and paths stay byte-stable. |
|
|
42
42
|
|
|
43
43
|
Phase 10 adds `verbosity.script_output` (`silent` / `minimal` / `verbose`) and `verbosity.taskfile_command_echo` (`true` / `false`); writer artifacts cite this row when those land.
|
|
44
44
|
|
|
@@ -72,6 +72,45 @@ Calling the **same tool** more than **2 times in a row** with similar parameters
|
|
|
72
72
|
**"Similar parameters" is the load-bearing word — an enumerated set is not a loop.** Walking N *declared, distinct* targets (a downstream-caller sweep per [`downstream-changes`](downstream-changes.md), an override chain, the members of a grep result) is one operation whose parameters differ every call. Counting it as N repetitions makes `downstream-changes`' "find **ALL** callers, tests, imports" unsatisfiable — it cannot be done in two calls. The loop this detects is *repetition without new information*: same target, same parameters, hoping for a different answer. Mirrors the same carve-out in [`token-efficiency`](token-efficiency.md).
|
|
73
73
|
`sequentialthinking` is especially prone to loops: at most **once** per task, NEVER for simple file operations, command execution, or straightforward edits.
|
|
74
74
|
|
|
75
|
+
### Waiting is one waiter, never a fleet
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
ONE WAITER PER CONDITION. NEVER A TIMER AND A WATCHER FOR THE SAME WAIT.
|
|
79
|
+
NEVER START A NEW WAITER WHILE ONE IS STILL LIVE FOR THAT CONDITION.
|
|
80
|
+
A NUMBER THAT CHANGED IS NOT NEW INFORMATION UNLESS IT CHANGES WHAT YOU DO NEXT.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Waiting on something external — CI, a deploy, a queue, a background job — is the
|
|
84
|
+
one shape the loop test above systematically misses, in both of its clauses.
|
|
85
|
+
|
|
86
|
+
- **"Same parameters" fails.** A `sleep 240` followed by `sleep 420` followed by
|
|
87
|
+
`sleep 595` are three different calls by any parameter comparison, so nothing
|
|
88
|
+
reads them as repetition.
|
|
89
|
+
- **"Repetition without new information" fails too**, and this is the subtler
|
|
90
|
+
half: the poll genuinely returns a different value each round — 31 green, then
|
|
91
|
+
34, then 36 — which *feels* like progress. It is not information unless a
|
|
92
|
+
different digit would make you act differently. It would not: the only actions
|
|
93
|
+
available were wait, or stop and report, and 34 licensed neither more than 31
|
|
94
|
+
did. **The discriminator is the decision, not the digits.**
|
|
95
|
+
|
|
96
|
+
So state it separately: pick **one** waiter for the condition and let it finish.
|
|
97
|
+
Where the harness re-invokes on completion, waiting costs nothing and polling
|
|
98
|
+
costs a turn per expiry — and every stacked waiter is a turn that arrives *after*
|
|
99
|
+
the answer already did. Where it does not, one `until <condition>` loop is still
|
|
100
|
+
one call rather than N.
|
|
101
|
+
|
|
102
|
+
**Measured once, at n=1, and worth naming for its shape rather than its
|
|
103
|
+
frequency** (2026-08-12): a CI wait started roughly 35 background commands —
|
|
104
|
+
a fresh timer *and* a fresh condition-watcher per round, none cancelled when the
|
|
105
|
+
next pair started. CI settled with about fifteen still live; each then expired
|
|
106
|
+
and produced an empty turn. Nothing was corrupted, which is exactly why it ran
|
|
107
|
+
so long: every individual step looked reasonable.
|
|
108
|
+
|
|
109
|
+
**Enforcement: none, and the reason is structural.** The `context-hygiene` hook
|
|
110
|
+
counts tool calls; a waiter is indistinguishable from any other call at that
|
|
111
|
+
layer, and nothing in the envelope says two live waiters are watching one
|
|
112
|
+
condition. This is model-carried on every host.
|
|
113
|
+
|
|
75
114
|
## Read-Loop Detection — the 15 / 25 rule
|
|
76
115
|
|
|
77
116
|
```
|
|
@@ -74,8 +74,9 @@ from. Where a consumer has enabled it, it **exempts** skills marked
|
|
|
74
74
|
- Preserve all worked examples, decision tables, and code blocks verbatim
|
|
75
75
|
|
|
76
76
|
This exemption is limited to the skill's guidance content; reply prose from the
|
|
77
|
-
*agent* (not from the skill body) remains subject to telegraph-speak
|
|
78
|
-
|
|
77
|
+
*agent* (not from the skill body) remains subject to telegraph-speak wherever
|
|
78
|
+
that rule ships at all (`telegraph.speak`), within the carve-outs the rule
|
|
79
|
+
itself names.
|
|
79
80
|
|
|
80
81
|
## Value-over-budget escalation
|
|
81
82
|
|
|
@@ -52,6 +52,28 @@ cohorts (batch), or a cost-aware model/effort decision → route via the
|
|
|
52
52
|
[`token-optimizer`](../skills/token-optimizer/SKILL.md) index branch
|
|
53
53
|
(`api-cost-levers` row) — single source of truth for the billing levers.
|
|
54
54
|
|
|
55
|
+
## Size-gated reads — probe a large file before loading it whole
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
A FILE OVER THE THRESHOLD IS PROBED, NEVER LOADED WHOLE ON SPEC.
|
|
59
|
+
SIZE CHECK → STRUCTURAL GREP → BOUNDED SLICE. FULL READ BELOW IT.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Threshold: 800 lines.** Above it, establish the file's shape before its
|
|
63
|
+
content — size, then a structural grep for the offsets that matter, then a
|
|
64
|
+
ranged read of those offsets. Below it, just read it: a probe you did not need
|
|
65
|
+
costs a call and teaches nothing.
|
|
66
|
+
|
|
67
|
+
The number is a **stated default, not a measured optimum** — said plainly rather
|
|
68
|
+
than implying a derivation it does not have. *Revisit-if:* a run records a
|
|
69
|
+
probe-then-slice that cost more than the full read would have, or the host's
|
|
70
|
+
ranged-read primitive changes its own default. Either falsifies the number, not
|
|
71
|
+
the obligation.
|
|
72
|
+
|
|
73
|
+
Additive: the repetition discriminator above is untouched, an enumerated
|
|
74
|
+
multi-file sweep stays ONE operation, and re-probing a file whose shape you
|
|
75
|
+
already established this session is the loop, not the fix.
|
|
76
|
+
|
|
55
77
|
## Mechanics
|
|
56
78
|
|
|
57
79
|
Anti-loop patterns, act-skip-narration / stop-early / minimize-tool-calls clauses, and small-output / debugging exceptions: [`token-efficiency-mechanics`](../contexts/communication/rules-auto/token-efficiency-mechanics.md). Precedence: never overrides `user-interaction` or command rules.
|
|
@@ -228,10 +228,12 @@ Three vendor CLIs are wired:
|
|
|
228
228
|
model: claude-sonnet-4-5
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
-
- **OpenAI / Codex** — invokes `codex exec --json
|
|
232
|
-
newline-delimited JSON event stream, pulling text from
|
|
233
|
-
`item.completed` and tokens from `turn.completed`. Session id
|
|
234
|
-
is
|
|
231
|
+
- **OpenAI / Codex** — invokes `codex exec --json -` with the prompt piped on
|
|
232
|
+
stdin, and walks the newline-delimited JSON event stream, pulling text from
|
|
233
|
+
`item.completed` and tokens from `turn.completed`. Session id is preserved.
|
|
234
|
+
Unlike the Anthropic client, there is **no separate system-prompt channel**:
|
|
235
|
+
`codex exec` has no `--system` flag, so a system prompt is prepended to the
|
|
236
|
+
user prompt in the same payload.
|
|
235
237
|
|
|
236
238
|
```yaml
|
|
237
239
|
members:
|
|
@@ -244,12 +246,23 @@ Three vendor CLIs are wired:
|
|
|
244
246
|
- **Google / Gemini** — invokes `gemini --output-format json` with
|
|
245
247
|
the prompt piped on stdin, parses the `response` + `stats.models.<m>.tokens`
|
|
246
248
|
envelope. OAuth consent must be granted once interactively before
|
|
247
|
-
the CLI is usable from a non-interactive shell.
|
|
249
|
+
the CLI is usable from a non-interactive shell. Like Codex and unlike Claude,
|
|
250
|
+
it has **no system-prompt flag** — `--system` is rejected outright with
|
|
251
|
+
`Unknown argument: system` — so the system prompt is prepended to the piped
|
|
252
|
+
payload.
|
|
253
|
+
|
|
254
|
+
Two caveats before enabling it, both measured 2026-08-12 and neither resolved.
|
|
255
|
+
The CLI's own `--help` says `-p/--prompt` is what selects non-interactive
|
|
256
|
+
mode, and this invocation passes neither `-p` nor the `query` positional;
|
|
257
|
+
whether piped stdin alone keeps it headless is **unestablished**. And the
|
|
258
|
+
free tier now refuses this client outright with `IneligibleTierError`, so a
|
|
259
|
+
round-trip could not be completed here at all. Enable it only if you can
|
|
260
|
+
confirm both on your own account.
|
|
248
261
|
|
|
249
262
|
```yaml
|
|
250
263
|
members:
|
|
251
264
|
gemini:
|
|
252
|
-
enabled:
|
|
265
|
+
enabled: false # see the two caveats above before flipping this
|
|
253
266
|
mode: cli
|
|
254
267
|
model: gemini-2.5-pro
|
|
255
268
|
```
|
|
@@ -265,6 +278,15 @@ substitutes.
|
|
|
265
278
|
their community CLIs DO consume the API key and DO NOT bypass
|
|
266
279
|
per-token billing — the contract doc warns explicitly.
|
|
267
280
|
|
|
281
|
+
Both take a single `-p <prompt>` and have no second channel, so the system
|
|
282
|
+
prompt is folded into that same value. Until 2026-08-12 it was **discarded**,
|
|
283
|
+
and these two members answered every question with no role, no neutrality
|
|
284
|
+
framing and no output contract while the run counted the reply as a peer
|
|
285
|
+
verdict. Two consequences worth knowing: their whole prompt travels on argv, so
|
|
286
|
+
a very large one can fail with `os_error: E2BIG` (the response carries a `hint`
|
|
287
|
+
saying so), and because their CLIs report no usage block, the input side of
|
|
288
|
+
their cost is an estimate rather than a provider figure.
|
|
289
|
+
|
|
268
290
|
### Cost-gate bypass for non-billable members
|
|
269
291
|
|
|
270
292
|
`ExternalAIClient.billable` is the contract. Clients with
|
|
@@ -118,7 +118,7 @@ A future `telegraph-v2.md` will tabulate the realised input-token saving against
|
|
|
118
118
|
|
|
119
119
|
## Cross-references
|
|
120
120
|
|
|
121
|
-
- [`telegraph-speak`](../../rules/telegraph-speak.md) — runtime rule the script mirrors for input-side targets;
|
|
121
|
+
- [`telegraph-speak`](../../rules/telegraph-speak.md) — runtime rule the script mirrors for input-side targets; that output-side rule does **not** gate this script (input-side runs regardless).
|
|
122
122
|
- [`src/scripts/validate_safe_paths.ts`](../../../src/scripts/validate_safe_paths.ts) — Phase 0 gate; ported from upstream Telegraph `63a91ec`.
|
|
123
123
|
- [`src/scripts/condense_memory.ts`](../../../src/scripts/condense_memory.ts) — implementation.
|
|
124
124
|
- [`tests/scripts/condense_memory.test.ts`](../../../tests/scripts/condense_memory.test.ts) — regression locks for each carve-out + idempotency + denylist.
|
|
@@ -22,7 +22,7 @@ packs:
|
|
|
22
22
|
* Rewriting an existing roadmap (phase restructure, goal pivot,
|
|
23
23
|
council-pass integration — not a checkbox flip)
|
|
24
24
|
* Drafting a phase block, exit criteria, or rollback section that
|
|
25
|
-
will land inside an existing roadmap
|
|
25
|
+
will land inside an existing roadmap — an operator **symptom** as the input has its own entry procedure: [`symptom-driven harvest`](../../../docs/guidelines/agent-infra/symptom-driven-harvest-loop.md)
|
|
26
26
|
|
|
27
27
|
Do NOT use this skill when:
|
|
28
28
|
|
|
@@ -56,6 +56,10 @@ INTENT
|
|
|
56
56
|
│ → cite markitdown (upstream: https://github.com/microsoft/markitdown)
|
|
57
57
|
│ Convert FIRST, then read the markdown — never paste raw binary.
|
|
58
58
|
│
|
|
59
|
+
├── Large file read (source / data / log already in the tree, > 800 lines)
|
|
60
|
+
│ → cite [token-efficiency § Size-gated reads](../../rules/token-efficiency.md)
|
|
61
|
+
│ (size → structural grep → bounded slice; never a full read on spec)
|
|
62
|
+
│
|
|
59
63
|
├── Repeated tool-call across N targets
|
|
60
64
|
│ → cite [token-efficiency](../../rules/token-efficiency.md)
|
|
61
65
|
│ (batch, parallelize, prune; one tool call > many)
|
|
@@ -81,7 +85,7 @@ INTENT
|
|
|
81
85
|
|---|---|---|---|
|
|
82
86
|
| `cli-output-handling` | `src/rules/cli-output-handling.md` | `verbose`, `tail`, `grep`, `CLI` | Wrap-tail-grep contract for any verbose command |
|
|
83
87
|
| `rtk-output-filtering` | `src/skills/rtk-output-filtering/SKILL.md` | `rtk`, `verbose`, `filter`, `wrap` | Project-local rtk filters; wrapper command |
|
|
84
|
-
| `token-efficiency` | `src/rules/token-efficiency.md` | `redirect`, `verbose`, `concise`, `tool` | Batch + parallelize tool calls; brevity floor |
|
|
88
|
+
| `token-efficiency` | `src/rules/token-efficiency.md` | `redirect`, `verbose`, `concise`, `tool`, `large file` | Batch + parallelize tool calls; brevity floor; size-gated reads (probe → grep → slice above 800 lines) |
|
|
85
89
|
| `agent-handoff` | `src/domains/meta/agent-handoff/command.md` | `handoff`, `fresh`, `chat`, `context`, `resume`, `session` | Session picker + generated handoff auto-seeding the next session |
|
|
86
90
|
| `direct-answers` | `src/rules/direct-answers.md` | `brevity`, `flattery`, `severity`, `tiered` | Iron-Law brevity floor (kernel) |
|
|
87
91
|
| `markitdown` | upstream: github.com/microsoft/markitdown | `PDF`, `DOCX`, `HTML`, `convert` | Document → markdown converter (authoritative-link only) |
|
|
@@ -176,12 +176,6 @@ chat_history:
|
|
|
176
176
|
# Logging granularity: per_turn | per_phase | per_tool
|
|
177
177
|
frequency: per_phase
|
|
178
178
|
|
|
179
|
-
# Max file size in KB before overflow handling kicks in
|
|
180
|
-
max_size_kb: 256
|
|
181
|
-
|
|
182
|
-
# Overflow behavior: rotate (drop oldest) | condense (summarize)
|
|
183
|
-
on_overflow: rotate
|
|
184
|
-
|
|
185
179
|
# --- Work-engine hooks ---
|
|
186
180
|
#
|
|
187
181
|
# Lifecycle hook surface of the `work_engine` Python engine
|
|
@@ -288,12 +282,6 @@ quality:
|
|
|
288
282
|
# never claimed as passing.
|
|
289
283
|
local_auto_run: false
|
|
290
284
|
|
|
291
|
-
# Wait for remote CI to finish on the PR / pipeline (true, false)
|
|
292
|
-
# true = poll GitHub check-runs / pipeline after push and report
|
|
293
|
-
# green / red before handing back
|
|
294
|
-
# false = push and hand back immediately (default)
|
|
295
|
-
wait_for_remote_ci: false
|
|
296
|
-
|
|
297
285
|
# --- Subagent orchestration ---
|
|
298
286
|
subagents:
|
|
299
287
|
# Model for implementer subagents (empty = same tier as the session model)
|
|
@@ -485,19 +473,18 @@ verbosity:
|
|
|
485
473
|
# safe task per Phase 10.3.
|
|
486
474
|
taskfile_command_echo: false
|
|
487
475
|
|
|
488
|
-
# --- Telegraph
|
|
476
|
+
# --- Telegraph condensation (output-side) ---
|
|
489
477
|
#
|
|
490
|
-
#
|
|
491
|
-
#
|
|
492
|
-
#
|
|
478
|
+
# One lever, deliberately: whether the telegraph-speak rule ships at all.
|
|
479
|
+
# The rule body states its own grammar scope — which carve-outs (numbered
|
|
480
|
+
# options, Iron-Law literals, code, paths) stay full prose — so there is no
|
|
481
|
+
# separate scope key to pin.
|
|
493
482
|
telegraph:
|
|
494
|
-
#
|
|
495
|
-
#
|
|
496
|
-
#
|
|
497
|
-
#
|
|
498
|
-
|
|
499
|
-
# aggressive = telegraph everywhere except Iron-Law literals
|
|
500
|
-
speak_scope: prose_only
|
|
483
|
+
# speak: false = DORMANT (the shipped default). The rule is omitted from
|
|
484
|
+
# dist/router.json entirely, so its body never reaches a host. That
|
|
485
|
+
# omission is what stops the cost. Set true only after an output-side
|
|
486
|
+
# bench clears the kill-criterion bar.
|
|
487
|
+
speak: false
|
|
501
488
|
|
|
502
489
|
telemetry:
|
|
503
490
|
artifact_engagement:
|
|
@@ -552,7 +539,7 @@ Personal and project-level settings (initial file written by
|
|
|
552
539
|
**Key paths use dot-notation** to denote nesting: `personal.user_name`
|
|
553
540
|
lives under `personal:` in YAML.
|
|
554
541
|
|
|
555
|
-
The `verbosity.*`
|
|
542
|
+
The `verbosity.*` rows are summarized below;
|
|
556
543
|
the canonical narrative lives in
|
|
557
544
|
[`docs/customization.md` § Verbosity](../../docs/customization.md#verbosity).
|
|
558
545
|
|
|
@@ -575,8 +562,6 @@ the canonical narrative lives in
|
|
|
575
562
|
| `code_style.docblocks` | `minimal`, `full` | `minimal` | Consumed by the `code-comment-discipline` rule. `minimal`: no signature-mirroring docblocks; docblocks only for machine-relevant precision (generics, array shapes) or genuine why-context. `full`: exported public library surface may carry one-line summary docblocks; the redundancy ban still holds. |
|
|
576
563
|
| `chat_history.enabled` | `true`, `false` | `true` | Persist chat events to `agents/runtime/.agent-chat-history` (JSONL) for crash recovery. |
|
|
577
564
|
| `chat_history.frequency` | `per_turn`, `per_phase`, `per_tool` | per profile | Logging granularity. Defaults: `minimal`→`per_turn`, `balanced`→`per_phase`, `full`→`per_tool`. |
|
|
578
|
-
| `chat_history.max_size_kb` | integer | per profile | Max file size before overflow handling. Defaults: `minimal`→`128`, `balanced`→`256`, `full`→`512`. |
|
|
579
|
-
| `chat_history.on_overflow` | `rotate`, `condense` | per profile | On overflow: `rotate` drops oldest entries; `condense` marks the file for summarization on the next turn. Defaults: `minimal`/`balanced`→`rotate`, `full`→`condense`. |
|
|
580
565
|
| `chat_history.text_limits.{user,agent,tool,phase}` | integer (chars) | `user=0`, `agent=5000`, `tool=200`, `phase=200` | Per-entry-type text-length cap. `0` = verbatim, no slice. `N > 0` = collapse whitespace, slice to N chars, append `" … [+K chars]"` so the log self-reports truncation. Defaults match `DEFAULT_TEXT_LIMITS` in `scripts/chat_history.ts`. |
|
|
581
566
|
| `hooks.concern_budget.{max_per_event,tier1_concerns,hard_fail}` | integer / list / `true`,`false` | `8` / `[]` / `false` | Concern budget gate for the hook dispatcher (`lint_hook_concern_budget`): caps concerns per (platform, event) cell, restricts `fail_closed: true` to the `tier1_concerns` allowlist, and `hard_fail: false` keeps the gate warn-only. |
|
|
582
567
|
| `hooks.injection_scan.enabled` | `true`, `false` | `false` | PostToolUse prompt-injection scanner: scans tool output for injection signatures and warns in context (exit 2) — never blocks. |
|
|
@@ -587,7 +572,6 @@ the canonical narrative lives in
|
|
|
587
572
|
| `roadmap.skip_pre_run_gate` | `true`, `false` | `true` | When `true` (default): `/roadmap:process-step\|phase\|full` skips the interactive pre-run summary and starts the loop immediately — the resolved roadmap, cadence, and council are surfaced inline so an unwanted pick can still be aborted. When `false`: the loop shows the pre-run summary with numbered options (Go / Different roadmap / Different scope / Toggle council / Abort) and waits. The gate is always shown — regardless of this flag — when the roadmap is ambiguous (multiple active, none named) or a scope / cadence conflict has no sensible default. |
|
|
588
573
|
| `roadmap.quality_cadence` | `end_of_roadmap`, `per_phase`, `per_step` | `end_of_roadmap` | When `/roadmap:process-step|phase|full` runs the project's quality pipeline — only relevant when `quality.local_auto_run` is `true`; when it is `false` (the default) local pipeline runs are suppressed at every cadence and remote CI is the gate. Default skips per-step / per-phase runs and gates only the final archival. `per_phase` runs once after every phase; `per_step` is the legacy verbose mode. Step checkboxes and the dashboard are always updated regardless. |
|
|
589
574
|
| `quality.local_auto_run` | `true`, `false` | `false` | When `false` (default): agent NEVER runs the project's quality pipeline (`task ci`, `make test`, `npm run check`, PHPStan, ECS, Rector, test suites) proactively — and does not ask. The user runs quality tools manually; remote CI is the authoritative gate. The agent runs one only on (1) an explicit ask this turn, (2) a concrete CI failure (run exactly that failing check), or (3) the new-gate carve-out. When `true`: opt-in legacy — agent runs the pipeline autonomously when work is ready for verification. **Carve-out**: NEW CI gates / smoke tests / test files MUST run locally regardless of this flag — without execution the new gate is unverified evidence. Iron Law `verify-before-complete` still applies; suppressed runs are surfaced ("quality gates delegated to remote CI"), never claimed as passing. |
|
|
590
|
-
| `quality.wait_for_remote_ci` | `true`, `false` | `false` | When `true`: after `git push`, the agent polls GitHub check-runs / pipeline status on the PR and reports green / red before handing back. When `false`: agent pushes and hands back immediately; the user inspects CI themselves (default — saves agent runtime and tokens). |
|
|
591
575
|
| `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
|
|
592
576
|
| `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
|
|
593
577
|
| `subagents.max_parallel` | integer | `3` | Maximum parallel subagent invocations. `1` serializes. |
|
|
@@ -613,7 +597,7 @@ the canonical narrative lives in
|
|
|
613
597
|
| `verbosity.offer_council_in_delivery` | `true`, `false` | `false` | Offer "run AI Council on this?" inside delivery commands (`/feature-plan`, `/review-changes`, `/roadmap-create`). Council commands themselves are unaffected. |
|
|
614
598
|
| `verbosity.post_action_reports` | `off`, `minimal`, `full` | `minimal` | Multi-line status / summary blocks after a successful action. `off` = no report; `minimal` = one-line confirmation; `full` = bullet list. |
|
|
615
599
|
| `verbosity.intent_announcements` | `true`, `false` | `false` | Intent announcements ("Let me check…", "Now I will…", "Found it") in skill bodies. `false` = act and emit the result. |
|
|
616
|
-
| `telegraph.
|
|
600
|
+
| `telegraph.speak` | `true`, `false` | `false` | Whether the telegraph-speak rule ships at all. `false` (default) = dormant: the projector omits the rule from `dist/router.json`, so its body never reaches a host. The rule body states its own grammar scope and carve-outs (numbered options, Iron-Law literals, code, paths), so this is the only lever. |
|
|
617
601
|
| `telemetry.artifact_engagement.enabled` | `true`, `false` | `false` | Master switch for the artefact engagement log. Not in the shipped template — a missing `telemetry:` section means disabled (the recording rule no-ops). Default-off; zero file IO and zero token cost when `false`. Maintainer-targeted; consumers leave it off. |
|
|
618
602
|
| `telemetry.artifact_engagement.granularity` | `task`, `phase-step`, `tool-call` | `task` | Boundary at which events are recorded. `tool-call` is expensive — opt-in only. |
|
|
619
603
|
| `telemetry.artifact_engagement.record.consulted` | `true`, `false` | `true` | When `true`: record artefacts loaded into context. |
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# 1. Package defaults (shipped by event4u/agent-config)
|
|
9
9
|
# 2. ~/.event4u/agent-config/agent-settings.yml — user-global DX-comfort
|
|
10
10
|
# defaults (whitelist: name, ide, rule_loading_tier, personal.bot_icon,
|
|
11
|
-
# personal.autonomy,
|
|
11
|
+
# personal.autonomy, memory.cadence). Created on opt-in via
|
|
12
12
|
# /onboard; project-local files always win. Legacy
|
|
13
13
|
# ~/.config/agent-config/agent-settings.yml is read as a fallback.
|
|
14
14
|
# 3. This file (.agent-project-settings.yml) — team defaults
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "10.
|
|
42
|
+
agent_config_version: "10.2.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -210,7 +210,6 @@ export const MERGEABLE_KEYS: readonly string[] = [
|
|
|
210
210
|
'memory.cadence',
|
|
211
211
|
'personal.bot_icon',
|
|
212
212
|
'personal.autonomy',
|
|
213
|
-
'telegraph.speak_scope',
|
|
214
213
|
// Knowledge-card global cross-project sharing is a USER-GLOBAL setting
|
|
215
214
|
// (ADR-100 / road-to-structure-grounding-v2). Whitelisted so the
|
|
216
215
|
// ~/.event4u/agent-config/agent-settings.yml values are honoured.
|
package/dist/cli/registry.js
CHANGED
|
@@ -58,7 +58,7 @@ export const REGISTRY = [
|
|
|
58
58
|
{ name: 'use', disposition: 'delegate', synopsis: 'Switch the active experience/profile (writes profile.id).' },
|
|
59
59
|
{ name: 'sessions:list', disposition: 'delegate', synopsis: 'List live agent sessions plus unmerged branches held by other worktrees; --json, --branches.' },
|
|
60
60
|
{ name: 'sessions:claim', disposition: 'delegate', synopsis: 'Claim a roadmap for this session so other sessions skip it; --release clears it.' },
|
|
61
|
-
{ name: 'session:recycle', disposition: 'delegate', synopsis: 'Validate + write the main-session recycle envelope (--verify validates only); the successor resumes from it after /clear.' },
|
|
61
|
+
{ name: 'session:recycle', disposition: 'delegate', synopsis: 'Validate + write the main-session recycle envelope (--verify validates only, --project names the repo); the successor resumes from it after /clear.' },
|
|
62
62
|
{ name: 'roadmap:progress', disposition: 'delegate', synopsis: 'Regenerate agents/roadmaps-progress.md from open roadmaps.' },
|
|
63
63
|
{ name: 'roadmap:progress-check', disposition: 'delegate', synopsis: 'Fail if agents/roadmaps-progress.md is stale (for CI).' },
|
|
64
64
|
{ name: 'roadmap:archive', disposition: 'delegate', synopsis: 'Archive completed roadmaps (PR-gate sweep).' },
|