@ethlete/agent-rules 0.1.0-next.14 → 0.1.0-next.16
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/CHANGELOG.md +73 -0
- package/README.md +36 -2
- package/THIRD-PARTY-LICENSES.md +35 -0
- package/content/hooks/context-warning.py +450 -112
- package/content/hooks/subagent-model-policy.py +185 -0
- package/content/rules/subagent-models.md +29 -0
- package/content/skills/codex-subagent/SKILL.md +90 -0
- package/content/skills/codex-subagent/codex-agent.mjs +229 -0
- package/content/skills/design-exploration/SKILL.md +203 -0
- package/content/skills/design-exploration/check-story.mjs +139 -0
- package/content/skills/design-exploration/shoot-template.mjs +61 -0
- package/content/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/content/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/content/skills/domain-modeling/SKILL.md +80 -0
- package/content/skills/grill-with-docs/SKILL.md +13 -0
- package/content/skills/grilling/SKILL.md +34 -0
- package/content/skills/handoff/SKILL.md +69 -4
- package/content/skills/rxjs-signals/SKILL.md +4 -3
- package/content/skills/sdk-update/SKILL.md +2 -1
- package/content/skills/styleguide/lint-rule-lookup.md +1 -0
- package/content/skills/timetrack/SKILL.md +190 -10
- package/package.json +1 -1
- package/src/index.js +2 -1
- package/src/index.js.map +1 -1
- package/src/lib/frontmatter.d.ts +2 -0
- package/src/lib/frontmatter.js +2 -1
- package/src/lib/frontmatter.js.map +1 -1
- package/src/lib/git-flow/config.js +1 -1
- package/src/lib/git-flow/config.js.map +1 -1
- package/src/lib/git.d.ts +37 -0
- package/src/lib/git.js +77 -1
- package/src/lib/git.js.map +1 -1
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.js +1 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/plain-text.d.ts +9 -0
- package/src/lib/plain-text.js +22 -0
- package/src/lib/plain-text.js.map +1 -0
- package/src/lib/targets/claude-hooks.js +2 -1
- package/src/lib/targets/claude-hooks.js.map +1 -1
- package/src/lib/targets/codex-hooks.js +2 -1
- package/src/lib/targets/codex-hooks.js.map +1 -1
- package/src/lib/targets/hooks-shared.d.ts +22 -1
- package/src/lib/targets/hooks-shared.js +42 -9
- package/src/lib/targets/hooks-shared.js.map +1 -1
- package/src/lib/targets/shared.js +1 -0
- package/src/lib/targets/shared.js.map +1 -1
- package/src/lib/timetrack-command.js +449 -20
- package/src/lib/timetrack-command.js.map +1 -1
- package/src/lib/timetrack.d.ts +241 -0
- package/src/lib/timetrack.js +83 -2
- package/src/lib/timetrack.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,78 @@
|
|
|
1
1
|
# @ethlete/agent-rules
|
|
2
2
|
|
|
3
|
+
## 0.1.0-next.16
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Name the `take-until-destroyed-last` lint rule in the styleguide lint lookup and the RxJS skill.
|
|
8
|
+
- A design call now lists its drawings as `variants` in `variant-<key>.ts` files, and `et design check` takes `--variant`; the old `options` key and `--option` flag are gone.
|
|
9
|
+
|
|
10
|
+
## 0.1.0-next.15
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- Three skills vendored from mattpocock/skills: `grilling`, `domain-modeling`, and the `grill-with-docs` entry point that runs both.
|
|
15
|
+
- New opt-in `subagent-model-policy` hook: a Claude Code subagent call must name its `model`, and `fable` asks the user first. The new `subagent-models` rule says which model fits which task.
|
|
16
|
+
- Add a `codex-subagent` skill: delegate a task to a Codex agent through a wrapper that prints only the final message, read-only unless you pass `--write`.
|
|
17
|
+
- The `context-warning` hook now reaches the agent at session start, between its own tool
|
|
18
|
+
batches and as a turn ends, not only when the user sends a message.
|
|
19
|
+
- Give a design call rounds, a result band for the chain of winners, a contact sheet of every option and a compare overlay
|
|
20
|
+
- `spec/` is now a branch type of its own, for specification and planning work, so it no longer reports
|
|
21
|
+
`unknown-type`.
|
|
22
|
+
- Two new agent endpoint ops: `day.rows` answers the rows a day drew with the id each edit names, and
|
|
23
|
+
`day.edits` corrects one. `timetrack rows` and `timetrack edit` reach both.
|
|
24
|
+
- A new `settings.rules` agent op, and an `ethlete-agents timetrack rules` command, read the rules that
|
|
25
|
+
name a day's work out of the encrypted store.
|
|
26
|
+
- `timetrack day --out` writes a private file it will not overwrite unasked, printed provider text can
|
|
27
|
+
no longer drive the terminal, and `timetrack edit` refuses a call naming two edits.
|
|
28
|
+
- The timetrack CLI now makes the server prove it holds this run's token before it sends a request,
|
|
29
|
+
and follows no redirect. It needs Timetrack with agent contract version 2.
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- A placeholder now says which checkout, and which piece of it, its name stands for. Two of them may
|
|
34
|
+
carry one name: a spec track and the branch that implements it are both called after the feature.
|
|
35
|
+
- A placeholder repair now reads every branch and only the checkout's own author, so work on an
|
|
36
|
+
unmerged branch is no longer invisible to it.
|
|
37
|
+
- Splitting a checkout-wide placeholder no longer refuses over a day with no commit. It always
|
|
38
|
+
removes the record and its checkout-wide rule, so later branches can get records of their own.
|
|
39
|
+
- Let an agent delete a placeholder through `timetrack standins --remove`, and report
|
|
40
|
+
which checkout and branch each one covers. A record of the wider grain blocked every
|
|
41
|
+
branch of its checkout, and only a click could clear it.
|
|
42
|
+
- A placeholder can be given another name: `timetrack standins --rename <id> --name <text>`. Its
|
|
43
|
+
days and the rules that name it stay, which a delete and a fresh record would lose.
|
|
44
|
+
- Design exploration: the story checker and the screenshot template now also detect Vite's compile error overlay, not only webpack's.
|
|
45
|
+
- The `handoff` skill now tells the agent to name only its own invocation form, so a saved handoff no longer reports the Claude Code and Codex commands side by side.
|
|
46
|
+
- A handoff is now written only when work is actually left: the `handoff` skill tests for it first, and the `context-warning` hook's auto-mode escalation no longer forces a file.
|
|
47
|
+
- `ethlete-agents timetrack day [YYYY-MM-DD]` reports the evidence a day holds, and `--out <path>`
|
|
48
|
+
writes it to a file. The app's store is encrypted, so this is the only way a script reads a real day.
|
|
49
|
+
- `context-warning` hook: the critical tier now asks the agent to finish or hand off instead of forcing a handoff, and every later prompt repeats the remaining budget.
|
|
50
|
+
- Context warnings now distinguish sub-agent pressure from the main session and track each thread independently.
|
|
51
|
+
- A work path is cut to the project its checkout declares, not to a fixed depth. Where a repository
|
|
52
|
+
declares none, its own commits pick the grain between them.
|
|
53
|
+
- Add the `design-exploration` skill: visual design work runs as a dialog, one open call at a time.
|
|
54
|
+
- The design-exploration skill now works in calls instead of story ids, and carries three sub-agent
|
|
55
|
+
briefs for drawing, checking and writing up one.
|
|
56
|
+
- The design-exploration skill now puts a repository's design work in `.ethlete/design/`, with one
|
|
57
|
+
project per slug segment. Each project names its own `styles` and `head`, so one project's type
|
|
58
|
+
scale and fonts no longer reach another project's drawings.
|
|
59
|
+
- On resume, the handoff skill now says to read only what you are about to change, instead of
|
|
60
|
+
re-reading the plan files the handoff already summarises.
|
|
61
|
+
- Say which placeholder holds a whole checkout, and refuse a delete that would strand
|
|
62
|
+
the days it covers. A checkout answered by a placeholder no longer reports as named
|
|
63
|
+
by an issue.
|
|
64
|
+
- A placeholder that covered a whole checkout can be cut into one per directory its commits worked in.
|
|
65
|
+
`timetrack standins --split <id>` reads the directories and the user picks the pieces.
|
|
66
|
+
- A split can name the checkout of a record that holds none, and a claimed directory the commits
|
|
67
|
+
never named opens a piece of its own.
|
|
68
|
+
- `et design [checkout]` serves the design page of any repository that keeps a `.ethlete/design`
|
|
69
|
+
folder, and `et design check` says why a call does not render.
|
|
70
|
+
- `et design check --call` now reports `NO BROWSER` when neither the checkout nor the package
|
|
71
|
+
resolves `playwright`, instead of throwing the module loader's own error.
|
|
72
|
+
- `repoNamingDecisions`, the `naming.offers` op and `ethlete-agents timetrack naming` say why a checkout was offered no name.
|
|
73
|
+
- An agent reads the open stand-ins through `standIn.list` and `ethlete-agents timetrack standins`. It may list them and never write one.
|
|
74
|
+
- `status` and `ethlete-agents timetrack status` report `tempoReady`. Without a Tempo token the app reads no worklog history, and nothing said so.
|
|
75
|
+
|
|
3
76
|
## 0.1.0-next.14
|
|
4
77
|
|
|
5
78
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -280,7 +280,7 @@ per hook in the config:
|
|
|
280
280
|
|
|
281
281
|
```json
|
|
282
282
|
{
|
|
283
|
-
"hooks": ["context-warning"]
|
|
283
|
+
"hooks": ["context-warning", "subagent-model-policy"]
|
|
284
284
|
}
|
|
285
285
|
```
|
|
286
286
|
|
|
@@ -298,18 +298,47 @@ unregisters and deletes the script again. Codex only loads project-local hooks o
|
|
|
298
298
|
Available hooks:
|
|
299
299
|
|
|
300
300
|
- **`context-warning`** - warns once per tier (and instructs the agent) when the session
|
|
301
|
-
context crosses 70% / 85% of the token budget, recommending a handoff. Under Claude the
|
|
301
|
+
context crosses 70% / 85% / 95% of the token budget, recommending a handoff. Under Claude the
|
|
302
302
|
budget is capped at the 200k long-context pricing boundary: on 1M-window models every
|
|
303
303
|
request past 200k input tokens bills the whole context at a premium rate, so the
|
|
304
304
|
warnings fire at ~140k/~170k instead of deep into the expensive range. Codex uses
|
|
305
305
|
the model-specific 272k pricing boundary for GPT-5.6, GPT-5.5 and GPT-5.4, and the
|
|
306
306
|
rollout's reported context window for models without that pricing rule.
|
|
307
307
|
|
|
308
|
+
The 85% tier asks the agent to choose - finish the task, or hand off - because a session
|
|
309
|
+
is often a step or two from done when it fires. The 95% tier takes that choice away. Every
|
|
310
|
+
prompt after the first warning carries a short reminder instead of a new warning: the
|
|
311
|
+
remaining budget, and how to work so that either ending stays cheap. The `handoff` skill
|
|
312
|
+
calls this handoff mode.
|
|
313
|
+
|
|
314
|
+
Under Claude the hook runs on four events, because a warning that only a user prompt can
|
|
315
|
+
trigger never reaches a long autonomous run. `SessionStart` names the budget before the
|
|
316
|
+
first request. `UserPromptSubmit` carries the tiered warning and the reminder.
|
|
317
|
+
`PostToolBatch` fires between the agent's own model requests, so it learns the count while
|
|
318
|
+
it works. `Stop` fires as a turn ends over 85% and the turn then continues, so the agent
|
|
319
|
+
must take one of three and say which: finish, hand off, or cross the boundary on purpose
|
|
320
|
+
for a reason it states. Each event speaks once per tier. Codex has none of the three, so
|
|
321
|
+
its registration stays on `UserPromptSubmit`.
|
|
322
|
+
|
|
308
323
|
Two things are Claude-only: the separate user-facing line (Codex documents only
|
|
309
324
|
`additionalContext`, so there the warning is folded into the text the model is told to
|
|
310
325
|
relay), and the auto-mode escalation that writes the handoff file unprompted - Codex's
|
|
311
326
|
`permission_mode` values are undocumented, so no value enables it.
|
|
312
327
|
|
|
328
|
+
Codex sub-agents are tracked by their own thread ids even though they share the root
|
|
329
|
+
session id. A sub-agent warning tells that child to report its state to the parent; it
|
|
330
|
+
never tells the user or the main agent to hand off the root session.
|
|
331
|
+
|
|
332
|
+
- **`subagent-model-policy`** (Claude Code only) - gates every call to the subagent tool.
|
|
333
|
+
A call that names no `model` is denied and the model table is returned instead: haiku for
|
|
334
|
+
a lookup, opus for real work, sonnet in between, fable for judgment-heavy work. Without
|
|
335
|
+
it a subagent inherits the model leading the session, which is how an expensive model
|
|
336
|
+
ends up doing every grep it delegates; with it, that mistake costs one tool call.
|
|
337
|
+
|
|
338
|
+
A call that names `fable` asks the user - it is the most expensive option, and only the
|
|
339
|
+
user knows whether the task is judgment-heavy. A fork and an agent type whose own
|
|
340
|
+
definition sets a model both pass untouched, because `model` would change nothing there.
|
|
341
|
+
|
|
313
342
|
Hooks can be turned off per machine - see the local config below.
|
|
314
343
|
|
|
315
344
|
## Git hooks (opt-in)
|
|
@@ -437,9 +466,14 @@ scope: consumer # consumer | sdk | both
|
|
|
437
466
|
requires: ['@ethlete/core'] # optional
|
|
438
467
|
paths: ['**/*.css'] # optional; becomes Claude `paths` and Cursor `globs` on rules
|
|
439
468
|
vars: [docsBaseUrl] # optional
|
|
469
|
+
modelInvocation: false # optional; a skill only the user may start
|
|
440
470
|
---
|
|
441
471
|
```
|
|
442
472
|
|
|
473
|
+
A content file vendored from another repository keeps its upstream wording apart from the
|
|
474
|
+
link syntax, and names its source in the body. `THIRD-PARTY-LICENSES.md` lists each one,
|
|
475
|
+
its upstream commit and its license.
|
|
476
|
+
|
|
443
477
|
`content/output-styles/<name>.md` is a third kind, and the only one this package does not
|
|
444
478
|
compile: it is a Claude Code output style verbatim, so its frontmatter is Claude's
|
|
445
479
|
(`name`, `description`, `keep-coding-instructions`) and `output-style` installs the file
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Third-party content
|
|
2
|
+
|
|
3
|
+
Content in this package that comes from another repository, with the license it keeps.
|
|
4
|
+
To update one, copy it again from upstream and record the new commit here.
|
|
5
|
+
|
|
6
|
+
## [mattpocock/skills](https://github.com/mattpocock/skills)
|
|
7
|
+
|
|
8
|
+
Commit `3cca18b` (2026-09-04). Vendored skills, kept as written upstream apart from the
|
|
9
|
+
generator's own link syntax:
|
|
10
|
+
|
|
11
|
+
- `content/skills/grill-with-docs` - the entry point; calls the other two.
|
|
12
|
+
- `content/skills/grilling`
|
|
13
|
+
- `content/skills/domain-modeling`
|
|
14
|
+
|
|
15
|
+
MIT License
|
|
16
|
+
|
|
17
|
+
Copyright (c) 2026 Matt Pocock
|
|
18
|
+
|
|
19
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
20
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
21
|
+
in the Software without restriction, including without limitation the rights
|
|
22
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
23
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
24
|
+
furnished to do so, subject to the following conditions:
|
|
25
|
+
|
|
26
|
+
The above copyright notice and this permission notice shall be included in all
|
|
27
|
+
copies or substantial portions of the Software.
|
|
28
|
+
|
|
29
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
30
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
31
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
32
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
33
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
34
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
35
|
+
SOFTWARE.
|