Skip to content

Every option

Every option has a default, so a factory that sets nothing runs the default profile. This page is generated from factory/options.tsv, the same registry the onboarding reads, so it cannot disagree with it.

Scope says where an option is set: in each service repo’s .xal/factory.conf, or in the ops repo’s, which is also the factory profile every new service starts from. A value set in a reviewed file, not a settings page, is the point: see ADR-0009.

xal-factory config explain <key> prints any row below in the terminal.

The owner/name of the ops repo: admitted specs, the spend ledger, the idea inbox. No script can guess it.

Default Choices Scope Onboarding asks
required any text service yes

Change it later: xal-factory config set factory.ops_repo <owner>/<name>

The factory repo services vendor the spec from and the reader is pinned in. Change it only if you run a fork.

Default Choices Scope Onboarding asks
xodeeq/xal-factory any text service no

Change it later: xal-factory config set factory.process_repo <owner>/<name>

The label a stopped pull request gets when the pipeline hands it to a person.

Default Choices Scope Onboarding asks
needs-human any text service yes

Change it later: xal-factory config set factory.escalation_label <label>

The language xal-factory seed pre-selects. The service’s stack ADR is still required: this is a fallback, not a decision.

Default Choices Scope Onboarding asks
go go ops yes

Change it later: xal-factory config set stack.default_lang <lang>

The model that builds plan sessions. The strongest is the default because the gate cannot see a test that proves nothing.

Default Choices Scope Onboarding asks
claude-opus-5-5 any text service yes

Change it later: xal-factory config set models.driver <model-id>

The model that reads every session PR on Spec and Standards before it can merge.

Default Choices Scope Onboarding asks
claude-opus-5-5 any text service no

Change it later: xal-factory config set models.reader <model-id>

Turn cap per driver run: a loop guard, not a budget.

Default Choices Scope Onboarding asks
200 a positive whole number service no

Change it later: xal-factory config set budget.driver_max_turns <n>

Turn cap per reader run.

Default Choices Scope Onboarding asks
80 a positive whole number service no

Change it later: xal-factory config set budget.reader_max_turns <n>

Dollar ceiling per plan, checked against the ledger before every session. Spend is bounded to ceiling + one session.

Default Choices Scope Onboarding asks
600 a positive whole number service yes

Change it later: xal-factory config set plan.spend_ceiling_usd <n> (applies to plans emitted after)

Dollar ceiling per session across its retries.

Default Choices Scope Onboarding asks
70 a positive whole number service yes

Change it later: xal-factory config set plan.session_ceiling_usd <n> (applies to plans emitted after)

Retries per session before it is escalated to a person.

Default Choices Scope Onboarding asks
2 a positive whole number service no

Change it later: xal-factory config set plan.retry_cap <n> (applies to plans emitted after)

The plugin release the reader is read from. Pinned, so an unreleased edit never changes the merge gate.

Default Choices Scope Onboarding asks
xal-factory--v0.2.0 any text service no

Change it later: xal-factory config set reader.ref xal-factory--v<version>

Where in the ops repo the spend ledger lives.

Default Choices Scope Onboarding asks
status/costs.jsonl any text service no

Change it later: xal-factory config set ops.ledger_path <path>

The driver: builds one plan session headless when dispatched (/run-session). Off means sessions are built by hand.

Default Choices Scope Onboarding asks
on on, off service yes

Change it later: xal-factory enable driver / xal-factory disable driver

The chain: after a session merges, dispatches the next; retries a failure, then escalates. Off means every session is dispatched by a person.

Default Choices Scope Onboarding asks
off on, off service yes

Change it later: xal-factory enable chain / xal-factory disable chain

What may merge with no person present. off disables merge.yml; the others set the plan’s autonomy_level. infra, billing, public-surface and delete never merge unattended.

Default Choices Scope Onboarding asks
off off, code-only, code-and-tests-pre-deployment service yes

Change it later: xal-factory config set pipeline.auto_merge <level> (a plan's own autonomy_level is the owner's approval)

The reader on every session PR. Auto-merge requires it.

Default Choices Scope Onboarding asks
on on, off service no

Change it later: xal-factory enable reader / xal-factory disable reader

@claude in issues and PRs.

Default Choices Scope Onboarding asks
on on, off service no

Change it later: xal-factory enable mention / xal-factory disable mention

The generic review bot on non-session PRs.

Default Choices Scope Onboarding asks
on on, off service no

Change it later: xal-factory enable review / xal-factory disable review

Where every workflow runs. self-hosted needs a registered runner; unset means hosted minutes.

Default Choices Scope Onboarding asks
ubuntu-latest ubuntu-latest, self-hosted service no

Change it later: xal-factory config set ci.runner self-hosted

Where deploy.yml deploys. none refuses loudly. Turning one on is a person’s act (docs/deploy.md).

Default Choices Scope Onboarding asks
none none, fly service no

Change it later: xal-factory config set deploy.target fly

The live base URL the smoke gate drives after a deploy.

Default Choices Scope Onboarding asks
none any text service no

Change it later: xal-factory config set deploy.url https://<host>

The weekday nudge: status/current.md rendered into a pinned issue.

Default Choices Scope Onboarding asks
on on, off ops yes

Change it later: xal-factory enable nudge / xal-factory disable nudge

The idea inbox: an open issue labelled ideas that /idea posts to.

Default Choices Scope Onboarding asks
on on, off ops yes

Change it later: xal-factory config set ops.idea_inbox on\|off