Skip to content

Conversation

@akramcodez
Copy link
Contributor

Description

Implements /settings command that displays an interactive menu of all available commands, eliminating the need to memorize individual command names.

Closes #316

Changes

  • Added /settings command to command registry
  • Created SettingsSelector component with dynamic command list from commandRegistry
  • Integrated settings mode into app state and mode handlers
  • Added ESC key support for cancellation
  • Updated README documentation

Implementation Details

  • Dynamically fetches all commands from commandRegistry.getAll()
  • Maintains consistent theming and UI patterns
  • Executes selected command via existing command flow

Testing

  • /settings opens interactive menu
  • Arrow keys navigate commands
  • Enter executes selected command
  • ESC cancels and returns to chat
  • All commands work when launched from menu

Files Changed

  • source/app/components/settings-selector.tsx (new)
  • source/app/App.tsx
  • source/app/components/modal-selectors.tsx
  • source/app/utils/app-util.ts
  • source/hooks/useAppState.tsx
  • source/hooks/useModeHandlers.tsx
  • source/hooks/useAppHandlers.tsx
  • source/types/app.ts
  • README.md

Copilot AI review requested due to automatic review settings January 21, 2026 14:29
Copy link
Contributor

Copilot AI left a 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 SettingsSelector component 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',
Copy link

Copilot AI Jan 21, 2026

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.

Suggested change
SETTINGS: 'settings',

Copilot uses AI. Check for mistakes.
Comment on lines 18 to 26
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));
}, []);
Copy link

Copilot AI Jan 21, 2026

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.

Copilot uses AI. Check for mistakes.
@will-lamerton
Copy link
Member

Screenshot 2026-01-21 at 23 41 02

Hey @akramcodez - just testing the PR and when I type /settings and run it, the UI never appears for me. I'm on MacOS running in iTerm2. See the screenshot above.

Also, just getting some thoughts here - do you think this command should be called settings or something like /commands. What I struggle with is that we have a /help command and I guess /settings just makes that help command interactive.

I wonder if the /settings command should be used to reduce the need for other commands that can be grouped under this one. For example, /theme, /title-shape, /nanocoder-shape, /setup-providers and /setup-mcp. Instead of having seperate commands for all these configuration options, you can access these options under a more generic /settings command with an interactive menu that triggers each still command as it does now still.

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>
@Avtrkrb
Copy link
Member

Avtrkrb commented Jan 22, 2026

I wonder if the /settings command should be used to reduce the need for other commands that can be grouped under this one. For example, /theme, /title-shape, /nanocoder-shape, /setup-providers and /setup-mcp. Instead of having seperate commands for all these configuration options, you can access these options under a more generic /settings command with an interactive menu that triggers each still command as it does now still.

I personally think the above would make more sense.

I second this, but differ only in keeping setup-providers & /setup-mcp commands dedicated & separate as they have multiple sequential steps. For the UI related commands like /theme, /title-shape, /nanocoder-shape, it would make a lot of sense to club them under /settings.

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...

@akramcodez
Copy link
Contributor Author

What should I do next?

@will-lamerton
Copy link
Member

Hey @akramcodez - can you go for this?

I second this, but differ only in keeping setup-providers & /setup-mcp commands dedicated & separate as they have multiple sequential steps. For the UI related commands like /theme, /title-shape, /nanocoder-shape, it would make a lot of sense to club them under /settings.

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...

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?

@akramcodez
Copy link
Contributor Author

PTAL @will-lamerton

@will-lamerton
Copy link
Member

PTAL @will-lamerton

I'll take a look today - thanks for updating the PR 😃

@will-lamerton will-lamerton merged commit d68b322 into Nano-Collective:main Jan 25, 2026
9 checks passed
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.

[Feature] general /settings command

3 participants