You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.rs → SkillCommand 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 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.
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: theskillsplatform extension exposessearchSkills/listSkills/loadSkill, and its startup instruction tells the agent "You have N skills available…". So on the CLI (and any headlessbiorouterddeployment) the only way to stop a skill from being part of the analysis is to fullybiorouter skill removeit 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.
~/.config/biorouter/skills-config.json, shape{"disabled": ["<skill-or-bundle-name>", …]}(absent = enabled).crates/biorouter/src/agents/skills_extension.rsreads it viaget_disabled_skills()and enforces it everywhere:enabled_skill_entries()filters the catalog,list_toolshides the skill tools entirely when nothing is enabled, andhandle_load_skillhas 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."ui/desktop/src/store/skillOverrides.ts(read/writeskills-config.json) driven byui/desktop/src/components/skills/SkillsView.tsx+SkillItem.tsx.about-biorouter/SKILL.md— "Toggles persist in~/.config/biorouter/skills-config.json" and the paths table row "Skill enable/disable state."The CLI's
skillcommand (crates/biorouter-cli/src/commands/skill.rs→SkillCommandincrates/biorouter-cli/src/cli.rs) has onlyinstall,list, andremove, none of which touchskills-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
disabledset (no new enforcement needed — the backend already honors it):biorouter skill disable <name>— add<name>toskills-config.json'sdisabledarray (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).bundle_nameis in the set.Identifier to get right: the backend's disabled set matches on the skill's frontmatter
name(andbundle_name), whereas the CLI's existinglist/removeoperate on the on-disk directory slug / relative path.enable/disablemust target the identifier the backend actually filters on (the skillname/ bundle name), andskill listshould 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.zipto bring it back.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.--skill/--no-skillflag — 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_skillruntime check ~L605,list_toolsgating ~L722).Existing CLI surface (to extend):
crates/biorouter-cli/src/commands/skill.rs,SkillCommandenum incrates/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.mdskills section, and thebiorouter skill --helptext.I have verified this does not duplicate an existing feature request