Harbor

Run ten tasks.
Keep track of all of them.

Harbor keeps every Claude session, PR and ticket in one list, and tells you which one needs you next.

Works with

macOS 12 or later·Signed and notarized·Free

Or let Claude Code set it up

Read the prompt
Set up Harbor on this Mac (https://harbor.harborcode.workers.dev). It's a desktop
app that runs Claude Code sessions from Linear tickets and GitHub PRs.

1. Confirm this is macOS 12 or later and check `uname -m`. Download the matching DMG
   to a temp folder:
   - arm64: https://pub-e423b44049e24d88ab51470554d18364.r2.dev/Harbor-arm64.dmg
   - x86_64: https://pub-e423b44049e24d88ab51470554d18364.r2.dev/Harbor-x64.dmg
   Mount it, copy Harbor.app to /Applications, unmount it and delete the DMG.
   If Harbor is already installed, ask me before replacing it.

2. Check for `claude`, `git` and `gh`. `git` adds branches and worktrees, and `gh`
   adds PRs and checks. If `gh` is installed, run `gh auth status`. If I'm not logged
   in, ask me to run `gh auth login` myself.

3. Open Harbor and wait for it to start.

4. Tell me to connect Linear in Harbor → Settings → Accounts. Never ask me to paste
   a token into this chat.

Finish with a summary of what you installed, and anything left for me to do.
  • Runs real Claude Code sessions
  • Human in the loop where it matters
  • Auto-classifies the next step
  • Configurable to how you work
Interactive demo
Harbor
0 running

Why it's worth running

Claude Code is fast enough that the bottleneck is you: remembering which terminal was waiting, which PR went red, which one got review comments an hour ago. Harbor keeps track so you don't have to.

A classifier decides what needs you

Claude Haiku reads each session's last message alongside the PR's checks, review comments and git state, then picks one button per task: Fix CI, Address comments, Merge, Answer. Hover the button to see its reasoning.

Real Claude Code sessions

Not a wrapper or a chat box. Every task runs the actual claude CLI in a real terminal, with your settings, your MCP servers and your subscription. Each task works in its own git worktree, so parallel sessions never collide.

Sessions survive anything

Sessions live in tmux, so quitting Harbor doesn't stop them; relaunch and they're reattached. A hung session restarts onto the same conversation with claude --resume, and a shelved task picks up right where it left off.

Linear and GitHub, built in

Linear tickets assigned to you show up as tasks; press Work and Claude starts with the ticket as its prompt. PRs, checks and review comments come from GitHub through your own gh login. Harbor holds no GitHub token.

Configure all of it

One JSON file with schema autocomplete. Every action-bar button is a prompt, a /skill or a shell line with ${branch}, ${ticket} and ${prUrl} filled in, so your own workflows become buttons too. Set the model, effort and permission mode for sessions, the board's sections, and the classifier's model and daily budget. Or just open a session in the config folder and tell Claude what to change: Harbor leaves a CLAUDE.md there that explains every key.

Draw how the work should go

A workflow is a flow chart of your buttons. In auto mode, Harbor moves a task only along the arrows and checks each step against what actually happened, so work Claude already did gets passed without pressing its button.

checks pass checks fail at most 3 times ⧉Run testsown session · ✓/✕ ⌂Draft PRmain session ◷CI finishedwaits ⧉Code reviewown session · ✓/✕ ⌂Fix CImain session ■Endfinished

This is an example. Harbor doesn't come with a workflow, so you draw your own in Settings → Actions, or describe your process to Design with Claude and apply what it draws.

Your past work becomes your workflows

You've already shown Claude how you work. Click “Suggest from my history” in Settings → Actions and Claude turns your recent sessions into workflows, with the buttons they need.

It reads what you typed

Harbor pulls the prompts and slash commands from your recent Claude Code sessions, up to the last 60 days, and leaves out the tool output.

It looks for your habits

Claude finds what you ask for again and again and the order you ask for it in, then proposes a workflow for each kind of work it sees. New buttons are written in your own phrasing.

It says why

Each suggestion cites where it came from in your history, like how often you asked and in which projects. It skips buttons and workflows you already have.

You pick what stays

Nothing changes until you click Add. Untick anything you don't want first, and only what's left goes in.

Releases

Installed copies update themselves. Here is what changed.

v0.3.22 Latest
  • Auto mode follows a workflow’s flow chart and moves only along its arrows, treating each step as a checkpoint judged against the whole task, so work Claude already did is passed without pressing its button.
  • When something stands between a task and its next checkpoint, auto mode sends one prompt, auto.bridgePrompt, saying where the task is and what is missing; it replaces the fix, continue and finish prompts.
  • The Auto box needs a workflow to exist, a task’s chart locks once it is under way, and a typed task in auto mode waits up to 30 seconds for its chart to be picked before it starts.
  • Settings shows each workflow as a chart with an Edit button that opens a canvas for adding steps and waits, drawing arrows and setting conditions, exits and visit limits, and nothing is saved until Apply.
  • A task’s view shows its chart read-only, with each step’s state, where the task is, the path it took and why it moved.
  • Design with Claude in the workflow pane starts a session that knows your buttons, workflows and recent sessions and can draw a chart on the canvas for you to apply.
  • A chart step can name tools and command patterns Claude can’t use while the task is on it, and they are denied with the reason, including with skip-permissions on.
  • In auto mode, a step in its own session passes only on a run Harbor made, so Claude saying the tests pass doesn’t count and a fix after a failure runs the step again.
  • Auto mode doesn’t press a step you waved off, and warns when work has gone past a later checkpoint.
  • The “no live session” pane says the conversation is saved, recaps what the session worked on and where it ended, and offers Resume, and backlogged tasks that have run show the same recap.
  • Resume works when a task’s worktree or the shell’s directory is gone, and a task keeps its worktree when its session does a cd elsewhere.
  • A new task no longer links to a PR merged before it existed or lands straight in Done, and a done task no longer comes back to life from a new PR on a reused branch.
v0.3.21
  • Claude works out which repository a task belongs to and Harbor creates its worktree under .claude/worktrees on the ticket’s branch, restarting the task there when it is a different repo, so worktrees no longer end up in the wrong repo.
  • Worktrees are removed once their work has landed, without forcing and keeping the branch, and Resume puts a removed worktree back; tasks.worktrees and tasks.cleanupWorktrees switch this off.
  • Claude sessions can list Harbor’s tasks, add and start a new task, or start one already on the board, without taking the window’s focus.
  • A typed task gets a short title from its prompt, unless you rename it first; classifier.autoTitle turns this off.
  • A workflow can say in words when its tasks are done, with auto.done as the fallback, and auto mode stops once a task meets it and otherwise carries on past the last step.
  • A workflow step is ticked only once what it asked for has happened, such as a push, a PR or a Linear state, and shows “checking” or “not done” until then.
  • “Suggest from my history” no longer proposes workflows or buttons you already have under another name.
v0.3.20
  • Auto mode waits while a task hangs on something outside the session, like pending checks, a requested review or a deploy, showing “auto ◷” and what it waits on, and carries on when the task changes.
  • Auto mode answers Claude’s multiple-choice questions by telling it to make the call itself, and opens the question for you once it is stuck or with auto mode off.
  • An all · tickets · PRs toggle in the search box narrows the board to tickets or PRs, and a ticket with a PR shows under both.
  • A Done task with a session shows Resume on its row and in its session pane, and reopens to In progress on the same Claude session.
  • Workflow progress on a row reads “step x of y” for the step the task is on, instead of a count of steps done.
Older releases
v0.3.19
  • The ⋮ menu turns auto mode on or off for any running task at any time, and switching it on picks up from where the task is.
  • Auto mode nudges Claude once when no step is proposed, and stops with a note to you if Claude stops again with nothing done in between.
  • After you skip a workflow step, the suggested next step is the one after the last step you completed, not the skipped one.
  • Clicking a workflow step on the task strip runs its button.
  • A button can be hidden from the action bar with "hidden": true or the Hidden toggle in Settings, and workflows, auto mode and suggestions still use it.
  • Harbor links PRs to the right tasks more often, including PRs on a task’s own branch, tasks whose earlier PR was closed, renamed checkouts, ticket ids written without a hyphen, and long backlogs.
  • Number fields in Settings keep what you type, so values like 0.5 can be entered and invalid numbers are not saved.
v0.3.18
  • Auto mode carries a task through its workflow: it presses each suggested step whatever its confidence, answers Claude’s questions with “make the call and carry on”, sends a failed run back to be fixed and runs it again, and stops only when the task is done or stuck in a loop (auto.loopLimit).
  • auto.maxStepsPerTask, auto.onRunFail and auto mode’s context sources are gone.
  • Suggested next steps come from the whole action bar unless the task’s workflow ranks them; board.nextSteps is retired and ignored in older configs.
  • Settings is regrouped by task into pages of cards, with tabbed lists and the new auto mode settings.
  • Harbor links more PRs to their tasks, using PR descriptions like “Fixes ENG-1”, PRs attached in Linear, recently merged PRs, and your PRs anywhere on GitHub.
  • Suggested next steps account for unpushed commits and for steps Claude offers to do itself.
  • The download links point at the latest build instead of the oldest.
v0.3.17
  • Workflows in workflows set ordered steps for each kind of work; Harbor picks one from the ticket’s title, labels and description, and ⋮ → Workflow pins one by hand.
  • An Auto box beside Work lets Harbor press each suggested next step on its own, stopping with the reason on the row when it can’t go on.
  • Settings → Workflows edits each workflow as a diagram of steps, and the same diagram shows a task’s progress under its action bar.
  • “Suggest from my history” in Settings → Workflows proposes buttons and workflows from what you type in Claude Code, and adds only the ones you tick.
  • Ignore sits next to any suggestion, including Answer, and that same suggestion stays away until something changes.
  • Suggested next steps below classifier.nextStepMinConfidence (default 0.8) are not shown, and auto mode stops at them too; this replaces auto.minConfidence.
  • Backlogged review requests stay in Backlog after a restart.
  • Runs like Run QA on a PR waiting for your review do their own job instead of reviewing the PR.
  • Harbor’s Claude sessions know where config.json and its CLAUDE.md guide live.
v0.3.15
  • A task’s idle session stops after sessions.idleStopMinutes (default 240, 0 = never), and Resume brings it back where it left off.
  • Stray tmux sessions that belong to no task are ended after 30 idle minutes.
  • Restart takes a Backlog or Done task back to In progress.
v0.3.14
  • A sound plays when a Claude session finishes its turn.
  • Clicking a notification opens the task it is about.
  • Claude Haiku picks the suggested next button, one per task.
  • Edit the Work prompt before a session starts.
  • “Requested review” is what others ask of you; “In review” is your own open PRs.
  • Merge conflicts show only once GitHub confirms them.
  • Sync catches up when you come back after being away.
  • Stray shells on Harbor’s tmux server are cleaned up.
v0.3.13
  • Each board section reads as its own band; Backlog and Done fade further back.
v0.3.12
  • Runs are judged from their last message, and a finished run’s chip says one consistent thing.
  • Answer shows only when Claude’s last message actually ends in a question.
  • PR badges keep one color, with the PR’s state as marks beside it.
  • Reviewers show their GitHub photo.
  • Syncs every minute by default, set with one integrations.pollMs.
  • Draft PRs stay out of the Assigned feed.
v0.3.10 – 0.3.11
  • The claude-cli classifier loads your Claude settings and runs the same claude as your sessions.
  • Link PR offers your open PRs from a GitHub search.
v0.3.9
  • Board search covers each task’s chats, not just its title.
  • Action-bar runs start with the task’s context, like Work does.
  • A CLAUDE.md next to config.json, so Claude can adjust your config for you.
  • Reorder board sections in Settings.
v0.3.8
  • Open PRs link themselves to the tasks they implement.
  • Per-section next steps: choose which buttons the classifier may suggest where.
  • GitHub sync over REST with ETags, lighter on rate limits.
v0.3.7
  • New “Needs your review” section for PRs waiting on you; section order is configurable.
  • Select text in a terminal and ⌘C it, like any terminal.
v0.3.6
  • Runs keep their session after finishing; Pause ends it, clicking the tab resumes it.
  • PRs assigned to you sync in as tasks.
  • Copying from tmux reaches the system clipboard.
v0.3.1 – 0.3.5
  • Configurable action-bar buttons, and a Restart button.
  • Fixes for the packaged app: a launch crash, terminal glyphs, and launching claude through your login shell so it resolves exactly as in your terminal.
v0.3.0
  • Auto-update: Harbor downloads new versions in the background and installs them on restart.
v0.2.0
  • First release: Linear and GitHub sync, one Claude Code session per task in tmux that survives quitting Harbor, Backlog and Resume, Linear sign-in, and the next-step classifier.