{ "version": 1, "fields": [ { "key": "assistantName", "title": "Assistant name", "group": "Identity", "default": "Jarvis", "type": "string", "maxLength": 32, "description": "What to call the assistant in the tray, speech, and workspace IDENTITY.md." }, { "key": "assistantPrompt", "title": "How they should act", "group": "Identity", "default": "", "type": "text", "maxLength": 4000, "description": "Character instructions go in the system prompt only. They override SOUL.md and IDENTITY.md for name and tone. Replies stay speakable." }, { "key": "ttsEnabled", "title": "Spoken replies", "group": "Speech", "default": true, "type": "boolean", "description": "Read replies aloud using local speech synthesis.", "aliases": [ "tts_enabled" ] }, { "key": "ttsPreset", "title": "Speech model", "group": "Speech", "default": "supertonic-en", "type": "choice", "description": "Models download on first use. Larger models need more memory.", "options": [ { "value": "supertonic-en", "label": "Supertonic \u00b7 English \u00b7 lightweight" }, { "value": "supertonic3", "label": "Supertonic 3 \u00b7 multilingual" }, { "value": "chatterbox", "label": "Chatterbox Turbo \u00b7 English \u00b7 reference voice" }, { "value": "parler", "label": "Parler Mini \u00b7 English \u00b7 describe a voice" } ] }, { "key": "voiceId", "title": "Voice", "group": "Speech", "default": "F1", "type": "choice", "description": "Try the same preview with different voices. Available voices depend on the model bundle.", "options": [ { "value": "F1", "label": "F1" }, { "value": "F2", "label": "F2" }, { "value": "F3", "label": "F3" }, { "value": "F4", "label": "F4" }, { "value": "F5", "label": "F5" }, { "value": "M1", "label": "M1" }, { "value": "M2", "label": "M2" }, { "value": "M3", "label": "M3" }, { "value": "M4", "label": "M4" }, { "value": "M5", "label": "M5" } ], "aliases": [ "voice_id", "voice-id" ], "when": { "ttsPreset": [ "supertonic-en", "supertonic3" ] } }, { "key": "ttsLanguage", "title": "Speech language", "group": "Speech", "default": "en", "type": "choice", "description": "The English models always use English. Choose Supertonic 3 for other languages.", "options": [ { "value": "en", "label": "English" }, { "value": "ko", "label": "Korean" }, { "value": "ja", "label": "Japanese" }, { "value": "ar", "label": "Arabic" }, { "value": "bg", "label": "Bulgarian" }, { "value": "cs", "label": "Czech" }, { "value": "da", "label": "Danish" }, { "value": "de", "label": "German" }, { "value": "el", "label": "Greek" }, { "value": "es", "label": "Spanish" }, { "value": "et", "label": "Estonian" }, { "value": "fi", "label": "Finnish" }, { "value": "fr", "label": "French" }, { "value": "hi", "label": "Hindi" }, { "value": "hr", "label": "Croatian" }, { "value": "hu", "label": "Hungarian" }, { "value": "id", "label": "Indonesian" }, { "value": "it", "label": "Italian" }, { "value": "lt", "label": "Lithuanian" }, { "value": "lv", "label": "Latvian" }, { "value": "nl", "label": "Dutch" }, { "value": "pl", "label": "Polish" }, { "value": "pt", "label": "Portuguese" }, { "value": "ro", "label": "Romanian" }, { "value": "ru", "label": "Russian" }, { "value": "sk", "label": "Slovak" }, { "value": "sl", "label": "Slovenian" }, { "value": "sv", "label": "Swedish" }, { "value": "tr", "label": "Turkish" }, { "value": "uk", "label": "Ukrainian" }, { "value": "vi", "label": "Vietnamese" } ], "aliases": [ "tts_language" ], "when": { "ttsPreset": [ "supertonic3" ] } }, { "key": "ttsSpeed", "title": "Speaking speed", "group": "Speech", "default": 1.05, "type": "number", "description": "1 is normal speed; lower is slower.", "min": 0.25, "max": 4, "step": 0.05, "aliases": [ "tts_speed" ], "when": { "ttsPreset": [ "supertonic-en", "supertonic3" ] } }, { "key": "ttsSteps", "title": "Voice quality steps", "group": "Speech", "default": 5, "type": "number", "description": "More steps can improve quality but take longer.", "min": 1, "max": 30, "step": 1, "when": { "ttsPreset": [ "supertonic-en", "supertonic3" ] } }, { "key": "ttsVolume", "title": "Reply volume (%)", "group": "Speech", "default": 100, "type": "number", "description": "Relative to the system speaker volume. Does not change other apps.", "min": 0, "max": 100, "step": 5 }, { "key": "ttsReferenceAudio", "title": "Reference voice recording", "group": "Voice design", "default": "", "type": "file", "description": "Choose a clear mono WAV recording of at least 5 seconds. Leave empty for the model\u2019s default voice.", "when": { "ttsPreset": [ "chatterbox" ] } }, { "key": "ttsCfmSteps", "title": "Synthesis quality steps", "group": "Voice design", "default": 2, "type": "number", "description": "Chatterbox: fewer steps respond faster.", "min": 1, "max": 10, "step": 1, "when": { "ttsPreset": [ "chatterbox" ] } }, { "key": "ttsDescription", "title": "Describe the voice", "group": "Voice design", "default": "A clear, warm voice speaks at a natural pace in a quiet room.", "type": "string", "description": "Parler: describe tone, pace, pitch, and recording style in English.", "when": { "ttsPreset": [ "parler" ] } }, { "key": "ttsTemperature", "title": "Voice variation", "group": "Voice design", "default": 1, "type": "number", "description": "Parler: higher values produce more variation.", "min": 0, "max": 2, "step": 0.05, "when": { "ttsPreset": [ "parler" ] } }, { "key": "ttsSeed", "title": "Voice seed", "group": "Voice design", "default": 42, "type": "number", "description": "Use a fixed seed for repeatable speech generation.", "min": 0, "max": 2147483647, "step": 1, "when": { "ttsPreset": [ "chatterbox", "parler" ] } }, { "key": "ttsThreads", "title": "Speech CPU threads", "group": "Voice design", "default": 4, "type": "number", "description": "Limit CPU work for Chatterbox and Parler.", "min": 1, "max": 32, "step": 1, "when": { "ttsPreset": [ "chatterbox", "parler" ] } }, { "key": "ttsUseGpu", "title": "Accelerate speech with GPU", "group": "Voice design", "default": false, "type": "boolean", "description": "Use a supported GPU backend for speech synthesis. May increase GPU memory use." }, { "key": "ttsModel", "title": "Custom speech model", "group": "Voice design", "default": "", "type": "string", "description": "Advanced: registry name or local GGUF matching the selected speech model. Empty uses the bundled preset.", "aliases": [ "tts_model" ] }, { "key": "previewText", "title": "Preview text", "group": "Speech", "default": "Hello. I am Jarvis. This is how I will sound with your settings.", "type": "string", "description": "Use the same sentence to compare voices." }, { "key": "microphoneEnabled", "title": "Microphone input", "group": "Listening", "default": true, "type": "boolean", "description": "Turn off for typed chat and speech output only.", "aliases": [ "microphone_enabled" ] }, { "key": "asrModel", "title": "Recognition model", "group": "Listening", "default": "WHISPER_TINY", "type": "choice", "description": "Larger models need more memory and download on first use.", "options": [ { "value": "WHISPER_TINY", "label": "Whisper Tiny \u00b7 fastest" }, { "value": "WHISPER_BASE_Q8_0", "label": "Whisper Base \u00b7 balanced" }, { "value": "WHISPER_SMALL_Q8_0", "label": "Whisper Small \u00b7 more accurate" } ], "aliases": [ "asr_model" ] }, { "key": "asrLanguage", "title": "Recognition language", "group": "Listening", "default": "en", "type": "string", "description": "Whisper language code such as en, es, fr, or auto.", "aliases": [ "asr_language", "language" ] }, { "key": "wakePhrase", "title": "Wake phrase", "group": "Wake and privacy", "default": "hey jarvis", "type": "string", "description": "Must match a phrase supported by your local wake detector.", "aliases": [ "wake_phrase" ] }, { "key": "aliases", "title": "Wake aliases", "group": "Wake and privacy", "default": [ "jarvis", "okay jarvis" ], "type": "list", "description": "Additional detector phrases, separated by commas." }, { "key": "wakeCommand", "title": "Wake detector command", "group": "Wake and privacy", "default": "jarvis-wake-bridge", "type": "string", "description": "Local program that receives microphone audio. jarvis-wake-bridge is the built-in CPU detector. Leave it unless you have openWakeWord or sherpa.", "aliases": [ "wake_command" ] }, { "key": "listeningMode", "title": "Listening behavior", "group": "Wake and privacy", "default": "conversation", "type": "choice", "description": "Hold Talk only disables the wake detector and automatic follow-up listening.", "options": [ { "value": "conversation", "label": "Continue listening after replies" }, { "value": "single", "label": "One request per wake" }, { "value": "ptt", "label": "Hold Talk only" } ], "aliases": [ "listening_mode" ] }, { "key": "idleMinutes", "title": "Idle sleep delay (minutes)", "group": "Wake and privacy", "default": 30, "type": "number", "description": "Sleep after this much listening inactivity.", "min": 1, "max": 240, "step": 1 }, { "key": "freeVramOnIdle", "title": "Free GPU memory when idle", "group": "Wake and privacy", "default": true, "type": "boolean", "description": "Unload speech and chat models after the idle delay. Hey Jarvis stays ready on the CPU.", "aliases": [ "free_vram_on_idle" ] }, { "key": "vadThreshold", "title": "Speech detection threshold", "group": "Detection tuning", "default": 0.6, "type": "number", "description": "Lower picks up quieter speech; higher rejects more background noise.", "min": 0.05, "max": 1, "step": 0.05 }, { "key": "vadMinSpeechMs", "title": "Minimum speech (ms)", "group": "Detection tuning", "default": 300, "type": "number", "description": "Ignore very short sounds during automatic listening.", "min": 100, "max": 2000, "step": 50 }, { "key": "vadSilenceMs", "title": "Pause before sending (ms)", "group": "Detection tuning", "default": 700, "type": "number", "description": "Wait this long after speech before sending your request.", "min": 200, "max": 3000, "step": 50 }, { "key": "vadMaxSpeechSeconds", "title": "Maximum recording (seconds)", "group": "Detection tuning", "default": 15, "type": "number", "description": "Limit each recorded utterance, including pauses.", "min": 3, "max": 120, "step": 1 }, { "key": "playbackCooldownMs", "title": "Echo protection after replies (ms)", "group": "Detection tuning", "default": 400, "type": "number", "description": "Delay microphone processing after speech output ends.", "min": 0, "max": 2000, "step": 50 }, { "key": "inputTarget", "title": "Microphone device", "group": "Audio routing", "default": "", "type": "device", "description": "System default follows your desktop sound settings. Refresh the list after connecting a device." }, { "key": "outputTarget", "title": "Speaker device", "group": "Audio routing", "default": "", "type": "device", "description": "System default follows your desktop sound settings. Refresh the list after connecting a device." }, { "key": "computerMode", "title": "Desktop access mode", "group": "Desktop access", "default": "act", "type": "choice", "description": "A temporary Allow now grant is always required. Changing this revokes existing access.", "options": [ { "value": "off", "label": "Disabled" }, { "value": "observe", "label": "Observe only" }, { "value": "act", "label": "Observe and control" } ], "aliases": [ "computer_mode" ] }, { "key": "computerSteps", "title": "Actions per grant", "group": "Desktop access", "default": 20, "type": "number", "description": "Maximum input actions before another grant is needed.", "min": 1, "max": 100, "step": 1, "aliases": [ "computer_step_budget" ] }, { "key": "computerGrantMinutes", "title": "Grant duration (minutes)", "group": "Desktop access", "default": 3, "type": "number", "description": "Desktop access expires automatically.", "min": 1, "max": 15, "step": 1 }, { "key": "screenshotMaxEdge", "title": "Screenshot maximum edge (pixels)", "group": "Desktop images", "default": 1280, "type": "number", "description": "Larger screenshots preserve detail but take more memory.", "min": 640, "max": 2560, "step": 160 }, { "key": "screenshotQuality", "title": "Screenshot quality (%)", "group": "Desktop images", "default": 70, "type": "number", "description": "Higher WebP quality preserves more text detail.", "min": 30, "max": 95, "step": 5 }, { "key": "webcamEnabled", "title": "Camera access", "group": "Camera", "default": false, "type": "boolean", "description": "Off by default. Press Allow now to start a temporary camera grant. Apply this switch if you want the feature remembered." }, { "key": "webcamDevice", "title": "Camera device", "group": "Camera", "default": "", "type": "device", "mediaClass": "Video/Source", "description": "System default follows PipeWire. Refresh the list after connecting a camera." }, { "key": "webcamGrantMinutes", "title": "Camera grant duration (minutes)", "group": "Camera", "default": 3, "type": "number", "description": "Camera access expires automatically. Changing this revokes an active grant.", "min": 1, "max": 15, "step": 1 }, { "key": "webcamMaxEdge", "title": "Camera still maximum edge (pixels)", "group": "Camera", "default": 720, "type": "number", "description": "Larger stills preserve detail but take more memory.", "min": 320, "max": 1280, "step": 80 }, { "key": "modelProfile", "title": "Chat model profile", "group": "Chat model", "default": "laptop-16gb", "type": "choice", "description": "Requires a daemon restart. GPU inference remains required.", "options": [ { "value": "laptop-4gb-mm", "label": "Tiny \u00b7 Qwen3.5 0.8B" }, { "value": "laptop-8gb", "label": "Small \u00b7 Qwen3 1.7B" }, { "value": "laptop-8gb-mm", "label": "Compact \u00b7 Qwen3.5 2B" }, { "value": "laptop-16gb", "label": "Balanced \u00b7 Qwen3.5 4B" }, { "value": "desktop-gpu", "label": "Large \u00b7 Qwen3.5 9B" } ], "aliases": [ "model_profile" ], "restart": true }, { "key": "chatModel", "title": "Custom chat model", "group": "Chat model", "default": "", "type": "string", "description": "Advanced: overrides the profile. Empty uses the profile model. Requires restart.", "aliases": [ "model" ], "restart": true }, { "key": "maxTurns", "title": "Maximum reasoning turns", "group": "Agent limits", "default": 6, "type": "number", "description": "Requires restart. Limits how long the assistant works on one request.", "min": 1, "max": 30, "step": 1, "restart": true }, { "key": "maxShellCalls", "title": "Shell commands per request", "group": "Agent limits", "default": 1, "type": "number", "description": "Requires restart. Commands still require normal permissions.", "min": 1, "max": 10, "step": 1, "restart": true }, { "key": "maxToolRounds", "title": "Tool rounds per request", "group": "Agent limits", "default": 4, "type": "number", "description": "Requires restart. Limits repeated tool use.", "min": 1, "max": 20, "step": 1, "restart": true }, { "key": "fsAccess", "title": "File access", "group": "Agent limits", "default": "workspace", "type": "choice", "description": "Requires restart. The agent still runs as your user account and asks before writing. Shell commands can already reach other paths.", "options": [ { "value": "workspace", "label": "Jarvis workspace only" }, { "value": "home", "label": "Home directory" }, { "value": "filesystem", "label": "Entire filesystem" } ], "aliases": [ "fs_access" ], "restart": true } ] }