Skip to main content

Overview

Maestro provides extensive configuration options for customizing your workflow. All settings are automatically persisted and synchronized across application restarts.

Settings Architecture

Settings are managed through a Zustand store with automatic persistence to disk.

Settings Storage

Platform-specific locations:
  • macOS: ~/Library/Application Support/maestro/settings.json
  • Linux: ~/.config/maestro/settings.json
  • Windows: %APPDATA%\maestro\settings.json

Loading Behavior

// Settings load automatically on mount
useEffect(() => {
  loadAllSettings();
}, []);

// Settings reload on system resume from sleep
useEffect(() => {
  const cleanup = window.maestro.app.onSystemResume(() => {
    console.log('System resumed, reloading settings');
    loadAllSettings();
  });
  return cleanup;
}, []);

Core Settings Categories

Conductor Profile

The Conductor Profile (“About Me”) helps agents understand your context and preferences.
const { conductorProfile, setConductorProfile } = useSettings();

// Example profile
setConductorProfile(`
I'm a full-stack developer working on:
- React/TypeScript frontend
- Node.js/Express backend
- PostgreSQL database

Preferences:
- Use functional components with hooks
- Prefer explicit types over inference
- Write tests with Jest and React Testing Library
`);

LLM Provider Settings

interface LLMSettings {
  llmProvider: LLMProvider;  // 'anthropic' | 'openai' | 'custom'
  modelSlug: string;         // Model identifier
  apiKey: string;            // API key (encrypted)
}

const { llmProvider, modelSlug, apiKey } = useSettings();

Shell Configuration

const { 
  defaultShell,         // 'system' | 'bash' | 'zsh' | 'fish' | 'custom'
  setDefaultShell,
  customShellPath,      // Path for 'custom' shell
  setCustomShellPath
} = useSettings();

// Use custom shell
setDefaultShell('custom');
setCustomShellPath('/usr/local/bin/fish');

GitHub CLI Path

const { ghPath, setGhPath } = useSettings();

// Custom gh path
setGhPath('/usr/local/bin/gh');

UI Preferences

Font Settings

const { 
  fontFamily,      // Font name
  fontSize,        // Base font size in px
  setFontFamily,
  setFontSize
} = useSettings();

// Custom font
setFontFamily('JetBrains Mono');
setFontSize(14);

// Font size is applied to document root for rem-based scaling
// document.documentElement.style.fontSize = `${fontSize}px`;

Panel Dimensions

const {
  leftSidebarWidth,     // Left panel width in px
  rightPanelWidth,      // Right panel width in px
  terminalWidth,        // Terminal width in characters
  setLeftSidebarWidth,
  setRightPanelWidth,
  setTerminalWidth
} = useSettings();

Input Behavior

const { 
  enterToSendAI,         // Enter sends in AI mode
  enterToSendTerminal,   // Enter sends in terminal mode
  setEnterToSendAI,
  setEnterToSendTerminal
} = useSettings();

// Use Shift+Enter to send in AI mode
setEnterToSendAI(false);

Display Modes

const {
  markdownEditMode,      // Edit mode vs preview in markdown
  chatRawTextMode,       // Show raw text vs formatted
  showHiddenFiles,       // Show hidden files in file explorer
  setMarkdownEditMode,
  setChatRawTextMode,
  setShowHiddenFiles
} = useSettings();

Default Behaviors

const {
  defaultSaveToHistory,        // Save to history by default
  defaultShowThinking,         // 'off' | 'on' | 'sticky'
  setDefaultSaveToHistory,
  setDefaultShowThinking
} = useSettings();

// Thinking mode options:
// 'off' - Never show thinking
// 'on' - Show thinking, can be toggled per session
// 'sticky' - Show thinking, persists across sessions

Notification Settings

OS Notifications

const { 
  osNotificationsEnabled,
  setOsNotificationsEnabled
} = useSettings();

// Enable desktop notifications
setOsNotificationsEnabled(true);

Audio Feedback

const {
  audioFeedbackEnabled,
  audioFeedbackCommand,   // Shell command for audio
  setAudioFeedbackEnabled,
  setAudioFeedbackCommand
} = useSettings();

// Custom audio command
setAudioFeedbackCommand('afplay /System/Library/Sounds/Glass.aiff');

Toast Duration

const { toastDuration, setToastDuration } = useSettings();

// Toast duration in ms (default: 3000)
setToastDuration(5000);

Logging Settings

const {
  logLevel,              // 'debug' | 'info' | 'warn' | 'error'
  maxLogBuffer,          // Max log entries in memory
  maxOutputLines,        // Max output lines per session
  setLogLevel,
  setMaxLogBuffer,
  setMaxOutputLines
} = useSettings();

// Debug logging
setLogLevel('debug');
setMaxLogBuffer(10000);
setMaxOutputLines(5000);

Log Viewer Settings

const { 
  logViewerSelectedLevels,   // Filter levels in log viewer
  setLogViewerSelectedLevels
} = useSettings();

// Show only warnings and errors
setLogViewerSelectedLevels(['warn', 'error']);

Update Settings

const {
  checkForUpdatesOnStartup,  // Auto-check for updates
  enableBetaUpdates,         // Include beta versions
  setCheckForUpdatesOnStartup,
  setEnableBetaUpdates
} = useSettings();

Crash Reporting

Maestro uses Sentry for crash reporting. Disable if you prefer not to send crash data.
const { crashReportingEnabled, setCrashReportingEnabled } = useSettings();

// Disable crash reporting
setCrashReportingEnabled(false);

Keyboard Shortcuts

Configuring Shortcuts

interface Shortcut {
  id: string;              // Unique identifier
  label: string;           // Display label
  keys: string[];          // Key combination
}

const { shortcuts, setShortcuts } = useSettings();

// Customize a shortcut
const newShortcuts = {
  ...shortcuts,
  toggleSidebar: {
    id: 'toggleSidebar',
    label: 'Toggle Left Panel',
    keys: ['Alt', 'Meta', 'b']  // Changed from ArrowLeft
  }
};

setShortcuts(newShortcuts);

Tab Shortcuts

const { tabShortcuts, setTabShortcuts } = useSettings();

// Separate shortcuts for tab operations
// newTab, closeTab, reopenClosedTab, etc.

Context Management Settings

interface ContextManagementSettings {
  autoGroomingEnabled: boolean;
  autoGroomingThreshold: number;       // Token count
  enableContextTransfer: boolean;
  transferFormat: 'full' | 'summary';
  maxStoredSessions: number;
  sessionRetentionDays: number;
}

const { 
  contextManagementSettings,
  updateContextManagementSettings
} = useSettings();

// Update specific settings
updateContextManagementSettings({
  autoGroomingEnabled: true,
  autoGroomingThreshold: 8000
});

Stats & Analytics

Usage Statistics

const {
  statsCollectionEnabled,
  defaultStatsTimeRange,  // 'day' | 'week' | 'month' | 'year' | 'all'
  setStatsCollectionEnabled,
  setDefaultStatsTimeRange
} = useSettings();

Auto Run Statistics

interface AutoRunStats {
  totalRuns: number;
  totalDurationMs: number;
  completedRuns: number;
  failedRuns: number;
  peakConcurrentRuns: number;
  lastRunTimestamp: number;
}

const { 
  autoRunStats,
  recordAutoRunComplete,        // Record completion
  updateAutoRunProgress,        // Update progress
  acknowledgeBadge,             // Acknowledge achievement
  getUnacknowledgedBadgeLevel  // Get next badge
} = useSettings();

File Indexing

Local Ignore Patterns

const {
  localIgnorePatterns,      // Glob patterns to ignore
  localHonorGitignore,      // Honor .gitignore
  setLocalIgnorePatterns,
  setLocalHonorGitignore
} = useSettings();

// Custom ignore patterns
setLocalIgnorePatterns([
  'node_modules/**',
  'dist/**',
  '*.log',
  '.env*'
]);

SSH Remote Ignore Patterns

const {
  sshRemoteIgnorePatterns,
  sshRemoteHonorGitignore,
  setSshRemoteIgnorePatterns,
  setSshRemoteHonorGitignore
} = useSettings();

Advanced Settings

Power Management

const { preventSleepEnabled, setPreventSleepEnabled } = useSettings();

// Prevent system sleep during agent operations
await setPreventSleepEnabled(true);

Rendering Settings

const {
  disableGpuAcceleration,  // Disable GPU rendering
  disableConfetti,         // Disable confetti animations
  setDisableGpuAcceleration,
  setDisableConfetti
} = useSettings();

Accessibility

const { colorBlindMode, setColorBlindMode } = useSettings();

// Enable colorblind-friendly palette
setColorBlindMode(true);

Automatic Features

const {
  automaticTabNamingEnabled,   // Auto-name tabs based on content
  fileTabAutoRefreshEnabled,   // Auto-refresh file preview tabs
  setAutomaticTabNamingEnabled,
  setFileTabAutoRefreshEnabled
} = useSettings();

Platform-Specific

const { 
  suppressWindowsWarning,     // Suppress Windows compatibility warning
  setSuppressWindowsWarning
} = useSettings();

Window Chrome

const {
  useNativeTitleBar,    // Use native OS title bar
  autoHideMenuBar,      // Auto-hide menu bar (Linux/Windows)
  setUseNativeTitleBar,
  setAutoHideMenuBar
} = useSettings();

Encore Features

Encore Features are experimental features disabled by default.
interface EncoreFeatureFlags {
  [featureName: string]: boolean;
}

const { encoreFeatures, setEncoreFeatures } = useSettings();

// Enable experimental feature
setEncoreFeatures({
  ...encoreFeatures,
  'new-feature': true
});

Web Interface Settings

const {
  webInterfaceUseCustomPort,
  webInterfaceCustomPort,
  setWebInterfaceUseCustomPort,
  setWebInterfaceCustomPort
} = useSettings();

// Custom web interface port
setWebInterfaceUseCustomPort(true);
setWebInterfaceCustomPort(3000);

WakaTime Integration

const {
  wakatimeApiKey,
  wakatimeEnabled,
  wakatimeDetailedTracking,
  setWakatimeApiKey,
  setWakatimeEnabled,
  setWakatimeDetailedTracking
} = useSettings();

// Enable WakaTime tracking
setWakatimeApiKey('waka_...');
setWakatimeEnabled(true);
setWakatimeDetailedTracking(true);

Exporting and Importing Settings

Settings contain sensitive data like API keys. Be careful when sharing exported settings.

Export Settings

  1. Open Settings > Advanced
  2. Click “Export Settings”
  3. Save JSON file

Import Settings

  1. Open Settings > Advanced
  2. Click “Import Settings”
  3. Select JSON file
  4. Review and confirm changes

Settings File Structure

{
  "conductorProfile": "...",
  "llmProvider": "anthropic",
  "activeThemeId": "dracula",
  "shortcuts": { ... },
  "customAICommands": [ ... ],
  // ... other settings
}

Next Steps

Build docs developers (and LLMs) love