Skip to content

Add skill remove --mcp for global scope removal - #524

Open
xsh310 wants to merge 2 commits into
xshen/skill-per-agent-statusfrom
xshen/skill-remove
Open

Add skill remove --mcp for global scope removal#524
xsh310 wants to merge 2 commits into
xshen/skill-per-agent-statusfrom
xshen/skill-remove

Conversation

@xsh310

@xsh310 xsh310 commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

What

Adds ucode skill remove --mcp, the inverse of ucode skill add --mcp. It interactively removes skill schemas from the skills MCP connection across every configured agent. Removing downloaded skills is not supported yet, so the command requires --mcp.

How

  • remove_skills_command() reads each configured client's skills scope, offers the union of schemas via a picker (each annotated with the clients that carry it), and removes the selected schemas from every client that has them.
  • It reuses the per-client update path, so dropping the last schema leaves the schema-less connection registered rather than deleting it. It never adds or reconfigures anything and needs no Databricks auth.
  • cli.py gains the skill remove command and a status hint pointing at ug skill add / ug skill remove --mcp.

Tests

  • test_mcp.py: a selected schema is removed from every client and each is re-registered; removing all schemas keeps the schema-less connection; an empty scope is a no-op that never opens the picker; the picker is offered each client's real scope.
  • test_cli.py: skill remove without --mcp errors; skill remove --mcp dispatches the global removal.

uv run pytest tests/test_mcp.py tests/test_cli.py tests/test_lint.py is green.

Manual verification (installed build)

Ran against the installed build (0.1.0+91.g5c0dc1e) in the isolated sandbox (temp HOME, stub claude/codex binaries recording registrations, DATABRICKS_BEARER for offline auth), starting from state claude=[claude.only], codex=[shared.skills]. Invoked remove_skills_command() with the interactive picker stubbed to select shared.skills (the picker needs a TTY); all state I/O and per-client registration ran for real.

Check Result
Picker input Offered both clients' scopes: {claude:[claude.only], codex:[shared.skills]}
State after shared.skills dropped from codex; result {claude:[claude.only]} with codex's now-empty entry removed
Registrations Only codex re-registered, with the schema-less URL; claude untouched
Guard ucode skill remove (no --mcp) exits with ERROR Removing downloaded skills is not supported yet ...

Stacking

Third in the stacked per-agent skills series, based on xshen/skill-per-agent-status (#523). Per-agent remove builds on this next. Reviewing the diff against that base shows just this change. It rebuilds behavior originally designed by Arthur Jenoudet on the current per-client-map state model.

This pull request and its description were written by Isaac.

@xsh310
xsh310 force-pushed the xshen/skill-remove branch from fb94ba5 to 59d2fd5 Compare September 8, 2026 05:43
@xsh310
xsh310 force-pushed the xshen/skill-remove branch from 59d2fd5 to 0aa87df Compare September 8, 2026 18:25
@xsh310
xsh310 force-pushed the xshen/skill-remove branch from 0aa87df to 98934ea Compare September 8, 2026 19:09
@xsh310
xsh310 marked this pull request as ready for review September 8, 2026 21:09
@xsh310
xsh310 force-pushed the xshen/skill-remove branch from 98934ea to 4921ec5 Compare September 8, 2026 22:12
@xsh310
xsh310 force-pushed the xshen/skill-remove branch from 4921ec5 to 333fc68 Compare September 8, 2026 22:16
xsh310 and others added 2 commits September 8, 2026 23:08
Introduce `ucode skill remove --mcp`, the inverse of `ucode skill add --mcp`. It
shows the schemas in each configured client's skills scope, annotated with the
clients that carry them, and removes the selected schemas from every client that
has them. `remove_skills_command` reuses the per-client update path, so dropping
the last schema leaves the schema-less connection in place. It never adds or
reconfigures anything and needs no Databricks auth. Removing downloaded skills is
not supported yet, so the command requires `--mcp`. A status hint points at the
new add/remove commands.

Co-authored-by: Arthur Jenoudet <arthur.jenoudet@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
remove_skills_command called _update_skills_mcp with the default
print_summary=True, so a removal printed the full "Skills MCP registered"
block (Server / URL / Configured / Tools) before "Removed N skill schemas",
which reads wrong for a removal. Pass print_summary=False so a removal reports
only what it removed. The print_summary hook already existed for this case.

Co-authored-by: Arthur Jenoudet <arthur.jenoudet@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@xsh310
xsh310 force-pushed the xshen/skill-remove branch from 14e8dcd to bda1dc8 Compare September 8, 2026 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant