Add interactive picker for ug skill add download - #579
Open
xsh310 wants to merge 3 commits into
Open
Conversation
xsh310
added this pull request to stack #576
September 12, 2026 00:40
xsh310
commented
Sep 12, 2026
xsh310
commented
Sep 12, 2026
xsh310
marked this pull request as ready for review
September 12, 2026 07:13
xsh310
force-pushed
the
skills-picker-download-wiring
branch
from
September 12, 2026 07:16
1fe68d5 to
a693c46
Compare
Wire the interactive download picker for `ug skill add`, the feature the earlier refactors set up. It mirrors the MCP-services picker. - list_all_skills: workspace-wide skill walk via walk_catalog_schemas (catalogs -> schemas -> skills in parallel under a deadline), flattening and streaming each schema's finalized skills by FQN. discover_all_skills wraps it with a token, the counterpart to discover_all_mcp_service_names. - Picker glue in skills_download.py: _skill_download_choice (value = FQN, title flags on-disk bundles), _skills_download_background_loader (streams discovered skills in as choices), prompt_for_skill_download_choices (scrolling_checkbox with loading_noun="skills"). - configure_skills_download_picker_command: open the picker immediately, stream skills in, then download_selected_skills + register on save; Ctrl-C downloads nothing. - skills_add opens the picker when --mcp, --location, and --skills are all omitted on an interactive terminal; the typed paths are unchanged, and a non-interactive run still errors with "--location is required". - README: document the no-argument picker. Tests cover list_all_skills (flatten/stream/dedupe/progress/deadline/reason), discover_all_skills, the picker glue, the picker command, and CLI routing. Co-authored-by: Isaac <no-reply@databricks.com>
It was a thin single-use wrapper; the loader now runs list_all_skills on the token the picker command already fetched, dropping a redundant token lookup. (The MCP path keeps discover_all_mcp_service_names because it has a synchronous sibling, discover_mcp_service_names, that skills lacks.) Co-authored-by: Isaac <no-reply@databricks.com>
It hands back list[SkillRef], so on_skills reads truer than the on_services name carried over from the MCP walk for symmetry. Co-authored-by: Isaac <no-reply@databricks.com>
xsh310
force-pushed
the
skills-picker-download-wiring
branch
from
September 14, 2026 03:08
a693c46 to
e68b9c6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
PR D (final) of the
ug skill addinteractive-picker stack: it wires the feature. Runningug skill addwith no--mcp,--location, or--skillson an interactive terminal now opens a picker of the workspace's skills to download, mirroringug mcp add's picker exactly.Design doc:
ug_skill_add_download_interactive_picker_design.md(PR table, row D). Builds on PR A (picker primitives), PR B (walk_catalog_schemas), and PR C (download_selected_skills).Changes
All in
skills_download.py(discovery + picker glue) andcli.py(routing):list_all_skills— workspace-wide skill walk viawalk_catalog_schemas(catalogs → schemas → skills in parallel under a wall-clock deadline), flattening and streaming each schema's finalized skills by FQN._skill_download_choice(value = FQN, title flags on-disk bundles, which stay selectable so a re-download can update them),_skills_download_background_loader(runslist_all_skillson the token the command already fetched and streams discovered skills into the open picker as choices), andprompt_for_skill_download_choices(scrolling_checkboxwithloading_noun="skills").configure_skills_download_picker_command— opens the picker immediately, streams skills in behind it, thendownload_selected_skills+register_schemaless_skills_connectionon save. Ctrl-C downloads nothing and leaves the connection untouched.skills_add— opens the picker when--mcp,--location, and--skillsare all omitted on an interactive terminal (via_stdin_is_interactive). The typed--location/--skillspaths are unchanged, and a non-interactive run (piped/CI) still errors with--location is required.Edge cases (handled by the reused primitives)
walk_catalog_schemasreturns what it found once the budget is exceeded.Testing
uv run ruff check .,ruff format --check src tests,ty check src, anduv run pytestall pass (the 2 pre-existing e2e failures intest_e2e_user_agentandtest_claude_smart_routing_v2are unrelated and also fail on the base branch). New unit tests coverlist_all_skills(flatten, stream, dedupe by FQN, progress, deadline, walk-failure reason), the picker glue (choice on-disk flag, background loader streaming, prompt selection and cancel), the picker command (download+register, Ctrl-C no-op), and CLI routing (interactive opens the picker,--skillsstays on the typed path, non-interactive errors).Stacked on #578.
Screen.Recording.2026-09-11.at.10.04.14.PM.mov
This pull request and its description were written by Isaac.