| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { feature } from 'bun:bundle'
- import { getModelOptions } from '../../utils/model/modelOptions.js'
- import { isVoiceGrowthBookEnabled } from '../../voice/voiceModeEnabled.js'
- import {
- getOptionsForSetting,
- SUPPORTED_SETTINGS,
- } from './supportedSettings.js'
- export const DESCRIPTION = 'Get or set Claude Code configuration settings.'
- /**
- * Generate the prompt documentation from the registry
- */
- export function generatePrompt(): string {
- const globalSettings: string[] = []
- const projectSettings: string[] = []
- for (const [key, config] of Object.entries(SUPPORTED_SETTINGS)) {
- // Skip model - it gets its own section with dynamic options
- if (key === 'model') continue
- // Voice settings are registered at build-time but gated by GrowthBook
- // at runtime. Hide from model prompt when the kill-switch is on.
- if (
- feature('VOICE_MODE') &&
- key === 'voiceEnabled' &&
- !isVoiceGrowthBookEnabled()
- )
- continue
- const options = getOptionsForSetting(key)
- let line = `- ${key}`
- if (options) {
- line += `: ${options.map(o => `"${o}"`).join(', ')}`
- } else if (config.type === 'boolean') {
- line += `: true/false`
- }
- line += ` - ${config.description}`
- if (config.source === 'global') {
- globalSettings.push(line)
- } else {
- projectSettings.push(line)
- }
- }
- const modelSection = generateModelSection()
- return `Get or set Claude Code configuration settings.
- View or change Claude Code settings. Use when the user requests configuration changes, asks about current settings, or when adjusting a setting would benefit them.
- ## Usage
- - **Get current value:** Omit the "value" parameter
- - **Set new value:** Include the "value" parameter
- ## Configurable settings list
- The following settings are available for you to change:
- ### Global Settings (stored in ~/.claude.json)
- ${globalSettings.join('\n')}
- ### Project Settings (stored in settings.json)
- ${projectSettings.join('\n')}
- ${modelSection}
- ## Examples
- - Get theme: { "setting": "theme" }
- - Set dark theme: { "setting": "theme", "value": "dark" }
- - Enable vim mode: { "setting": "editorMode", "value": "vim" }
- - Enable verbose: { "setting": "verbose", "value": true }
- - Change model: { "setting": "model", "value": "opus" }
- - Change permission mode: { "setting": "permissions.defaultMode", "value": "plan" }
- `
- }
- function generateModelSection(): string {
- try {
- const options = getModelOptions()
- const lines = options.map(o => {
- const value = o.value === null ? 'null/"default"' : `"${o.value}"`
- return ` - ${value}: ${o.descriptionForModel ?? o.description}`
- })
- return `## Model
- - model - Override the default model. Available options:
- ${lines.join('\n')}`
- } catch {
- return `## Model
- - model - Override the default model (sonnet, opus, haiku, best, or full model ID)`
- }
- }
|