Skip to main content
Everything a workspace needs to be useful the moment it exists lives in one committed file. Getting this right once is worth more than any other configuration work in the product: it is the difference between “the new workspace is ready” and “the new workspace is a broken checkout I have to fix by hand.” For the complete key list, including which keys are not yet wired up, see the settings reference.

Three layers

Later layers win key by key. Team decisions go in settings.toml; absolute paths, personal endpoints, and anything secret go in settings.local.toml.
Reading the effective settings rather than the file is the reliable way to answer “why is this workspace behaving like that” — it is the merged result the daemon actually uses.

Scripts

  • setup runs once when a workspace is created. The single most important key in the file: a fresh worktree has no gitignored files, so no dependencies, no build output, no virtualenv.
  • run is the long-running dev process, started and stopped from the app or with archductor run / archductor stop.
  • archive runs on archive — tear down containers, free a database.
  • test / lint / typecheck / build become the workspace’s checks.
  • run_mode defaults to concurrent. Set nonconcurrent when the dev server binds something genuinely global (a fixed database port, a docker network) and only one workspace may run at a time. Starting a second run then fails with a message naming the workspace already running, instead of a confusing port collision.

Several run scripts

When a workspace starts more than one thing, run takes a table:

Checks

There is no separate checks configuration. The four script keys are it.
Keys are test, lint, typecheck, build. Each falls back to customization.automation.<name>_command if the [scripts] key is unset; prefer [scripts]. The same four commands also populate the command palette.

Getting local files into a workspace

The two sources are combined, not ranked: the .worktreeinclude lines and file_include_globs are concatenated into one pattern list. A .worktreeinclude does not disable file_include_globs. With both genuinely empty, nothing is copied — .env* is scaffolded into a new settings.toml at bootstrap, but it is not a runtime fallback. Lines starting with ! or # are discarded, so gitignore-style negation does not work. Only gitignored files are ever copied.
env_file_refs is different from copying: these files are parsed and their variables injected into scripts and agent processes.
Every env_file_refs path must exist when a workspace launches, or the launch fails. That is intentional — a missing .env should be a loud error, not an app that boots with empty configuration. The workspace copy is preferred; the repository root is the fallback.

Environment

Scripts and agent processes always receive these built-ins: Precedence, lowest to highest: built-ins, then env_file_refs contents, then [environment_variables].

Prompts and prompt packs

Prompts are the text sent to an agent for each built-in action — creating a pull request, resolving conflicts, fixing failing tests. Worth editing, because they encode how your repository wants those jobs done.
A pack is a file under .archductor/prompt-packs/; default.toml is created on bootstrap. Available keys in both [prompts] and a pack: new_workspace, general, continue_work, summarize_session, handoff, code_review, create_pr, fix_errors, resolve_merge_conflicts, rename_branch, commit_generation, push_branch, merge_pr, revert_changes, review_comments, test_fixing, refactor_style, setup_script, run_script. Inline [prompts] overrides the active pack, so a pack can carry house defaults while one repository deviates on a single key.

Pull requests

Title placeholders: {workspace}, {branch}, {summary}, {session_summary}, {changed_files}, {changed_files_count}, {type}. pr_body_sections replaces the default headings (Summary, What Changed, Why, User Impact, Validation). Content is generated by matching the heading text, so keep recognisable words in your section names.

Merge rules

Enforced by archductor pr merge. The first two default to on, so an open todo refuses the merge until you close it or opt out.

Workspace defaults

working_directory is the monorepo key: scripts and agent sessions start there instead of at the worktree root.

A working example

.archductor/settings.toml