Settings file
Server settings live in config.yaml, a text file created on first start with a note on every line. Account settings, like model connections, live in the app under Settings.
General appears first on desktop and mobile. Desktop Settings opens on General.
#Where it is
| Install | config.yaml and the data folder |
|---|---|
| Windows | %LOCALAPPDATA%\Chrysalis |
| macOS | ~/Library/Application Support/Chrysalis |
| Linux | ~/.local/share/chrysalis |
| Docker | the /chrysalis volume |
| From source | the repository folder |
| Android | inside the app |
Run chrysalis paths to print both locations. Admins also see them at the bottom of Settings > Server.
#Portable copy
Put a config.yaml next to the chrysalis program and Chrysalis keeps its settings and data in that folder instead, for example on a USB drive. Updates keep both in place.
#Editing it
Edit the file with any text editor while Chrysalis is stopped, then start it again. Admins can change most settings in Settings > Server instead, which applies them right away and saves back to the file. You can also ask the agent, for example "let my phone connect": it shows exactly what will change and waits for you to approve.
A misspelled or invalid setting does not stop Chrysalis from starting. It prints a warning that names the setting and uses the default.
In Settings > Server, separate multiple Host names with commas.
#Every setting
# Folder for accounts, apps, chats and keys. Relative paths start next to
# this file. Move the folder while Chrysalis is stopped.
dataRoot: "./data"
# Port Chrysalis listens on.
port: 8788
# Let other devices (your phone, a tablet, another computer) open Chrysalis.
# false only this computer
# true any device that can reach this computer; every account still
# needs its password
lan: false
# Network interface to use when lan is true. "auto" means all of them.
listenAddress: "auto"
# Extra host names that may open Chrysalis, such as a local DNS name or a
# Tailscale machine name. "*.example.com" allows every name under example.com,
# for a tunnel that gets a new name on each start. IP addresses and this
# computer's own name always work.
allowedHosts: []
# Serve over HTTPS. Phones only allow the microphone, installing as an app
# and some other features over HTTPS. Paths start next to this file.
ssl:
enabled: false
certPath: "./certs/cert.pem"
keyPath: "./certs/key.pem"
# Open Chrysalis in your browser when it starts (desktop only).
openBrowser: true
apps:
# Let apps download their npm packages. Package install scripts never run.
packageDownloads: true
# Where the Store's list of apps comes from. false turns the Store off.
store: "https://raw.githubusercontent.com/ProjectChrysalis/app-store/main/apps.json"
agent:
# The agent's command shell. It runs inside your browser tab, never on
# this computer.
shell: true
# Longest a single shell command may run, in seconds (5 to 3600).
shellTimeoutSeconds: 120
# Model the agent uses when an account has not chosen one, as
# "provider/model". null picks the first available model.
defaultModel: null
# New models and price changes, checked once a day, so they show up without
# waiting for a Chrysalis update. Only model details are downloaded.
modelUpdates: true
The defaults above are what a new file starts with; your file may differ.
modelUpdates keeps the list of models and their prices current between Chrysalis releases. Once a day Chrysalis downloads the newest model list, checks it against its published checksum, and uses only the model details in it: names, prices, context windows and output limits. A new model is only added where a provider already sends requests, so the list can never send a key somewhere new. A new provider still needs a Chrysalis update. Settings > Server > Models shows what was added and has a Check now button.
#For one run only
Every setting also works as an environment variable or a command-line flag. Those apply to that run only and are shown as locked in Settings > Server.
| Setting | Environment variable | Flag |
|---|---|---|
dataRoot | CHRYSALIS_DATA_ROOT | --data-root |
port | CHRYSALIS_PORT | --port |
lan | CHRYSALIS_LAN | --lan |
listenAddress | CHRYSALIS_LISTEN_ADDRESS | --listen-address |
allowedHosts | CHRYSALIS_ALLOWED_HOSTS | --allowed-hosts |
ssl.enabled | CHRYSALIS_SSL_ENABLED | --ssl.enabled |
ssl.certPath | CHRYSALIS_SSL_CERT_PATH | --ssl.cert-path |
ssl.keyPath | CHRYSALIS_SSL_KEY_PATH | --ssl.key-path |
openBrowser | CHRYSALIS_OPEN_BROWSER | --open-browser, --no-open-browser |
apps.packageDownloads | CHRYSALIS_APPS_PACKAGE_DOWNLOADS | --apps.package-downloads |
apps.store | CHRYSALIS_APPS_STORE | --apps.store |
agent.shell | CHRYSALIS_AGENT_SHELL | --agent.shell |
agent.shellTimeoutSeconds | CHRYSALIS_AGENT_SHELL_TIMEOUT_SECONDS | --agent.shell-timeout-seconds |
defaultModel | CHRYSALIS_DEFAULT_MODEL | --default-model |
modelUpdates | CHRYSALIS_MODEL_UPDATES | --model-updates, --no-model-updates |
CHRYSALIS_PORT=9000 ./chrysalis
./chrysalis --lan --port 9000 --no-open-browser
./chrysalis --home /srv/chrysalis
--home (or CHRYSALIS_HOME) chooses the folder that holds config.yaml.
#Commands
| Command | What it does |
|---|---|
chrysalis or chrysalis start | Run Chrysalis. |
chrysalis paths | Show where the config file and data folder are. |
chrysalis reset-password <user> | Give an account a new password. Chrysalis must be stopped. |
chrysalis --version | Print the version. |
chrysalis --help | List every option. |
Server terminal LLM traces print indented request JSON with complete message fields. Newlines stay escaped inside JSON strings. Thinking and tool results print in full, with brighter section separators when terminal colors are enabled.
Agent generation settings
The Agent tab groups settings into Generation, Instructions, Context, and Tools. Generation keeps output, temperature, and reasoning visible, with top P and penalties under Advanced sampling. Instructions apply to agent conversations; Context sets per-model agent limits and automatic summaries; Tools contains sandbox internet access and skills. Switching sections keeps unsaved edits.
Generation and Context share a searchable Settings for selector. Search by model name, ID, or connection. The current model and models with saved overrides appear first; long catalogs load in batches. Start with Agent defaults, then choose a model to override only what it needs: output limit, temperature, sampling, reasoning, context window, or auto-compact. Blank generation fields inherit agent defaults; a blank context window uses the model catalog. Auto-compact can inherit, use 80% of that model’s context window, stay off, or use a custom threshold. Use agent defaults clears that model’s overrides when saved. Drafts survive switching models and sections.
The model picker and Context menu show the active context window. Switching models applies their overrides and continues the latest conversation. All of these settings apply only to the built-in agent.
In Settings → Agent → Generation, use Generation settings to set output tokens, temperature, top P, penalties, and reasoning effort. These settings apply only to the built-in agent. Apps keep their own generation settings.
Blank fields use defaults. Use Clear overrides and save to reset them. The agent's reasoning picker edits the selected model’s override. Supported values depend on the provider and model. Native thinking uses each provider's format; Anthropic thinking disables temperature and top P. Output limits include thinking tokens, and budgeted thinking needs more than 1024 output tokens.
OpenAI-compatible connections accept a clean stream ending without a finish reason, keeping the generated reply. Provider errors and connection failures still report an error.
When Google blocks a prompt before generating a reply, Chrysalis reports the provider's block reason and response ID. A stream that ends without either a finish reason or prompt feedback still reports an incomplete stream.
OpenRouter routing
In Settings → API connections, add or edit an OpenRouter connection and expand OpenRouter routing. Set provider priority, allowed or blocked providers, fallback behavior, parameter support, data collection, zero data retention, quantizations, sorting, and input or output price caps.
Choose providers by name from the searchable OpenRouter catalog. Check the providers you want, and use the arrow buttons to change priority. Quantizations are selectable too. Price caps are dollars per million tokens. Empty lists, blank fields, and OpenRouter default leave the choice to OpenRouter. Saved fields apply to every app using the connection and take precedence over request preferences. Choose Reset routing and save to remove them.
Restrictions can leave no matching endpoint. See OpenRouter’s provider routing guide for provider slugs and routing behavior.