Skip to content

popey/Marshroom

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Marshroom

My own workflow to use multiple Claude Code sessions & projects.

If you juggle issues across multiple repos and use Claude Code to do the actual coding, Marshroom is the glue that makes them talk to each other. You pick issues in an app, Claude Code picks them up with full context, and a shared state file keeps everything in sync β€” from branch creation to PR merge.

What it is

The problem: you have GitHub issues scattered across repos, you're using Claude Code as your coding agent, and the ceremony of "find issue, create branch, load context, push, make PR, close issue" is death by a thousand clicks. Multiple repos and multiple agent sessions drove me crazy due to the context switching.

Marshroom is three things that share one JSON file (~/.config/marshroom/state.json):

  1. A macOS menu bar app β€” browse issues across repos, add them to a queue, create new issues with AI-generated titles
  2. A CLI tool (marsh) β€” tmux HUD integration, status management, IDE launcher (tmux shortcut)
  3. Claude Code skills β€” /start-issue & /create-pr automate the branch and PR lifecycle

The state file is the bridge. The app writes to it, the CLI reads and writes to it, the skills read from it. Everyone stays in sync through atomic file operations.

The GOAT🐐 Flow

The whole workflow is five steps: Draft, Inject, Execute, Review, Ship.

1. Draft β€” Open Marshroom. Type a rough idea like "users can't log in with SSO when MFA is enabled" into the issue composer. Hit Cmd+Enter β€” Claude Haiku turns it into a clean title. Create the issue, add it to your queue. Status: soon.

2. Inject β€” In your terminal, inside the project repo:

/start-issue 42

This checks out main, pulls, creates HotFix/#42 (or Feature/#42 depending on the title), injects the full issue body into context, and sets status to running. Your tmux HUD updates to show πŸ„ #42 Fix SSO login [Running].

3. Execute β€” Claude Code works on the issue with full context. You code alongside it or let it drive.

4. Review β€” When the work is done:

/create-pr

This pushes the branch, creates a PR with Closes #42 in the body, includes the original issue description for reviewer context, and sets status to pending. Pop open your IDE with Prefix+Ctrl-p (PyCharm) or Prefix+Ctrl-v (VSCode) in tmux to review.

5. Ship β€” Merge the PR on GitHub. The Marshroom poller detects the issue closure and automatically marks it completed, then cleans it out of your queue.

Quick Start

Prerequisites

Requirement Notes
macOS 14.0+ (Sonoma) Needed for @Observable and MenuBarExtra
GitHub PAT repo scope. Generate at github.com/settings/tokens
Anthropic API key For Smart Ingestion. Get at console.anthropic.com
gh CLI brew install gh && gh auth login
jq brew install jq
tmux brew install tmux
Claude Code npm install -g @anthropic-ai/claude-code

Automated install

git clone https://github.com/vkehfdl1/Marshroom.git && cd Marshroom
./install.sh

This installs the macOS app, symlinks the marsh CLI, sets up the tmux plugin (including tpm), and prints instructions for Claude Code skills. Run ./install.sh --check to verify dependencies without making changes, or pick individual components:

./install.sh --app          # macOS app only
./install.sh --cli          # marsh CLI only
./install.sh --tmux         # tmux plugin only
./install.sh --skills       # show per-project skills instructions
./install.sh --cli --tmux   # combine flags

Manual install

Click to expand manual installation steps

Build the app

xcodebuild -project Marshroom/Marshroom.xcodeproj \
  -scheme Marshroom \
  -configuration Debug build \
  CODE_SIGN_IDENTITY="-" \
  CODE_SIGNING_ALLOWED=YES

The built app ends up in build/Build/Products/Debug/Marshroom.app.

Install the CLI

Add the cli/ directory to your PATH:

# In ~/.zshrc or ~/.bashrc
export PATH="$PATH:/path/to/Marshroom/cli"

Verify with marsh help.

Set up tmux

Install tpm if you haven't, then add to ~/.tmux.conf:

set -g @plugin 'vkehfdl1/Marshroom'
set -g status-right '#{marshroom_status} | %H:%M' # Optional

# Keep at the very bottom
run '~/.tmux/plugins/tpm/tpm'

Press prefix + I to install the plugin. This gives you the status bar HUD, per-pane borders, and IDE keybindings (Prefix+Ctrl-p for PyCharm, Prefix+Ctrl-v for VSCode).

Install skills

In each project you want to use with Marshroom:

npx skills add https://github.com/vkehfdl1/Marshroom/tree/main/marshroom-skills

First run

  1. Open Marshroom.app β€” enter your GitHub PAT on the onboarding screen
  2. Add your repos (search by owner/repo)
  3. Optionally configure your Anthropic API key in Settings β†’ AI for Smart Ingestion
  4. Add issues to your cart and start working

More docs

  • User Guide β€” full installation walkthrough, GOAT workflow details, CLI reference, troubleshooting
  • Internal Architecture β€” technical deep dive for contributors and AI agents

License

MIT

Acknowledgements

The project name Marshroom is inspired by amazing and talented singer Olivia & Danielle Marsh sisters🌻

About

🏁 Pit Stop for Claude Code Heavy user πŸ‘– Simple workflow for multiple Claude Code Session based on Github issue

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Swift 71.8%
  • Shell 28.2%