Skip to the page

Run it yourself

Configuration

Every environment variable the server, the public site and the CLI read, with defaults. Unset optional features are off.

Ask Claude Ask ChatGPT Markdown

All configuration is environment variables, validated when the server starts. A missing required value or an invalid combination stops the server with a message naming the variable. Nothing falls back silently to a different backend.

Secrets are read from the environment and never logged, written to a journal, committed or sent to a model.

Core

VariableDefaultMeaning
EPHYRA_API_TOKENrequiredService token for /v1/* and /otlp/*. At least 16 characters. Callers send X-Ephyra-Principal with it.
PORT3000Listening port.
EPHYRA_DATA_DIR/dataGit journals, repository mirrors and local operation records. Persist it.
CONVEX_URLunsetThe Convex deployment. Unset means memory mode: state is lost on restart.
EPHYRA_CONVEX_SECRETunsetShared secret, set on both the Convex deployment and the server.
EPHYRA_CONSOLE_DIRapps/console/distThe built console, served at /app/ when it contains an index.html.

Repository

VariableDefaultMeaning
EPHYRA_REPO_URLunsetThe repository this deployment drives. Without it, signals are stored but not triaged.
EPHYRA_BASE_REFrefs/heads/mainThe branch repairs build on.
EPHYRA_REPO_IDdefaultA name for the repository in records.
EPHYRA_FORGEplainplain, radicle or tangled. The last two need host integration.
EPHYRA_AUTONOMY_FILEunsetPath to autonomy.md. The shadow-mode template is used otherwise.
EPHYRA_THRESHOLDS_FILEunsetPath to thresholds.yaml.

Sign-in

VariableDefaultMeaning
EPHYRA_PUBLIC_ORIGINunsetThe server's public address as a bare origin, with no path. Enables browser sign-in.
EPHYRA_SESSION_KEYunset32 random bytes, base64 or base64url.
EPHYRA_APPROVER_DIDSemptyComma-separated Not Organic DIDs that may approve.
NOTORGANIC_ISSUERhttps://api.notorganic.infoIdentity provider API.
NOTORGANIC_AUTHORIZATION_URLhttps://id.notorganic.info/authorizeWhere sign-in sends the browser.
NOTORGANIC_PRODUCTnotorganicThe product this origin is registered under.
EPHYRA_BILLING_DIDfirst approverThe account hosted model calls are billed to.

Models

VariableDefaultMeaning
EPHYRA_EXTRACTparserHow signals are structured: parser (deterministic, no model), workers-ai, notorganic or none.
EPHYRA_DECIDEnoneThe triage model: none (every signal goes to a person), typesafe, systemone or notorganic.
EPHYRA_SYSTEMONE_URL, EPHYRA_SYSTEMONE_KEY, EPHYRA_SYSTEMONE_MODELunsetFor EPHYRA_DECIDE=systemone.
EPHYRA_DRAFTnoneVelum's model for policy drafting: none, notorganic, anthropic, openai, ampersand or fake.
EPHYRA_DRAFT_MODELper providerModel id or gateway alias for Velum.
EPHYRA_DRAFT_ANTHROPIC_API_KEY, EPHYRA_DRAFT_OPENAI_API_KEYunsetRequired for the matching EPHYRA_DRAFT value.
EPHYRA_HUMANS_API_KEYunsetRequired when drafting or the tutor uses ampersand.
EPHYRA_TUTORnone&Tutor's backend: none, notorganic or ampersand.
EPHYRA_TUTOR_MAX_COST_MICROUSD100000Ceiling for one tutor consultation.

Agents and execution

VariableDefaultMeaning
EPHYRA_AGENTnoneThe coding agent: none, claude-code, codex or amp. The CLI must be in the runner image.
EPHYRA_AGENT_MODELunsetModel for the agent, where the CLI accepts one.
EPHYRA_AMP_EXECUTORlocalWhere Amp runs: local, orb or runner.
EPHYRA_AMP_PROJECT, EPHYRA_AMP_RUNNER_IDunsetFor the orb and runner executors.
EPHYRA_AMP_MODEmediumlow, medium, high or ultra.
EPHYRA_HOSTED_RUNNERnoneRunner for hosted accounts: none or railway.
EPHYRA_HOSTED_ACCOUNTSemptyThe account DIDs the operator grants hosted execution. Model and repository keys stay with each account.
EPHYRA_RAILWAY_TOKEN, EPHYRA_RAILWAY_ENVIRONMENT_IDunsetFor EPHYRA_HOSTED_RUNNER=railway.
EPHYRA_RAILWAY_CHECKPOINT, EPHYRA_RAILWAY_REGIONunsetOptional sandbox image and placement.
EPHYRA_RAILWAY_CPU1Sandbox CPUs, up to 32.
EPHYRA_RAILWAY_MEMORY_MB2000Sandbox memory.
EPHYRA_RAILWAY_IDLE_MINUTES5Idle time before a sandbox stops.

Budgets and timing

VariableDefaultMeaning
EPHYRA_TRAIL_TOKENS2000000Reported tokens per quest.
EPHYRA_TRAIL_WALLCLOCK_S14400Execution seconds per quest.
EPHYRA_TRAIL_SPEND_MICROUSD0Metered inference spend per quest. Zero is no allowance.
EPHYRA_REQUIRE_KNOWN_COSTfalseStop when a required cost is unknown. Always true for personal workspaces.
EPHYRA_STEP_TIMEOUT_S1800Longest a single agent step may run.
EPHYRA_WATCH_EVERY_S300How often the watch samples.

Budgets and usage explains how these count.

Proof and evidence

VariableDefaultMeaning
EPHYRA_PROOF_RECEIPTS_DIRunsetOperator-owned absolute path where study receipts are placed.
EPHYRA_PROOF_TRUST_FILEunsetOperator-owned absolute path to the grants file. See Study evidence.
EPHYRA_TRACTION_ORIGIN, EPHYRA_TRACTION_TOKEN, EPHYRA_TRACTION_PROJECTSunsetScoped Traction evidence for research.

Voice

VariableDefaultMeaning
EPHYRA_VOICEnonenone, notorganic or compatible.
EPHYRA_VOICE_URL, EPHYRA_VOICE_API_KEYunsetFor a compatible speech service.
EPHYRA_VOICE_STT_MODEL, EPHYRA_VOICE_TTS_MODEL, EPHYRA_VOICE_NAMEunsetModels and voice.
EPHYRA_VOICE_MAX_COST_MICROUSD100000Ceiling for one voice exchange.

The public site

The site that serves these pages (apps/web) has its own settings:

VariableDefaultMeaning
EPHYRA_SITE_ORIGINhttp://127.0.0.1:$PORTCanonical origin of the public site.
EPHYRA_DOCS_ORIGINunsetA host of its own for the documentation, such as https://docs.example.com. Unset, the docs are served under /docs. Set, /docs/... redirects there.
EPHYRA_API_ORIGINunsetThe Ephyra server. Links the app, auth.md and agent access.
EPHYRA_SITE_REDIRECT_ORIGINSemptyOld origins that redirect to the canonical one.
EPHYRA_BLOG_PUBLICATION_URIunsetConnects the journal.
EPHYRA_HOME_CUTeWhich landing page is served at /.

The CLI

VariableMeaning
EPHYRA_URLThe server. Overrides the one saved by ephyra login.
EPHYRA_API_TOKEN, EPHYRA_PRINCIPALService-token access for automation. Both are required together.
EPHYRA_CREDENTIALSPath of the credentials file. Default ~/.config/ephyra/credentials.json.
EPHYRA_DOCS_URLWhere ephyra docs and the inbox's d key point.
EPHYRA_TIPS0 hides the inbox tip line.
EPHYRA_ANSI1 uses the plain ANSI renderer for the inbox.
NO_COLORAny value turns colour off.

Next