Skip to content

Server configuration reference ​

Service configuration describes an Application's workspace, components, Jobs, schedules, and HTTP service. CLI start uses ConfigResolver to resolve YAML/JSON first, then validates it with ApplicationConfig. Constructing an Application directly in Python does not automatically read default.yaml; explicitly call the resolver or supply complete configuration.

Configuration resolution and overrides

Minimal override configuration ​

yaml
extends: default
workspace_dir: .axonx
log_dir: logs
service:
  host: 127.0.0.1
  port: 1024
  token: ${AXONX_SERVICE_TOKEN}
bash
axonx start --config app.yaml
axonx start --config app.yaml --service.port 2024

extends is not a persistent ApplicationConfig field; the resolver removes it first. See Python reference for Python usage.

ApplicationConfig ​

The table lists model defaults, which differ from the expanded built-in default.yaml. For example, model components/jobs are empty, while default.yaml configures task components, an Agent, and multiple Jobs.

FieldTypeModel defaultMeaning and constraints
app_namestringAxonXDisplay name in logs and protocols
workspace_dirstring.axonxRoot directory for tasks, artifacts, and application state
log_dirstringlogsService and task log directory
timezonestringAsia/ShanghaiDefault application/task timezone
languageen / zhenBuilt-in Agent guide language
enable_logobooleantrueCLI start prints the startup logo
log_to_consolebooleantrueConsole logging
log_to_filebooleantrueFile logging
pluginsPluginConfigsources=[]Startup plugin sources
targetsTargetConfig[][]Service targets to which the backend may forward
environmentdict[string,string]{}Application environment injected into workers and Agents
componentsdict[category,dict[name,ComponentConfig]]{}Named component groups
jobsdict[public_name,JobConfig]{}Job definitions
schedulesdict[name,ScheduleConfig]{}Schedulers
serviceComponentConfig/nullnullService component; CLI start requires service

The model prohibits unknown top-level fields. Normalized target addresses must not be duplicated. environment values must be strings, rather than numbers or nested objects.

Configuration discovery and inheritance ​

--config default and --config remote locate built-in named configurations. Packages may contribute other names through the axonx.configs entry point; collisions between built-in and external names, or among external names, are rejected. File paths support .yaml/.yml/.json. Relative file paths are tried against the current working directory first, then the built-in configuration directory.

yaml
extends:
  - default
  - ./research-base.yaml
service:
  port: 2024

Parent configurations merge from left to right in the list; the current file overrides parents, and explicit CLI/Python overrides apply last. Dictionaries merge recursively and lists are replaced in full; two steps or targets arrays are not concatenated. Relative extends files are sought first in the current configuration file's directory. Cyclic inheritance raises an error.

yaml
# The parent's targets are replaced in full; other names in jobs are retained.
extends: default
targets:
  - address: http://node-b:1024
    token: ${NODE_B_TOKEN}
jobs:
  version:
    enable_stream: false

Environment expansion and paths ​

${VAR} requires the variable to exist; ${VAR:-default} uses the default text when the variable is absent. An existing but empty variable does not use default. Each file is recursively expanded before inheritance merging. Only strings whose content changes during environment substitution are then converted from true/false, null, numbers, or JSON to natural values; unchanged strings retain their original type.

yaml
service:
  token: ${AXONX_SERVICE_TOKEN:-null}
  web_enabled: ${AXONX_SERVICE_WEB_ENABLED:-true}
  shutdown_timeout: ${AXONX_SERVICE_SHUTDOWN_TIMEOUT:-1}

CLI start first loads .env and merges it into environment. Ordinary clients and exec read the environment with override=false. Python's ConfigResolver does not itself load .env; callers must establish the environment themselves.

Relative plugins.sources paths resolve to absolute paths against the configuration file that declares them. Ordinary paths such as workspace_dir/log_dir do not receive this special conversion; at runtime, they are usually relative to the process working directory and support user-directory expansion. The configuration file's directory is not the base for all paths.

ComponentConfig and named components ​

ComponentConfig requires a nonempty backend and allows extra fields, interpreted or validated by the corresponding implementation constructor.

yaml
components:
  task_repository:
    default:
      backend: local
      recursive: true
      force_polling: true
      debounce: 3000
      step: 3000
      poll_delay_ms: 1000
  task_manager:
    default:
      backend: local
      task_repository: default
      terminate_grace_seconds: 5
      reaper_interval_seconds: 5

task_repository is the category, default is the instance name, and local is the implementation backend. TaskManager declares a dependency on the repository. Composition checks instance existence and type; dependencies start first and close last. See Framework extensions.

JobConfig ​

FieldTypeDefaultMeaning
backendNonempty stringpipelineJob implementation
descriptionstringEmpty stringPublic description
parametersJSON Schema objecttype=object,properties={}Must describe an object; missing type is filled with object
enable_servebooleantrueEligible for the HTTP/MCP public catalog
enable_streambooleantrueAllow live HTTP streaming
requires_authbooleantrueExclude this Job when no service token is configured
stepsComponentConfig[][]Execute asynchronous Steps sequentially
defaultsobject{}Default Job context values

PipelineJob also supports event_buffer_size (default 64, a positive integer) as a backend-specific extra field. JSON Schema default in parameters is descriptive; do not assume the framework injects it uniformly. Actual defaults must be handled by defaults or a Step. System-injected values are isolated from public parameters.

ScheduleConfig ​

FieldTypeDefaultMeaning
backendNonempty stringcronScheduler implementation
jobNonempty stringRequiredJob name to invoke
cronNonempty stringRequiredCron expression
argumentsobject{}Job arguments
timezoneNonempty string/nullnullnull uses the application timezone
concurrency_policyforbid/allow/replaceforbidOverlap policy for the same scheduled Job

The default is schedules={}. Policies apply to execution of the scheduled Job; after submit returns, the background Task may still be running. See Scheduling for an enabling example.

PluginConfig and TargetConfig ​

plugins accepts only sources, an array of nonempty strings defaulting to []. Plugins already installed in the environment are also discovered; sources is not an exclusive enablement allowlist. Startup sources may trigger installation; confirm the source code and dependencies being used first.

TargetConfig strictly prohibits extra fields: address is required and nonempty; token defaults to null or is a nonempty string. Addresses accept host:port or HTTP(S) URLs with explicit ports. User/password credentials, subpaths, query, and fragment are prohibited; normalization removes trailing slashes. See Client connections for complete usage.

HTTP service ​

FieldDefaultExplanation
backendRequired: httpHTTP service implementation
host0.0.0.0Bind address
port1024Listening port
shutdown_timeout1Uvicorn graceful-shutdown seconds; nonnegative
web_enabledtrueWhether to mount the Studio static build
tokennullNonempty Bearer token; null filters the catalog according to Job rules

The service has no TLS configuration by default. A missing Studio build is logged as unavailable; the API can still run. Configuration updates do not recompose the application live; restart and verify the catalog again.

Topic-specific configuration and validation ​

When startup raises ValidationError, first check top-level spelling, strict TargetConfig token types, environment strings, and registered backend names. Missing or conflicting dependencies are composition errors and cannot be resolved by skipping Schema validation.

Implementation references: axonx/config/models.py, resolver.py, default.yaml, core/composition.py, components/service/http/service.py.

Agent-native quant research.