Start
Quick start
1. Install
brew install hev/tap/factory
gh auth login
The formula brings tmux, gh and jq with it. macOS only: this is launchd,
tmux and the login keychain, so there is no Linux build to fall back to.
You also need claude, logged in. The factory ships no model and never sees
your API keys. Reception, the loop, and every worker it dispatches run claude
on the subscription you already hold. Every agent is a tmux session, which is
why you can attach to any of them mid-task and take over by typing. Run it on a
Mac that never sleeps, because a laptop that sleeps stops the loop mid-beat. A
Mac mini is the intended shape.
2. Run the factory
factory
The first run has no checkout to read, so it asks before cloning the repo to
~/workspace/factory and starts from there. The contracts a factory runs on
live in that checkout and are yours, so changing how a factory operates is a
commit rather than a setting. Keep the checkout alongside your work and never
inside it. It is generic machinery, and your own repos and Linear team stay the
source of truth for plans, issues, and pull requests.
There is nothing to configure by hand. Reception goes on duty in a tmux session, you land in the conversation, and it walks you through your first factory from there.
3. Decide how you approve
Approving is the one thing that stays yours, and there are two ways to do it. Reception asks which one you want while it sets the factory up.
Out of the box it is merging a pull request that adds the plan to
plans/active/. Nothing in the factory merges into that branch, which is why
the merge means something. Turn on branch protection requiring a pull request
and that stops being a rule the factory follows and becomes one it cannot break.
Linear is better, and setup offers it. Moving an issue into your team’s approved state is one tap from a phone, and approving on the way somewhere beats approving next time you are at a machine. It costs one OAuth:
claude mcp add --transport http --scope user linear https://mcp.linear.app/mcp
Then /mcp in any claude session to authenticate. Your team needs a workflow
state that means approved, which on a default Linear board is Todo:
Backlog already means captured-but-undecided, and Todo means
decided-not-started. Setup asks which one you mean and never guesses. Skip it
now and add it later, because it is two fields in the config.
If you already use Linear for something else and this factory is for a different
workspace, register a second server under its own name, linear-acme against
the same URL, and authenticate that one against the other workspace. MCP logins
are keyed by server name, so both work side by side and the config names which
one this factory uses.
4. In another pane, watch the floor
factory
That is the picker, and it is the screen you leave open: reception, the gaffers, and every worker they dispatched.
acme ↵ attach ^d details ^g tell gaffer ^x stop one · type to filter
💁 reception the front desk — ask anything
── sub-agents ──
● gaffer-acme acme claude working dispatching the index worker
●! worker-acme-index acme ~index claude working npm test has failed the same way …
○? worker-acme-search acme HEV-14 rfc-search claude waiting asks which index to rebuild first
↵ on any row attaches to that session, so watching becomes steering the moment
you start typing. Most workers carry no issue at all, because machine work never
becomes one, so that column is blank except where a person is already involved.
From source
Working on the factory itself, or running an unreleased revision:
git clone https://github.com/hev/factory ~/workspace/factory
cd ~/workspace/factory
./factory list
This one needs Go. ./factory builds the picker and copies it into your
$GOBIN so factory works from any directory, and on a fresh clone it reports
nothing configured, which is right. Set FACTORY_NO_GLOBAL_INSTALL=1 to leave
your $PATH alone.