GIT mode and Cowboy mode

Friday runs in one of two modes. The mode is picked at startup based on where you launch from. You can't switch mid-session; restart with the right flag.

Which mode am I in?

  • Launched in a git repo, no flags: GIT mode.
  • Launched outside a git repo: Cowboy mode (auto-fallback).
  • Launched with friday --cowboy (or -c): Cowboy mode.

Friday's header shows the current branch in GIT mode. In Cowboy mode there's no branch line.

What changes between them

GIT modeCowboy mode
Thread isolationEach thread runs in its own worktree on friday/thread/<id>All threads share Dispatch's directory
BranchesEach thread on its own branchNone
Merge modelAcceptThread queues a cherry-pick onto your current branchNo merging; changes land in place
/base-branchAvailableNot available
/pr-stackAvailableNot available
/diff modalReads git status and git diffAvailable, limited
GitHub PR toolsDispatch can create and update PRsNot exposed
Parallel workReal isolation, real parallelismThreads exist but share the directory; risk of stepping on each other

When to use GIT mode

Almost always. GIT mode is the path the rest of these docs assume. Use it when:

  • You're working in a project that has a git history.
  • You want each piece of work on its own branch.
  • You want to run more than one thread at a time.
  • You want to open PRs from inside Friday.

This is the default. You don't need a flag.

When to use Cowboy mode

Use it when there's no git repo, or a repo would get in the way: scratch directories, config files, one-off scripts. See Cowboy mode for the full list and the gotchas.

Trade-offs

GIT mode buys you isolation at the cost of more git activity. Every thread is a real branch with real commits. If you abandon a thread, the branch may stay around (Friday keeps it if there are commits ahead of source). That can leave behind friday/thread/<id> branches you'll want to prune from time to time.

Cowboy mode is faster to spin up (no worktree creation, no branch creation) but you lose the safety net. Two threads editing the same file will overwrite each other; there's no merge queue to catch it. Treat it as single-threaded.

Read next