Skip to content

v0.9.14: plugin suggestion matcher nags every turn on topic keywords — gate to once-per-session and skip domains a loaded skill covers #6274

Description

@Hmbown

Why this matters

Every user turn, the engine appends a <recommended_plugins> fragment matched on conversation keywords. A session that merely talks about a topic gets the same plugin nag repeatedly, and the matcher cannot tell that a locally loaded skill already covers the domain. Users dismiss or ignore the prompt and it comes back next turn — it reads as spam, and each injection is wasted context.

Current behavior

  • crates/tui/src/core/engine.rs:3711user_content_blocks calls recommended_plugins_user_fragment(&text, …) on every user turn.
  • crates/tui/src/plugins/recommend.rs:232match_plugin_for_draft keyword/name matches score 700–900 while PROACTIVE_MIN_SCORE is 700, so a topical keyword always clears the proactive bar.
  • Dismissals are honored (settings.dismissed_plugin_suggestions), but there is no once-per-session cap and no loaded-skill awareness.

Repro (live, this session, 4 hits)

One real session, four different injections, each tracking the topic of the user's message rather than a capability gap:

  1. takeover/handoff talk → suggested handoff (cw2:handoff) while the local cw-handoff skill was already loaded
  2. continuation mentioning research → research (cw2:research)
  3. goal-continuation text → remember (anthropic:remember)
  4. a pasted summary mentioning release → release (cw2:release)

Desired behavior

  1. A plugin id is injected at most once per Engine lifetime (evaluate once, consume — the grokbuild pattern: refs/grokbuild …/app_view.rs ssh_wrap_tip_evaluated one-shot tips; kimicode's capability catalog is pull-based with no proactive keyword injection).
  2. Suppress a suggestion when a loaded local skill already covers the plugin name/domain (skill handoff loaded → never suggest plugin handoff).
  3. Keep honoring dismissals; keep the fragment append-only on the user turn (never the pinned system prefix).

Acceptance criteria

  • Same plugin id never appears in two fragments in one Engine session (unit test over user_content_blocks or the fragment fn with a session-state set)
  • A loaded skill with a matching name suppresses the plugin suggestion (unit test)
  • Dismissed plugins still never return (existing behavior kept, test still passes)
  • cargo test -p codewhale-tui --lib --locked green for the touched modules

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtuiTerminal UI behavior, rendering, or interaction

    Projects

    • Status
      In progress

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions