Repository settings

microManager reads a repository’s scripts, files-to-copy list, environment variables and prompts from TOML files in the repository, using the same keys as Conductor. Its own .micromanager files take precedence over .conductor ones, local files over shared ones, and overrides made in the app over everything.

Updated

Which files does microManager read, and in what order?

It merges up to seven sources. When two set the same key, the one higher in this list wins, and keys a source does not mention fall through to the next one. Run scripts merge by their id across the files, while run scripts set in the app replace the files’ list.

PrecedenceSourceNotes
1 Overrides made in microManager’s repository settings Stored in microManager, never written to your repository.
2 .micromanager/settings.local.toml Personal overrides; keep it out of git.
3 .micromanager/settings.toml Shared, committed settings for microManager.
4 .conductor/settings.local.toml Conductor’s personal overrides file, read as is.
5 .conductor/settings.toml Conductor’s shared settings file, read as is.
6 conductor.json Conductor’s older JSON format: scripts.setup, scripts.run (a string), scripts.archive and runScriptMode. Ignored when .conductor/settings.toml exists, as in Conductor.
7 Built-in defaults No scripts; files to copy default to .env*.

microManager never writes to any of these files. Changes you make in a repository’s settings in the app are stored in microManager’s own database, on your computer.

Which keys can a settings file contain?

KeyTypeWhat it does
scripts.setup string Shell command run in a new workspace right after its worktree exists (and again when you restore an archived workspace). Agents can start while it runs.
scripts.archive string Shell command run before a workspace is archived, while its folder still exists. It gets up to 2 minutes, and a failure does not stop the archive.
scripts.run_mode "concurrent" | "nonconcurrent" With "nonconcurrent", starting a run script stops the same script in the repository’s other workspaces first. Useful when every workspace wants the same fixed port.
scripts.run.<id>.command string The command of one run script. The Run button in the workspace header starts the default script, and its menu lists every script.
scripts.run.<id>.default boolean Makes this the script the Run button starts. With none marked, the first script is the default.
scripts.run.<id>.args string[] Arguments added after the command, each quoted for the shell the script runs in.
scripts.run.<id>.options.cwd string The folder the script runs in, relative to the workspace. The workspace folder when absent.
scripts.run.<id>.icon string Accepted for compatibility with Conductor’s format; microManager does not show it.
scripts.run.<id>.available_in string | string[] Where the script may run. A script limited to "cloud" is left out, because every microManager workspace is local.
scripts.run.<id>.hide boolean Leaves the script out. Run scripts merge by id across the files, field by field, so a local file can hide a shared script with just this line.
scripts.run string (legacy) A single command string is still accepted and becomes one script named default, marked as the default.
file_include_globs string[], or a string with one pattern per line Patterns, written like .gitignore lines, for untracked or ignored files to copy into new workspaces. Used when the repository has no .worktreeinclude file.
environment_variables.<name> string A variable for the scripts, terminals and agents of every workspace of the repository. Variables merge by name across the files, and never replace the workspace’s own MICROMANAGER_* and CONDUCTOR_* variables.
environment_variables.local.<name> string Wins over the same file’s environment_variables for local workspaces, which every microManager workspace is. The .cloud table is left out.
prompts.general string Instructions added to every chat in the repository’s workspaces, after your own general prompt, once you trust the repository.
prompts.create_pr string Replaces the prompt the Create PR button sends to the agent in this repository, once you trust it. The same goes for each prompt below.
prompts.code_review string Replaces the prompt Ask for a review sends to a new Review chat.
prompts.fix_errors string Replaces the prompt that asks the agent to fix the checks failing on the pull request.
prompts.resolve_merge_conflicts string Replaces the prompt that asks the agent to merge the target branch and resolve conflicts.
prompts.rename_branch string Replaces the prompt that asks the agent to give the branch a descriptive name.
run_from_root boolean Run from repository root, for a project that only runs from the repository’s own folder: a workspace’s Run from root button then shows its changes there, kept in sync, so a dev server running there picks them up, and turning it off puts the folder back as it was. Off by default. Conductor’s key for the same setting, spotlight_testing, is read too.

What does a complete settings file look like?

# .micromanager/settings.toml (or .conductor/settings.toml)
file_include_globs = [".env", ".env.local", "config/secrets.json"]

[scripts]
setup = "pnpm install --frozen-lockfile"
archive = "docker compose -p \"$MICROMANAGER_WORKSPACE_NAME\" down -v"
run_mode = "concurrent"

[scripts.run.dev]
command = "pnpm dev --port $MICROMANAGER_PORT"
default = true

[scripts.run.tests]
command = "pnpm test --watch"

The same file works as .conductor/settings.toml, so a repository that already has one needs no changes.

How do I keep personal settings out of git?

Put them in settings.local.toml next to the shared file and add it to .gitignore. It takes precedence over the shared file, so you can change one run script without touching what your team uses:

# .micromanager/settings.local.toml (personal, keep it out of git)
[scripts.run.dev]
command = "pnpm dev --port $MICROMANAGER_PORT --inspect"
default = true

Is the older conductor.json still read?

Yes, at the lowest precedence of the files, unless the repository has .conductor/settings.toml, as in Conductor. It understands scripts.setup, a single scripts.run string, scripts.archive and runScriptMode:

{
  "scripts": {
    "setup": "npm install",
    "run": "npm run dev",
    "archive": "npm run clean"
  },
  "runScriptMode": "nonconcurrent"
}

Where do I see which file a setting came from?

Open the repository in Settings → Repositories. Under Scripts, Where these come from lists the files in effect, highest precedence first. The setup, run and archive scripts, the run mode, the files to copy and Run from repository root can each be overridden there for this computer only, and the repository can have its own prompts.

Where to go next

Get microManager

Free, no account, for macOS, Windows and Linux. It runs the agent CLIs you already have installed and signed in.

curl -fsSL https://micromanager.win/install.sh | sh

That installs it on macOS and Linux. On Windows, paste this into PowerShell:

irm https://micromanager.win/install.ps1 | iex