Lazy-load skill descriptions instead of injecting all into system prompt

Resolved 💬 3 comments Opened Feb 25, 2026 by ItsDaRa Closed Feb 25, 2026

Problem

All installed skill descriptions are injected into the system prompt on every message, regardless of whether any skill will be used in the session. With 58 skills installed, this costs ~1,400 tokens per message — tokens that are wasted 99% of the time since most sessions use 0 skills, and the rare session that does use one uses exactly 1.

The justification would be "the model needs to know skills exist to suggest them," but in practice this never happens. Users invoke skills explicitly by typing /skill-name. The model doesn't proactively suggest running skills.

Proposal

Two-tier loading:

  1. Always loaded: Just skill names as a flat list (~50 tokens for 58 skills instead of ~1,400)
  2. On demand: Full skill description loaded only when the user types /skill-name or the model invokes one via the Skill tool

This is essentially how tool descriptions could work — the model sees enough to know a skill exists, and gets the full prompt only when it's actually needed.

Impact

  • Saves ~1,400 tokens/message for a typical skill library (scales with number of installed skills)
  • No functional regression — users already invoke skills explicitly
  • Frees context for actual conversation content

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗