hum separates machine-wide project discovery from repository-owned service configuration.
Global project registry
The default registry is $XDG_CONFIG_HOME/hum/config.yaml or
~/.config/hum/config.yaml:
version: 1
projects:
storefront:
config: ~/code/storefront/hum.yaml
Register project configurations via the CLI:
hum project register storefront ./hum.yaml
Use --registry <path> to select another registry. Use --config <path> to
bypass the registry and load a project configuration directly.
Project configuration
A version 3 hum.yaml declares:
runtimes: named process or Compose adapters (processorcompose);environment_providers: named secret or environment sources (one-passwordorexec);repositories: named checkout roots;services: commands, runtimes, working directories, ports, URLs, requirements, readiness constraints, and dependencies;tasks: direct-argv one-shot execution units in the dependency graph;templates: named service selections;logs: rotation, retention, line limits, display redaction, and optional HTTP exporters.
Relative repository paths resolve from the file that declares them. A service
cwd resolves from its repository, and env_file resolves from that working
directory.
Runtimes and Compose reconciliation
Runtimes isolate execution modes. A Compose runtime maps service names to Compose targets:
runtimes:
local:
type: process
containers:
type: compose
project_name: storefront-local
files: [compose.yaml]
reconcile: true
When reconcile: true is set, start reapplies running Compose targets if provider-backed environment variables or generated layer files change.
Environment providers
Environment providers read scoped values without leaking them to global shell environments:
environment_providers:
team-vault:
type: one-password
script:
type: exec
command: ["./scripts/get-env.sh"]
Services declare provider sources under env_from:
env_from:
- provider: team-vault
reference: op://Development/api/environment
format: dotenv
optional: true
- provider: script
args: ["--json"]
format: json
format:dotenv(default) orjson(flat JSON object of string values, useful for key names containing characters like/or:such as npm registry auth tokens).args: extra arguments passed toexecprovider commands.schema: optional dotenv file defining exact required key names.cache: optional private file path (mode0600) under.hum/used when offline.
Service dependencies and readiness
Services and tasks share a dependency graph. Control when a dependency unblocks downstream units:
services:
web:
runtime: local
depends_on: [api]
depends_on_ready: healthy # started | listening | healthy
Local overrides and environment
Machine-specific values can live in an untracked hum.local.yaml beside the
project file. Service environment precedence is:
- values loaded from
.env; service.envvalues;- provider-backed
env_fromvalues; service.env_overrides(useful for mapping container endpoints tolocalhost);- the inherited process environment;
- repeatable CLI overrides such as
--env API_URL=http://localhost:3000.
Unknown fields and invalid names, ports, URLs, durations, commands, or references are rejected. Validate a selected configuration or inspect redacted Compose rendering:
hum storefront all-services config validate
hum storefront all-services config compose --format yaml