Skip to content

Configuration

Settings live in JSONC: JSON with comments and trailing commas. A published JSON Schema gives editor autocomplete and inline validation in VS Code, Cursor, Zed, JetBrains, and anything else that respects $schema.

Two files, merged project-over-user (project values win field by field):

  1. ~/.config/harnery/config.jsonc: user-global base for every project on the machine (honors XDG_CONFIG_HOME, falling back to ~/.config)
  2. <project-root>/.harnery/config.jsonc: the project file, authoritative

CLI flags and HARNERY_* env vars override both per invocation (each field’s env override is noted in the schema reference). A project that sets only web.port keeps a user-global web.bind; the merge is field-by-field, not whole-object.

Reference the published JSON Schema at the top of your config:

{
"$schema": "https://harnery.com/schemas/config.schema.json",
// ... your settings here
}

VS Code (and most modern editors) read the $schema URL and provide autocomplete + validation as you type.

{
"$schema": "https://harnery.com/schemas/config.schema.json",
// Project identity surfaced to peers + in log lines.
"project_name": "my-project",
// Coord layer
"coord": {
"freshness_seconds": 600 // how stale a peer heartbeat can get before sweep
},
// Repository-local working files
"artifacts": {
"default_retention_days": 3
},
// Web UI
"web": {
"port": 9000,
"bind": "127.0.0.1"
},
// Backup (restic)
"backup": {
"repo": "rclone:gdrive:harnery-backup/my-project",
"keep_daily": 7,
"keep_weekly": 4,
"keep_monthly": 6
}
}

See reference / config schema for the full field listing.