Skip to content

Docs — Configuration

Configuration

Aphrodite reads runtime configuration from environment variables. For a local service, copy the example file and edit the private copy:

cp config/aphrodite.env.example config/aphrodite.env

config/aphrodite.env is local operator configuration and must not be committed.

Core service settings

VariableDefaultUsed byPurpose
APHRODITE_HOST127.0.0.1aphrodite.config.load_configBind host used by CLI/service configuration.
APHRODITE_PORT9079aphrodite.config.load_configBind port. Invalid values fall back to 9079.
APHRODITE_MODULESimage_gen,skillopt,acp_relayaphrodite.config.load_config, aphrodite.app.build_routerComma-separated adapter names to register with the dispatch router. Unknown names register a placeholder handler.
APHRODITE_CORS_ORIGINSnone (CORS disabled)aphrodite.config.load_config, aphrodite.app.create_appComma-separated browser origins allowed to call HTTP routes cross-origin. Unset → no CORS middleware (loopback-only). Use * to allow any origin (credentials are then disabled per the CORS spec).
HERMES_HOME~/.hermesaphrodite.config, aphrodite.pathsLocates the external Hermes home. If it points at <root>/profiles/<name>, hermes_root() collapses to <root> for shared plugin discovery.
APHRODITE_PUBLIC_BASE_URLnonereadiness/preflight helpersPublic HTTPS origin for endpoint preflight. Do not include /discord/interactions; Aphrodite appends that path when checking the Discord endpoint.

Discord interaction and authorization settings

VariableDefaultUsed byPurpose
APHRODITE_DISCORD_PUBLIC_KEYnoneaphrodite.app, aphrodite.discord.signatureDiscord application Ed25519 public key for inbound /discord/interactions signature verification. Production interactions fail closed with 503 when unset.
APHRODITE_DISCORD_BOT_TOKENnonepreflight helpersOutbound Discord bot token used by read-only deployment preflight checks.
APHRODITE_DISCORD_EXPECTED_BOT_IDnoneendpoint/preflight helpersOptional expected bot id checked by live-publish preflight.
APHRODITE_DISCORD_EXPECTED_BOT_USERNAMEnoneendpoint/preflight helpersOptional expected bot username checked by live-publish preflight.

Module runtime overrides

Image generation

VariableDefaultPurpose
APHRODITE_IMAGE_GEN_MODELprofile config or gpt-image-2-mediumSelects one of gpt-image-2-low, gpt-image-2-medium, or gpt-image-2-high.
OPENAI_IMAGE_MODELprofile config or gpt-image-2-mediumSecondary model override checked after APHRODITE_IMAGE_GEN_MODEL.

image_gen authentication is not configured with OPENAI_API_KEY. The HTTP route reads a Hermes Codex/OpenAI OAuth token through the private agent stack; without that private auth it returns auth_required. To use image generation without the Hermes auth stack, call generate_image(payload, client=<your OpenAI client>) programmatically.

SkillOpt

VariableDefaultPurpose
APHRODITE_SKILLOPT_DATA_ROOTdata/skillopt under the repository rootStorage root for SkillOpt runs and evaluations.
SKILLOPT_REPOnoneRepository containing scripts/train.py when a train request does not provide an explicit command.

ACP relay

VariableDefaultPurpose
APHRODITE_ACP_PROFILEforgeHermes profile used when spawning hermes -p <profile> acp.
APHRODITE_ACP_MODELopenai/gpt-4o-miniModel component for ACP provider:model selection.
APHRODITE_ACP_PROVIDERopenrouterProvider component for ACP provider:model selection.
APHRODITE_ACP_HERMES_BINdiscovered hermes executableBinary used to spawn the external ACP runtime.
APHRODITE_ACP_DB<hermes_root>/aphrodite/acp_relay.sqlite3SQLite conversation store path.
APHRODITE_ACP_CWDshared Hermes rootWorking directory for the ACP subprocess.
APHRODITE_ACP_TURN_TIMEOUT240.0Per-turn timeout in seconds.

The ACP transport sets HERMES_YOLO_MODE=1 and HERMES_ACCEPT_HOOKS=1 in the subprocess environment if they are not already set, so non-interactive turns do not block on prompts.