-
Notifications
You must be signed in to change notification settings - Fork 120
feat: add /settings command for interactive command menu #320
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add /settings command for interactive command menu #320
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR implements a /settings command that displays an interactive menu listing all available commands, allowing users to browse and execute commands without memorizing their names.
Changes:
- Added
SettingsSelectorcomponent that dynamically fetches and displays all registered commands - Integrated settings mode into the application state management and mode handlers
- Updated command handling to support the settings special command
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| source/app/components/settings-selector.tsx | New component that displays an interactive command selector menu |
| source/app/components/modal-selectors.tsx | Integrated SettingsSelector into modal system |
| source/app/App.tsx | Added settings mode handling and command execution flow |
| source/hooks/useAppState.tsx | Added isSettingsMode state |
| source/hooks/useModeHandlers.tsx | Added settings mode enter/cancel handlers |
| source/hooks/useAppHandlers.tsx | Wired up settings mode handler |
| source/types/app.ts | Added onEnterSettingsMode to MessageSubmissionOptions |
| source/app/utils/app-util.ts | Added SETTINGS to special commands list |
| biome.json | Updated Biome configuration format (includes→include/ignore, assist→organizeImports) |
| README.md | Documented new /settings command |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| MODEL_DATABASE: 'model-database', | ||
| SETUP_PROVIDERS: 'setup-providers', | ||
| SETUP_MCP: 'setup-mcp', | ||
| SETTINGS: 'settings', |
Copilot
AI
Jan 21, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The settings command is handled as a special command but is never registered in the commandRegistry. This means it won't appear in the /help output or in command completions. You need to create a settings command file (e.g., source/commands/settings.ts) that exports a settingsCommand, import it in source/commands/index.ts, and register it in the commandRegistry.register array in useAppInitialization.tsx. The command handler should call onEnterSettingsMode from the metadata/options.
| SETTINGS: 'settings', |
| const items = useMemo(() => { | ||
| const commands = commandRegistry.getAll(); | ||
| return commands | ||
| .map(cmd => ({ | ||
| label: `/${cmd.name} - ${cmd.description}`, | ||
| value: cmd.name, | ||
| })) | ||
| .sort((a, b) => a.label.localeCompare(b.label)); | ||
| }, []); |
Copilot
AI
Jan 21, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The settings command will appear in its own menu once it's registered in the commandRegistry, creating a redundant/confusing entry. Consider filtering out the 'settings' command from the list in the useMemo by adding a filter like .filter(cmd => cmd.name !== 'settings') before the map. You may also want to consider filtering out other meta-commands like 'quit' and 'exit' that don't make sense to run from this menu.
Hey @akramcodez - just testing the PR and when I type Also, just getting some thoughts here - do you think this command should be called settings or something like I wonder if the I personally think the above would make more sense. I welcome your thoughts - I know issue #316 didn't have a spec attached to it. @Avtrkrb, @namar0x0309, @mrspence, @spinualexandru, @DenizOkcu - what does everyone think? |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
I second this, but differ only in keeping I vouch for having dedicated commands for providers & mcp because what if there is a new mcp or provider that I want to configure in the future ? These commands are multi-step in nature & I would rather prefer to directly configure the provider/mcp rather than having to go through the entire sequence of all of these commands. Whereas for a UI change like the theme or the title shape, I would do this occasionally or when I get bored of the current shape & would logically want to change other UI related preferences as well. Just my thoughts... |
|
What should I do next? |
|
Hey @akramcodez - can you go for this?
So the /settings command just tidies up some core commands that are not necessarily needed? So theme, title shape, nanocoder branding. These arguably don't need their own commands and can just fall under a global settings. Happy to take your thoughts too? |
|
PTAL @will-lamerton |
I'll take a look today - thanks for updating the PR 😃 |

Description
Implements
/settingscommand that displays an interactive menu of all available commands, eliminating the need to memorize individual command names.Closes #316
Changes
/settingscommand to command registrySettingsSelectorcomponent with dynamic command list fromcommandRegistryImplementation Details
commandRegistry.getAll()Testing
/settingsopens interactive menuFiles Changed
source/app/components/settings-selector.tsx(new)source/app/App.tsxsource/app/components/modal-selectors.tsxsource/app/utils/app-util.tssource/hooks/useAppState.tsxsource/hooks/useModeHandlers.tsxsource/hooks/useAppHandlers.tsxsource/types/app.tsREADME.md