Settings
worktree create, start, ios and android resolve settings from three layers, merged with the first match winning (nested objects merge key by key; arrays -- like worktree.include -- are replaced wholesale, never concatenated):
- Project settings -- per absolute project path, stored in
~/.stim-cli/config.json. Highest precedence. - Repo settings -- shared by every worktree of the same repository (keyed by the repo's git common dir), also stored in
~/.stim-cli/config.json. Local to this machine. - Committed settings --
.stim-cli.jsonat the repo root, checked into git and shared with everyone who clones the repo. Lowest precedence, but the only layer that travels with the repo -- and, with theconfigcommand gone, normally the one you want.
The keys stim-cli reads are ios.deviceType, ios.runtime, android.systemImage, worktreeDir, caches, and, under worktree: baseRef ("fresh" or "head"), include (carry-over patterns, same role as .worktreeinclude) and exclude (the --carry-ignored skip list, same role as .worktreeexclude). Anything else is ignored, and stim-cli warns about it by name on every run that resolves settings -- a worktree.install pipeline, for instance, is not a key stim-cli reads. Example .stim-cli.json:
{
"ios": { "deviceType": "iPhone 17 Pro" },
"worktree": {
"baseRef": "fresh",
"include": [".env", ".env.*"]
}
}
Never put secrets in .stim-cli.json. It's committed to git and readable by anyone with repo access. Secrets belong in gitignored files (.env and friends) that worktree create's carry-over feature copies into each new worktree -- that mechanism exists specifically so gitignored, secret-bearing files reach a fresh worktree without ever being committed to .stim-cli.json or anywhere else in git history.