Skip to content

Offline fleet configuration

narwhal config validate loads a fleet file through the same schema, field, endpoint-reference and cross-field checks used by serving. It reads the file and endpoint environment variables, so validation succeeds before profiles exist and while engine addresses are unreachable.

narwhal config validate --fleet config/fleet.json
narwhal config inspect --fleet config/fleet.json --format json
Option Operation
--fleet PATH Load the fleet document selected for validation or inspection.
--format text\|json Print validation in text mode or wrap the effective configuration in a versioned JSON command result.

inspect --format json puts a narwhal.effective-config version 1 document in the data field of the command result. The default text mode prints that inspection document directly. validate --format json returns the same data after successful validation. Repeated inspection with the same file, environment, working directory and filesystem path bindings produces identical JSON.

Fleet-file values and serving defaults

scope: "fleet_file" identifies values supplied by the fleet file and the loader's defaults. settings uses the narwhal.fleet layout with every default populated, including optional engine fields and null for optional contract, hardware and shared-device declarations. Endpoint fields contain resolved ${VARIABLE} values; engine.engine_api_key_env retains the credential variable's name. Engine clients resolve its value when constructed, so configuration inspection works before that credential is supplied.

derived reports the engine count, connection-pool and keepalive limits, default admission concurrency, retained HTTP request limit and integer Uvicorn shutdown timeout. The loader derives engine.control_connections from max(4, 2 * engine_count) when its configured value is zero. An explicit positive value takes precedence. Admission concurrency defaults to serving.max_connections; the retained HTTP request limit adds serving.queue_capacity.

Serving flags such as --max-concurrent, --journal, --graceful-timeout and --resume apply when narwhal-serve constructs the router. This inspection command accepts the fleet-file layer; use the serving invocation to identify its overrides.

Artifact paths

source and artifact_paths contain absolute paths, resolving existing symlinks. Relative paths use working_directory, matching serving's process working directory. The fleet file's parent directory supplies its location only. Path strings inside the file retain literal ~ and environment-variable text.

artifact_paths.profiles and artifact_paths.state come from the loader's profiles.path and recovery.state_path. The default journal is journal.jsonl beside the profiles. Inspection resolves these names through filesystem reads; profile contents, state contents and artifact creation belong to their consuming commands.

After engines are running and profiles have been collected, run narwhal-check --fleet config/fleet.json to verify live reachability, engine contracts, profile bindings, transfer paths and SLO gates. Offline validation covers configuration syntax and relationships; deployment preflight measures the running fleet.