workon 0.8.0

Development workspace launcher with Zellij, Claude CLI, and branchdiff
Documentation

workon

Development workspace launcher using Zellij.

Opens a project directory in a 3-pane Zellij layout:

  • Left top (80%): Claude CLI
  • Left bottom (20%): Terminal
  • Right (50%): branchdiff

Dependencies

Installation

brew install michaeldhopkins/tap/workon

Or build from source:

cargo install workon

Usage

workon                # open current directory
workon mbc            # open ~/workspace/mbc
workon -n mbc         # force new session (destroys existing)
workon -w mbc         # ephemeral jj workspace (parallel session)

Workspace mode (-w)

Creates an ephemeral jj workspace in ~/.worktrees/ for running a second independent session on the same repo. The workspace is cleaned up when the Zellij session closes.

What it does:

  1. Initializes jj (colocated) if the project only has git
  2. Creates a jj workspace branched from trunk (main/master)
  3. Clones gitignored files (build artifacts, node_modules/, target/, etc.) using APFS clonefile(2) on macOS for near-instant copy-on-write directory cloning, with cross-platform reflink fallback via clonetree
  4. For Rails apps: creates an isolated test database and loads the schema
  5. Launches a Zellij session in the workspace
  6. On exit: prompts to bookmark uncommitted work, forgets the jj workspace, drops any test database, and removes the directory in the background

The primary session (workon mbc) is unaffected — it works directly in the project directory as before.

Limitations

  • The workspace shares the development database with the primary session. Don't run migrations or the Rails server from a workspace.
  • parallel_rspec uses shared test databases. Use bundle exec rspec in the workspace for isolated specs.

Custom layout

The default Zellij layout is embedded in the binary. To override it, create ~/.config/workon/layout.kdl with your preferred layout.

Session management

Sessions are named after the directory basename. Running workon mbc twice reattaches to the existing session. Use -n to start fresh. If the zellij server is unresponsive, -n will detect the hang (5s timeout), kill the stuck server process, and launch a fresh session.

Workspace sessions are named <project>-ws-<id> (e.g., mbc-ws-a1b2c3) and don't collide with primary sessions.

Claude Code setup

To skip the workspace trust prompt and auto-allow file operations in worktrees, add to ~/.claude/settings.json:

{
  "permissions": {
    "allow": [
      "Edit(~/.worktrees/**)",
      "Write(~/.worktrees/**)",
      "Read(~/.worktrees/**)"
    ]
  }
}

Workspace trust is also pre-seeded in ~/.claude.json automatically on each workon -w launch.

Tips

  • Click URLs: Cmd+Shift+Click to open hyperlinks (Shift bypasses zellij mouse handling)
  • Locked mode: Zellij starts in locked mode. Press Ctrl+G to unlock for Zellij features.