Zest

Configuration

On this page

Zest works with no configuration. Everything here is optional.

Where Zest looks for a value

For every key and setting, first match wins, checked on every request (so a key you add while the editor is open works on the next click):

  1. The server's environment (export OPENAI_API_KEY=… before Claude Code starts).
  2. .env.local, then .env, in the page's folder, then each folder above it up to your git root or home folder.
  3. Zest's config file: ~/.config/zest/config.json (Windows: %APPDATA%\zest\config.json; override with ZEST_CONFIG). Keys pasted in the editor or set with zest keys set go here, with permissions set so only you can read it.
{ "keys": { "OPENAI_API_KEY": "sk-…", "GEMINI_API_KEY": "AIza…" } }

Keys

NameFor
OPENAI_API_KEYGenerate with OpenAI
GEMINI_API_KEY, GOOGLE_API_KEY, GOOGLE_GENERATIVE_AI_API_KEYGenerate with Google (first one found)
PEXELS_API_KEYPexels search

Settings

NameDefaultDoes
ZEST_PORT4477First port to try for a server of Zest's own (when the Zest service is not running); Zest moves up if it is taken
ZEST_ASSETS_DIRassetsWhere placed images go, relative to the page (must stay inside its folder)
ZEST_OPENAI_IMAGE_MODELtries gpt-image-2, gpt-image-1.5, gpt-image-1Pin one OpenAI image model
ZEST_GOOGLE_IMAGE_MODELtries gemini-2.5-flash-image, gemini-3-pro-image-previewPin one Google image model
OPENAI_BASE_URLhttps://api.openai.com/v1An OpenAI-compatible endpoint (a proxy, Azure OpenAI)
ZEST_LIBRARY_URLthe Zest CDNPoint the Library tab at your own manifest, for a team's approved images
CHROME_PATHfound automaticallyThe browser zest shoot drives
ZEST_NO_BROWSERunsetNever open a browser (CI, remote machines)
NO_COLORunsetPlain zest doctor output
ZEST_UPDATE_CHECKon0 stops the daily check for a newer release (the policy file can turn it off for a whole machine)
ZEST_HOME~/.zestWhere the ledger lives (ledger.jsonl, see Notes and Submit), with the mailboxes and the pages waiting for quiet (When someone is already working here)
ZEST_WAIT_EVERY_MS60000How often a Submit that waits for quiet asks again whether the other agent is still working
ZEST_LEDGERon0 stops writing the ledger

A team library

ZEST_LIBRARY_URL can point at any folder served over HTTPS that holds a manifest.json in the library format. Put your brand's approved photography there, set the variable in a shared .env, and everyone's Library tab shows it.

Run, the button and your team's setup

SettingWhat it does
ZEST_RUNNER=offTurns the Run button off on this machine, whatever the config says. The editor copies the prompt instead.
ZEST_CLAUDE_PATHWhere the claude program is, if Zest cannot find it on your PATH. A .js or .mjs file runs under Node.
ZEST_SERVICE_PORTThe Zest service's port (4470). Change it, and change the address your dev server forwards /__zest to (Editing in place).
ZEST_POLICYRead the organisation's policy from this path (see Security).
ZEST_CONFIGUse another config file (keys, Run's yes, approvals, the button's repos) instead of ~/.config/zest/config.json.

zest.json files in your repository hold what your team decides once: context files, built pages, checks, lint words, locked images, packs and extensions. See Your team's setup.

Suggest a change to this page