Skip to content

[Design review] AI-powered personalized plugin recommendations from usage patterns #152

Description

@kamegoro

Summary

tobira already tracks per-command usage, efficiency gaps (graph.efficiency_gaps()), and category-level friction (motion/edit/search/window/fold/mark/macro). This issue proposes extending that signal outward: periodically cross-reference the user's observed friction against the broader Neovim plugin ecosystem (awesome-neovim / store.nvim's 6,200+ plugin database) and surface a small number of concrete, personalized plugin recommendations — not just built-in command suggestions.

Example: a user who repeatedly does <C-w>s/<C-w>v followed by manual window navigation, with heavy gt/gT tab-switching, is exhibiting a recognizable "managing too many windows/tabs manually" shape. Today tobira can at most nudge toward built-in commands for this; it has no way to say "a plugin like smart-splits.nvim or harpoon.nvim would remove this friction entirely."

Why this needs an LLM (not a hand-written rule table)

Matching a structured behavioral signal against an unstructured, constantly-changing catalog of 6,000+ plugin descriptions is a semantic retrieval/reasoning problem, not a fixed lookup. A hardcoded mapping table would need continuous manual maintenance as the plugin ecosystem grows and shifts — the same problem tobira avoided for its own 155-command registry by keeping it hand-curated and small.

What's already out there (checked to avoid duplicating)

  • dotfyle.com: recommends plugins by cross-config popularity/co-occurrence ("users with a similar setup also install X") — not based on any individual's actual editing behavior.
  • store.nvim (6,200+ plugin browsable database): manual search/filter by name/tags/author/popularity — no behavior-driven recommendation.

Neither reasons from your own observed friction. This looks like open ground.

Open design questions (not yet decided — hence Design review)

  • Plugin data source: self-maintained snapshot vs. crawling awesome-neovim vs. reusing store.nvim's crawler data (would need their buy-in).
  • Must stay strictly opt-in and low-frequency (e.g. a :TobiraRecommend command, or a once-a-month check at most) — this would be tobira's first feature requiring an external API call and a network round-trip, which conflicts with the "fully passive, zero config, zero cost by default" positioning in the README. Needs to be very clearly separated from the default experience.
  • Privacy: what aggregated summary (not raw keystrokes) leaves the machine, and how it's presented to the user before any call is made.
  • Cost: who pays for the LLM call — bring-your-own-key like some AI plugins, or a hosted free tier, or skip entirely if this can't be made cheap/optional enough.

Relevant files

  • lua/tobira/core/graph.lua (existing efficiency-gap / category aggregation to build the summary from)
  • New module, likely opt-in and isolated from core (e.g. lua/tobira/core/recommend.lua)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions