Workset

Workset is a Go CLI for managing multi-repo workspaces with linked Git worktrees by default. It captures intent ("these repos move together") and keeps multi-repo work safe, explicit, and predictable.
Why Workset
- Workspaces first: treat related repos as a single unit of work.
- Linked worktrees by default: branch work happens in isolated directories without duplicating repos.
- Explicit remotes: base vs write remotes are always deliberate.
- Templates: reusable repo sets that expand into workspace config.
- Safe defaults: no destructive actions without explicit flags.
Status
Workset is in active development. Current commands focus on workspace creation, repo add, status, and groups/templates. Branch/worktree workflows are next.
[!WARNING]
This project is under active development; interfaces and behavior may change without notice.
Quickstart
Install (recommended):
brew tap strantalis/homebrew-tap
brew install workset
Alternative (Go install):
go install github.com/strantalis/workset/cmd/workset@v0.1.0
Create a workspace and add repos:
workset new demo
workset repo add git@github.com:your/org-repo.git -w demo
workset status -w demo
Templates:
./workset group create platform
./workset group add platform repo-alias
./workset group apply platform -w demo
Sessions (tmux/screen/exec):
./workset session start demo -- zsh
./workset session attach demo
./workset session show demo
./workset session stop demo
Concepts
- Workspace: a directory with
workset.yaml and .workset/ state.
- Repo sources: local paths stay put; URL clones land in
~/.workset/repos (configurable).
- Worktrees: worktrees live under
<workspace>/<repo> by default.
- Remotes:
base (truth) and write (fork/origin).
- Templates: global repo sets applied into a workspace.
Docs
Docs are built with MkDocs + Material. The site config is mkdocs.yml, markdown content lives in docs/, and the published site is workset.dev.
Local dev (requires uv):
make docs-serve
Roadmap
- Branch create/checkout + worktree management
- Fetch/pull/exec across repos
- Scoped status and JSON output