Chrysalis

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

Installconfig.yaml and the data folder
Windows%LOCALAPPDATA%\Chrysalis
macOS~/Library/Application Support/Chrysalis
Linux~/.local/share/chrysalis
Dockerthe /chrysalis volume
From sourcethe repository folder
Androidinside 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.

SettingEnvironment variableFlag
dataRootCHRYSALIS_DATA_ROOT--data-root
portCHRYSALIS_PORT--port
lanCHRYSALIS_LAN--lan
listenAddressCHRYSALIS_LISTEN_ADDRESS--listen-address
allowedHostsCHRYSALIS_ALLOWED_HOSTS--allowed-hosts
ssl.enabledCHRYSALIS_SSL_ENABLED--ssl.enabled
ssl.certPathCHRYSALIS_SSL_CERT_PATH--ssl.cert-path
ssl.keyPathCHRYSALIS_SSL_KEY_PATH--ssl.key-path
openBrowserCHRYSALIS_OPEN_BROWSER--open-browser, --no-open-browser
apps.packageDownloadsCHRYSALIS_APPS_PACKAGE_DOWNLOADS--apps.package-downloads
apps.storeCHRYSALIS_APPS_STORE--apps.store
agent.shellCHRYSALIS_AGENT_SHELL--agent.shell
agent.shellTimeoutSecondsCHRYSALIS_AGENT_SHELL_TIMEOUT_SECONDS--agent.shell-timeout-seconds
defaultModelCHRYSALIS_DEFAULT_MODEL--default-model
modelUpdatesCHRYSALIS_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

CommandWhat it does
chrysalis or chrysalis startRun Chrysalis.
chrysalis pathsShow where the config file and data folder are.
chrysalis reset-password <user>Give an account a new password. Chrysalis must be stopped.
chrysalis --versionPrint the version.
chrysalis --helpList 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.

Edit this page on GitHub