cohalen

Terminal and Project scripts

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, persisting across Chat, Diff, and Checks. Its tabs hold three kinds of surface: interactive shells you type into (for ad-hoc git or npm test runs in the worktree), the streamed output of the managed Project scripts, and a read-only activity feed.

Project scripts

Project scripts are per-Repository commands that give every Workspace the same workflow, in three kinds:

  • Setup runs once on a Workspace's first Turn: install dependencies, generate files. Its output streams inline in the Chat, so the first reply and the environment coming up read as one sequence.
  • Run is the long-running process (app, server, watcher) started by the Run button, with a Stop control and the Workspace's preview Port.
  • Archive runs before a Workspace is archived, for cleanup that lives outside the worktree.

Each Workspace is allocated 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 who launches a Workspace on the same Repository inherits the same Setup and Run without copying anything. A Workspace can also carry its own edits to the file in its worktree, scoped to that Workspace alone.

Where a setting comes from

Settings resolve through fixed layers, each overriding the one below it, key by key:

  1. Built-in defaults
  2. User config, global to your machine
  3. The Repository's committed .cohalen/settings.toml, shared with the team
  4. .cohalen/settings.local.toml, an uncommitted personal per-repo override
  5. Cohalen-managed config kept outside any worktree (the Sandbox profile lives here)

The Settings surface shows each value with its source, so "this is the default" and "this is overridden by the repo" stay distinguishable. Secrets never ride a layer: API keys live in the OS keychain only.


Next: The sandbox, the boundary each agent runs inside.

On this page