Skip to content

Feature request: CLI should enable/disable skills, not only add/remove (backend + GUI already support it) #32

Description

@Broccolito

Please explain the motivation behind the feature request.

From the CLI, skills can only be installed and removed — there is no way to disable an installed skill while keeping it on disk. Every skill present under ~/.config/biorouter/skills/ (plus built-ins and extension-bundled skills) is enabled by default and advertised to the model in every session: the skills platform extension exposes searchSkills / listSkills / loadSkill, and its startup instruction tells the agent "You have N skills available…". So on the CLI (and any headless biorouterd deployment) the only way to stop a skill from being part of the analysis is to fully biorouter skill remove it and reinstall it later — losing the skill and any local edits — or to hand-edit an undocumented JSON file.

The important part: the per-skill enable/disable capability already exists in the backend and is fully enforced — it just isn't exposed on the CLI.

  • State lives in ~/.config/biorouter/skills-config.json, shape {"disabled": ["<skill-or-bundle-name>", …]} (absent = enabled).
  • crates/biorouter/src/agents/skills_extension.rs reads it via get_disabled_skills() and enforces it everywhere: enabled_skill_entries() filters the catalog, list_tools hides the skill tools entirely when nothing is enabled, and handle_load_skill has a mid-session runtime check that rejects a disabled skill with "Skill '…' is currently disabled. Enable it in Biorouter's Skills settings to use it."
  • The desktop GUI already writes this file through a per-skill toggle: ui/desktop/src/store/skillOverrides.ts (read/write skills-config.json) driven by ui/desktop/src/components/skills/SkillsView.tsx + SkillItem.tsx.
  • It's even documented: about-biorouter/SKILL.md"Toggles persist in ~/.config/biorouter/skills-config.json" and the paths table row "Skill enable/disable state."

The CLI's skill command (crates/biorouter-cli/src/commands/skill.rsSkillCommand in crates/biorouter-cli/src/cli.rs) has only install, list, and remove, none of which touch skills-config.json. GUI users can toggle a skill off; CLI/headless users cannot.

Describe the solution you'd like

Add enable/disable subcommands to the CLI that edit the existing disabled set (no new enforcement needed — the backend already honors it):

  • biorouter skill disable <name> — add <name> to skills-config.json's disabled array (idempotent).
  • biorouter skill enable <name> — remove it from the array (idempotent).
  • biorouter skill list — show each skill's enabled/disabled status (it currently lists name + description only, giving no way to see or discover what's off).
  • Should also accept a bundle name, matching the backend, which already disables a whole bundle when its bundle_name is in the set.

Identifier to get right: the backend's disabled set matches on the skill's frontmatter name (and bundle_name), whereas the CLI's existing list/remove operate on the on-disk directory slug / relative path. enable/disable must target the identifier the backend actually filters on (the skill name / bundle name), and skill list should surface both the slug and the name so users know what to pass. Aligning these identifiers is part of the work.

Describe alternatives you've considered

  • remove + reinstall — the only CLI option today; destroys the installed skill (and local edits) just to silence it temporarily, and requires having the original .zip to bring it back.
  • Hand-editing skills-config.json — works (the backend reads it), but it's undocumented for end users, easy to get wrong (skill name vs directory slug), and has no validation or discoverability.
  • A per-session --skill/--no-skill flag — useful separately, but doesn't give the persistent, machine-wide default that the GUI toggle already provides.

Additional context

  • Backend enforcement + storage format: crates/biorouter/src/agents/skills_extension.rs (get_disabled_skills ~L249, is_skill_enabled ~L417, handle_load_skill runtime check ~L605, list_tools gating ~L722).

  • Existing CLI surface (to extend): crates/biorouter-cli/src/commands/skill.rs, SkillCommand enum in crates/biorouter-cli/src/cli.rs (~L863) and its dispatch (handle_skill_subcommand, ~L1992).

  • GUI reference implementation of the same toggle: ui/desktop/src/store/skillOverrides.ts, ui/desktop/src/components/skills/SkillsView.tsx.

  • Docs to update alongside: about-biorouter/SKILL.md skills section, and the biorouter skill --help text.

  • I have verified this does not duplicate an existing feature request

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions