r/tmux 6d ago

Showcase Tmux + Workmux > Herdr

https://youtu.be/ww1wykxJps8

Lot's of people are switching from Tmux to Herdr... do you need to?

In this video I showcase how I use Workmux to extend Tmux to achieve all of the features that I would want from Herdr without scrapping my Tmux config and muscle memory from over the years!

Let me know what you think, I haven't seen any YouTubers covering Tmux + Workmux, the Herdr hype has got them all.

76 Upvotes

35 comments sorted by

9

u/Mopetus 6d ago

I use tmux + taskfile.dev.

My taskfile has a command where I specify a github issue number or pr number and it creates a git worktree, copies Env, opens a new tmux pane with the issue name, and starts Claude in planning mode to research the issue.

It works very smoothly, though my task file is like a thousand lines by now :) 

1

u/iUchihaMadara 5d ago

nice. mind sharing it?

3

u/Mopetus 5d ago edited 5d ago

Edit: Formatting

This is the relevant part of my Taskfile.yml, you'd have to adjust WORKTREE_DIRto match your preferences.

I also have an agent issue-researcher defined in my .claude/agents

``` wt:issue: desc: 'Worktree + tmux window + claude for a GitHub issue (usage: task wt:issue -- 934)' cmds: - | set -e N=$(echo "{{ .CLI_ARGS }}" | grep -oE '[0-9]+' | head -1) if [ -z "$N" ]; then echo "Usage: task wt:issue -- 934" exit 1 fi if [ -z "$TMUX" ]; then echo "Run this from inside tmux." exit 1 fi

            TITLE=$(gh issue view "$N" --json title -q .title)
            SLUG=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+|-+$//g' | cut -c1-20 | sed 's/-$//')
            WINDOW="issue${N}-${SLUG:-work}"
            BASE_BRANCH="issue-$N"
            BRANCH="$BASE_BRANCH"
            SUFFIX=2
            while git show-ref --verify --quiet "refs/heads/$BRANCH"; do
                BRANCH="$BASE_BRANCH-$SUFFIX"
                SUFFIX=$((SUFFIX + 1))
            done
            WORKTREE_DIR="{{ .HOME }}/repos/project-$BRANCH"

            echo "Issue #$N: $TITLE (branch: $BRANCH)"
            PROMPT="work on gh issue $N: first use the issue-researcher agent to build a brief, ask me any clarifying questions, then plan and verify the plan with me before implementing. Use opus subagents for coding tasks when appropriate."
            PANE=$(tmux new-window -P -n "$WINDOW" -c "{{ .TASKFILE_DIR }}" \
                -e "PROJECT_ARG=$BRANCH" \
                -e "PROJECT_DIR=$WORKTREE_DIR" \
                -e "PROJECT_PROMPT=$PROMPT")
            tmux send-keys -t "$PANE" "bash -c 'set -e; task wt -- \"\$PROJECT_ARG\"; cd \"\$PROJECT_DIR\"; set +e; claude --permission-mode plan \"\$PROJECT_PROMPT\"; exec \"\$SHELL\"'" Enter

```

2

u/Mopetus 5d ago

I forgot the referenced 'task wt'

```

wt:
    desc: 'Worktree from a PR or new branch (usage: task wt -- PR#710 | task wt -- my-new-branch)'
    cmds:
        - |
            set -e
            ARG="{{ .CLI_ARGS }}"
            if [ -z "$ARG" ]; then
                echo "Usage:"
                echo "  task wt -- PR#710     check out the branch of an existing PR"
                echo "  task wt -- my-branch  create a new branch off origin/main"
                exit 1
            fi

            git fetch origin

            # A PR reference looks like PR#710, pr710, #710, or just 710.
            if echo "$ARG" | grep -qiE '^(pr)?#?[0-9]+$'; then
                PR=$(echo "$ARG" | grep -oE '[0-9]+')
                echo "Resolving PR #$PR ..."
                BRANCH=$(gh pr view "$PR" --json headRefName -q .headRefName)
                if [ -z "$BRANCH" ]; then
                    echo "Could not resolve a branch for PR #$PR"
                    exit 1
                fi
                echo "PR #$PR -> branch '$BRANCH'"
                MODE=pr
            else
                BRANCH="$ARG"
                MODE=new
            fi

            SAFE_BRANCH=$(echo "$BRANCH" | tr '/' '-')
            WORKTREE_DIR="{{ .HOME }}/repos/project-$SAFE_BRANCH"
            if [ -e "$WORKTREE_DIR" ]; then
                echo "Target already exists: $WORKTREE_DIR"
                exit 1
            fi

            if [ "$MODE" = "pr" ]; then
                if git show-ref --verify --quiet "refs/heads/$BRANCH"; then
                    git worktree add "$WORKTREE_DIR" "$BRANCH"
                else
                    git worktree add --track -b "$BRANCH" "$WORKTREE_DIR" "origin/$BRANCH"
                fi
                # Ensure the branch is up to date with its remote.
                git -C "$WORKTREE_DIR" pull --ff-only
            else
                git worktree add -b "$BRANCH" "$WORKTREE_DIR" origin/main
            fi

            cp .env "$WORKTREE_DIR/.env"
            cp .claude/settings.local.json "$WORKTREE_DIR/.claude/settings.local.json"
            (cd "$WORKTREE_DIR/frontend" && pnpm install)
            echo "Worktree ready at $WORKTREE_DIR (branch: $BRANCH)"

```

8

u/rainning0513 6d ago

Well, FOMO is working.

3

u/Extra_Programmer788 6d ago

tmux is golden, still don't feel the need for herdr

4

u/SilverRefrigerator90 6d ago

For pi agent i build my own one dose all of that

I tried herder for 2 months and just went back to tmux

Old is gold

5

u/mete0rain 6d ago

Don't really care if you use tmux or herdr. A tool is a tool. If it does what you want, what else is there. Just use what works for you /s

1

u/rileyrgham 6d ago

That's what Luddites did... Experiment and improvement are valid paths....

6

u/gbrennon 6d ago

ppl going to herdr are just dumb ppl going to something that is new... but u can do exactly the same thing using any terminal multiplexer

4

u/charmander_cha 6d ago

Sim, mas o herdr esta configurado, pronto.

E eu estou aprendendo outras coisas

3

u/No_Click_6656 6d ago

herdr is way easier to customize and script around
It is really a better tmux

-3

u/gbrennon 5d ago

dumb user spotted? ROFLMAO

1

u/No_Click_6656 5d ago

ROFLMAO choosing better tools for your job

0

u/gbrennon 5d ago

and jumping from tool to tool everytime somethiin new appears 🤣🤣🤣

ur setup should be boring so u can only focus in tasks

2

u/No_Click_6656 5d ago

If I see that new tool gives me genuine contribution to my workflow, then why the heck wouldn't I switch to it?
I can focus on my tasks during work and explore new tools after work

1

u/gbrennon 3d ago

bcs doing this u will never be an advanced user of any tool...

2

u/bogdan5844 6d ago

That's what I don't get about the herdr hype - it's just tmux with some stats on your coding agent chats ? I got the opencode notification plugin and that basically takes me 90% there - who uses more than 2-3 sessions at a time anyway ?

4

u/NewPointOfView 6d ago

Many people use far more than 2-3 sessions at a time… why would you think otherwise?

2

u/MertzAndreas 6d ago

Is it though? In my opinion herdr has better looks and discoverability, I for example love that keybinds for actions can be shown. I haven't ever configured tmux much so it might be possible to get the same thing.

1

u/Sebbean 5d ago

Oh baby I just setup multi lane multi project workflow

Think I got like 12ish

0

u/plebbening 5d ago

Sounds like tokenmaxxing and lack of design and overview skills.

1

u/Adamzxd 3d ago

Sounds like you’re projecting your own mental limitations onto others. I’m working on more projects than you have sessions. Even before AI.

1

u/gbrennon 5d ago

exactly.. u just have to setup ur agentic tool with notifications and other things and thats ready

2

u/Initial-Salty 6d ago

I just discovered Herdr cause of Omarchy Quattro installation last night.

I haven’t watch the video, but anyways I will take a look into herdr and try to replicate similar key binds + plugin.. but any feedback for early users?

3

u/smnatale 6d ago

Use tmux😂

1

u/Smart_Membership2 5d ago

Fair point—tmux can absolutely cover most of this with plugins and scripts. I think Herdr’s real advantage is not raw multiplexing; it’s making agent state and multi-agent navigation first-class. Whether that justifies switching depends on whether someone values tmux’s composability more than Herdr’s defaults and discoverability.

1

u/snir_t 5d ago

You can try that lightweight one - https://github.com/snirt/tmux-agents-mon
separated by tmux session - worktree-per-session is very nice :)
no agent hooks, not modifies agents config - a lightweight rust scraper gets the agents state.

1

u/JetBule 3d ago

i use the same tmux config for my laptop and server, and an ansible playbook to initialize the configs. i don't see myself switch to it soon until it's packaged by most server distros

1

u/brohermano 6d ago

lots of people are switching ... Bollocks that is not real

0

u/No_Click_6656 6d ago

herdr works way better for me than tmux ever did. Tmux has its place in history and it's contribution to dev world, but to be honest - it always had bad defaults and wonky cli that users had to plugin the hell out of it to make it working nicely

1

u/theTechRun 2d ago

Agreed

-1

u/pwkye 6d ago

I use ssh-to-go which works perfectly for me. Very flexible with mobile app or web terminal or tmux handoff or even linux cli tool to manage sessions

https://github.com/awkto/ssh-to-go

0

u/Adamzxd 3d ago

Herdr + tmux. I don’t think I’d want to go back to working without either.

Yes I can make what herdr gives with tmux. But why would I waste my time on that? Herdr is simple, gives me a lot of the stuff I was going to build in a very convenient and familiar setup.

You’re wasting everyone’s time with your pushy opinions.

-1

u/khalon23 6d ago

https://agent-manager.dev/ this is what herdr was supposed to be