Skip to content

Bug: preset skill overrides not written when skills_source is marketplace and ai_skills is false #2906

@echarrod

Description

@echarrod

Summary

When a spec-kit project uses "skills_source": "marketplace" in .specify/integration.json AND has "ai_skills": false in .specify/init-options.json, installing a preset that provides type: "command" entries (e.g. specify preset add jira) does not write the corresponding .claude/skills/<skill-name>/SKILL.md override file. The preset appears installed (registry updated, files in .specify/presets/) but the local skill override that should shadow the marketplace plugin skill is silently skipped.

Root cause

Two places in src/specify_cli/presets.py:

  1. _get_skills_dir() has an early-return guard: if not ai_skills_enabled and agent != "kimi": return None — this causes the method to return None for marketplace projects, so _register_skills() is never reached.

  2. _register_skills() computes create_missing_skills = ai_skills_enabled and agent_config.get("extension") != "/SKILL.md" — when ai_skills: false this is always False, so no skill directory is created even when the preset command override would require one.

Expected behaviour

Running specify preset add <preset> in a skills_source: marketplace project should write .claude/skills/<skill-name>/SKILL.md for each command the preset overrides, so that the local skill shadows the marketplace plugin skill.

Steps to reproduce

  1. Initialise a project with specify init --here --integration claude --ai claude (sets ai_skills: false by default with marketplace source)
  2. Install a preset: specify preset add jira --from https://github.com/luno/spec-kit-preset-jira/archive/refs/heads/main.zip
  3. Observe: .specify/presets/jira/ exists and registry shows registered_skills: ["speckit-taskstoissues"], but .claude/skills/speckit-taskstoissues/SKILL.md is never created

Fix

A fix is already in PR #2905. Reference: #2905

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions