Skip to content

bug(managed-skills): provider declaring personalAgentSkills unsupported blocks every session spawn #1014

Closed

Description

@Juliusolsson05

Expected

Registering a provider that declares personalAgentSkills: { supported: false } must not affect spawning sessions of OTHER providers. Managed-skill (TLDR/Goal/personal) health should be computed over providers that actually support personal agent skills.

Actual

After merging the grok integration (PR #844, main @ 5fda2f0), every session:spawn / session recovery fails in ~7ms with:

Error occurred in handler for 'session:spawn': Error: TLDR skill is unavailable or conflicts with an existing file. Review managed skill health in Settings.
    at out/main/index.js:71896

The renderer flattens this to "Session failed to start. Check provider setup and retry." All providers (claude/codex/opencode) are affected; no agent can start.

Root cause chain

  1. src/providers/registry.main.ts:153 — grok is the first registered provider to declare personalAgentSkills.supported === false.
  2. src/main/agentCodeConventions/targets.ts:64-67 — every registered provider with supported: false is pushed into unsupportedProviders (no install-gating; applies on every machine).
  3. src/main/agentCodeConventions/AgentCodeConventionsService.ts:3036 — customHealth(): any unsupported provider ⇒ TLDR skill health = 'unsupported'.
  4. AgentCodeConventionsService.ts:833 — ensureProductSkill() requires 'active' and throws otherwise.
  5. Pre-spawn reconcile (src/main/sessionManager.ts:2618) runs ensureTldrSkill() before every spawn, for every provider.

Latent design flaw exposed: the managed-skils layer assumed "all registered providers support personal skills". Grok is the legitimate first counter-example.

Secondary breakage from the same assumption: the unsupportedProviders.length > 0 gates at AgentCodeConventionsService.ts lines 1145/1400/1518/1807/2030/2159 also block enabling any personal/custom skill app-wide.

Evidence

Incident journal run 2026-09-19T04-09-36-635Z-main-23681-9e113a:

  • 15× conventions.pre_spawn_reconcile.error (all "TLDR skill is unavailable...")
  • 15× recover.failed with code: start-failed, durationMs ~7 (fails before any CLI launch), kinds: claude/opencode/codex

Why tests missed it

Every conventions test stubs resolveTargets with unsupportedProviders: []; no integration test boots the real registry together with the conventions service.

Fix direction

Compute product-skill health over supported targets only. Unsupported providers surface as informational per-provider rows in Settings (the customUnsupportedStatuses() mechanism) but do not block spawns or skill enablement. Keep 'unsupported' health only for the degenerate case of zero supported providers.

Environment

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions