Skip to content

Machine config ​

File: <base dir>/factory/config.yml, by default ~/.config/t3fac/factory/config.yml. Parsed by apps/server/src/factory/config.ts (parseMachineConfig). Example: factory/config.example.yml.

Schema ​

KeyTypeRequiredDefaultRule
gh_config_dirstringyesNon-empty. Full path; ~ is not expanded.
poll_secondsinteger ≥ 10no60
max_concurrent_runsinteger ≥ 1yesAcross all repos.
max_concurrent_gatesinteger ≥ 1no2
notifybooleannotruemacOS notification per new attention item.
Retired keyLoad result
model_instanceWarning. Kept by a settings save.
modelWarning. Kept by a settings save.
reposWarning. Kept by a settings save.

Any other top-level key: error unknown key <key>.

Errors print as <file>: <field>: <message>. A missing file means the factory is idle (no factory config); a file with errors means the factory is idle and an attention item config is open.

Reload ​

EventReads the file
Server startyes
PUT /api/factory/config (Settings → Factory save)yes, after validating; a failing body is 422 invalid_config and the file is unchanged
Hand editno; applies at the next save or restart
KeyApplies after a save
poll_secondsat once
max_concurrent_runsnext pass
max_concurrent_gatesnext pass
notifynext attention item
gh_config_dirnext pass, for the factory's own gh calls. Sessions use the server's GH_CONFIG_DIR env (set in factory/launchd/io.github.rawphp.t3fac.plist): edit it there, then run install.sh on the built archive (deploy.sh refuses the uncommitted edit until it is committed).

Settings → Factory edits gh_config_dir, poll_seconds, max_concurrent_runs, max_concurrent_gates. It keeps notify and the retired keys, and drops unknown keys.

Data dir ​

Path under ~/.config/t3fac/factoryContent
config.ymlThis file.
runs/<run id>.jsonlRun ledger.
events.jsonlMachine log.
attention.jsonOpen and dismissed attention items.
claims-pausedExists while claims are paused.
stop-requests/<run id>Pending stop request.
watched-projects.jsonT3 projects each repo was watched from.
gates/<run id>.lockExists while that run's gate runs.