Skip to content

v0.7.0 — reframe the menu as the user's standing request + first-task aha - #4

Merged
WinterDDo merged 1 commit into
mainfrom
feat/v0.7.0-reframe-first-task
Jun 19, 2026
Merged

v0.7.0 — reframe the menu as the user's standing request + first-task aha#4
WinterDDo merged 1 commit into
mainfrom
feat/v0.7.0-reframe-first-task

Conversation

@WinterDDo

Copy link
Copy Markdown
Owner

Root cause, then the fix

The proactive command menu had fired ~4 times in the entire usage ledger (all basic commands). A controlled experiment — vary only the trigger's framing, hold the task and command-knowledge constant — isolated why:

Firing is a FRAMING problem, not a knowledge problem. The model always knew which command fit. The old rule framed the menu as the assistant's own optional, default-silent, high-bar judgment, which loses to the model's trained "don't be presumptuous" disposition, so it resolved to silence. Reframing the same menu as the user's standing request (they installed this because they want to be shown these moves; presenting it fulfills that request) roughly doubled firing in the experiment, with no rise in false-fires.

Changes

  • Rewrote the unlock rule around that finding: user's-standing-request framing; removed DEFAULT IS SILENCE and the four-AND gate; judges the MOMENT, not the person (never silent just because the user looks capable). Net fewer tokens. Anti-nag valves kept (one surfacing per reply, quiet/mute, decline-to-stop) plus a prominent gate — if the user just declined or said to just proceed, never re-offer.
  • First-task demo (new welcome section): on the user's first substantial task, the menu is presented so a new user feels the value immediately. Local = deterministic flag (armed on first run, injected by the router, cleared by the tracker once a menu fires — keeps trying until it lands, then never again); cloud (no persistent state) = per session. No steady-state token cost.

Validation (beginner + power-user personas × task cells)

  • The first task fires; steady high-value moments fire ~80% including for a power user (the "judge the moment, not the person" goal); trivial asks, mid-task follow-ups, coupled work, and a just-declined task stay silent (the anti-nag floor held after removing default-silence).
  • Honest residuals: a single turn is not literally 100% (the model is asked, not forced — a hook injects text, it cannot emit the menu itself; the first-task flag makes it cumulatively near-certain across the first turns), and a just-declined task still re-offers ~1-in-8. Simulated rates over-state production; real firing is now visible in the ledger (every menu logs as suggestion_made) and will be tuned from there.
  • 33 unit tests green; steady-state context <2500 chars; claude plugin validate ✔; cloud context regenerated.

Cloud vendor PRs to the 5 production repos are intentionally held until the local feel is verified.

🤖 Generated with Claude Code

…t-task aha

Root cause (controlled experiment, vary framing only): the proactive menu
almost never fired because of FRAMING, not knowledge. The model always knew
which command fit; the old rule framed the menu as the assistant's optional,
default-silent, high-bar judgment, which loses to the trained don't-be-
presumptuous disposition. Reframing the same menu as the user's standing
request roughly doubled firing with no rise in false-fires.

- Rewrote the unlock rule: user's-standing-request framing; removed
  DEFAULT-SILENCE + the four-AND gate; judge the MOMENT not the person.
  Net fewer tokens. Anti-nag valves kept + prominent just-declined gate.
- Added a one-time first-task demo (new welcome section): local deterministic
  flag (armed on first run, cleared by tracker once a menu fires); cloud
  per-session (no state). No steady-state token cost.
- Validated beginner+power personas; 33 tests green; steady-state <2500;
  cloud context regenerated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@WinterDDo
WinterDDo merged commit 8a65da4 into main Jun 19, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant