Run real shells inside a workspace, and share the setup, run, and archive scripts that give every workspace the same workflow.
The Terminal is the bottom panel of a workspace, and it stays with you across Chat, Review, and Checks. Its tabs hold three kinds of thing:
git or npm test in the worktreeProject scripts are per-repository commands that give every workspace the same workflow. There are three kinds:
Each workspace gets its own block of ports, so parallel run scripts never fight over one address.
Scripts live in the repository's committed .cohalen/settings.toml, which every
worktree checks out. That makes the workflow a team asset: a teammate launching a
workspace on the same repository gets the same setup and run.
The second file is yours: uncommitted, per repository, and it overrides the first. A workspace can also carry its own edits to either in its worktree, which apply to it alone.
The two files take the same shape. The three scripts live under [scripts], and
merge_strategy sits at the top level:
| Key | Value | Default |
|---|---|---|
setup | a shell command | none |
run | a shell command | none |
archive | a shell command | none |
merge_strategy | squash, rebase, or merge | squash |
Settings resolve through fixed layers, each one overriding the one below it, key by key:
.cohalen/settings.toml, shared with the team.cohalen/settings.local.toml, an uncommitted personal per-repo overrideSettings shows each value next to where it came from, so "this is the default" and "the repo overrides this" stay apart. Secrets never ride a layer. API keys live in the OS keychain and nowhere else.