Skip to content

Add "Create from current selection" to Configure Tool Sets #320444

@jamesmontemagno

Description

@jamesmontemagno

Summary

Today, "Configure Tool Sets..." lets users create a new tool sets file or open an existing user-defined tool set, but it does not help them capture the tools they have already chosen in an active chat session. This creates unnecessary friction when a user has already curated a useful tool selection in agent mode and wants to turn that selection into a reusable tool set.

We should add a "Create from current selection" flow that creates a new tool set definition pre-filled from the currently enabled tools and tool sets in the active chat input.

Problem

The current flow is file-oriented, not selection-oriented:

  • "Configure Tool Sets..." only offers:
    • create a new tool sets file
    • open an existing user tool set file
  • The active chat already tracks the current enabled tool/tool set state
  • The tools picker already exposes a "Configure Tool Sets..." entry, but that action loses the context of what the user currently has selected

This means users have to manually re-create a tool set after they have already done the work of selecting the right tools in chat.

Proposal

Add a new action inside the "Configure Tool Sets..." flow:

  • "Create from current selection..."

This action should:

  • Detect the current tool selection from the active chat widget
  • Create a new .toolsets.jsonc file, or allow appending to a chosen user tool sets file
  • Insert a new tool set object with the ools property pre-filled from the current selection
  • Open the file in the editor so the user can finish naming, describing, and optionally changing the icon

Expected UX

Entry point

The feature should be available from the existing "Configure Tool Sets..." command.

When invoked from the tools picker while a chat widget is active, the command should have access to the current tool selection immediately.

If invoked without suitable active chat context, we should either hide "Create from current selection", or show it but fall back gracefully with a clear message.

Suggested flow

Inside "Configure Tool Sets...", offer:

  • Create from current selection...
  • Create new tool sets file...
  • Existing user tool sets...

If the user picks "Create from current selection...":

  1. Prompt for the target file name, or allow picking an existing user tool sets file
  2. Prompt for the new tool set name
  3. Create a tool set stub pre-filled from the current selection
  4. Open the resulting file

Generated content example

jsonc { "myToolSet": { "tools": [ "read", "search", "github/issues" ], "description": "", "icon": "tools" } }

Implementation notes

Source of truth

The current selection already exists as an enablement map in the active widget:

  • src/vs/workbench/contrib/chat/browser/widget/input/chatSelectedTools.ts
  • src/vs/workbench/contrib/chat/browser/attachments/chatVariables.ts

We should reuse that state instead of recomputing from the picker UI.

Serialization rules

  • If a tool set is enabled, write the tool set reference name, not every child tool
  • If an individual tool is enabled outside of an enabled tool set, write the individual tool reference name
  • De-duplicate entries
  • Use fully qualified reference names where appropriate to match prompt syntax

Initial implementation

For the first version:

  • Create a new .toolsets.jsonc file with a single pre-filled tool set object

Acceptance Criteria

  • "Configure Tool Sets..." includes a "Create from current selection..." option when there is an active chat tool selection
  • Choosing that option creates a new tool set definition pre-filled from the active chat selection
  • Enabled tool sets are preserved as tool set references rather than expanded
  • Individually enabled tools are preserved
  • Created content is valid .toolsets.jsonc and opens in the editor
  • Existing "Create new tool sets file..." behavior remains unchanged
  • If there is no active chat selection, the experience is graceful

Why this helps

This makes tool sets much easier to discover and author from real usage. Users already build useful tool combinations interactively in chat. Turning that state into a reusable tool set should be one step, not a manual transcription exercise.

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions