// long-horizon work, on hardware you own

Stop prompting Claude directly.

hev factory autonomously implements long-horizon tasks on your Mac.

You merge an RFC. A parent agent wakes on a timer, works out what is still missing, dispatches coding agents across your repos, checks what they built, and opens the pull requests. You read the report.

acme   \u2191 attach   ^x stop one   \u00b7   type to filter

\ud83d\udc81 reception      the front desk \u2014 ask anything
\u2500\u2500 sub-agents \u2500\u2500
\u25cf  gaffer-acme          acme                          claude  working    \u273b Brewed for 41s
\u25cf\u26a0 worker-acme-index    acme              ~index      claude  working    \u23fa Bash(npm test)
\u25cb  worker-acme-search   acme     HEV-14   rfc-search  claude  idle 12m   \u23fa Ready for review.

\ud83d\udea8 stop the line  stop 3 agent(s)

Everything the factory is doing is a row. A dot says whether an agent is streaming output or waiting on you, a warning says which worker has been running four hours without opening a pull request, and Enter drops you into any of them mid-task. The last row is the andon cord.

Three components.

Everything in the repository is one of them made concrete: a shell script for the picker, a markdown charter for reception, and a markdown contract plus a launchd plist for each gaffer. Every piece of durable state is a file under ~/.factory.

The picker

The front door, and most days the only screen you need. Every session the factory owns, each carrying the plan step it is on and what it is doing right now. Enter attaches, typing filters, and one row stops every agent on the machine.

Read the docs

Reception

The desk you talk to. On a fresh clone it walks you through your first factory, then answers for the whole floor. Bring it a half-formed idea and it argues back until there is an RFC worth approving. It never dispatches, never merges, and never approves.

Read the docs

The gaffer

The parent agent for one factory. Each beat reads the RFCs you approved in Linear, breaks them into tasks, dispatches a worker per task into its own tmux session, and reports what needs you. Its instructions are a markdown file you edit.

Read the docs

Many repos, and every model on its own CLI.

Multi-repo from the jump

A factory's scope is a list of repositories, not a single one. One merged RFC becomes issues and pull requests across every repo it touches, and each repo gets its own concurrency lane so two agents never work the same tree at once.

This is the case a single agent session handles worst. A feature that spans an API, a client, and a docs site is three working trees, three test suites, and an order the changes have to land in.

One harness, and one thing to install

Every agent runs claude — the desk, the gaffer, and every worker it dispatches. One harness is one thing to install and one subscription to hold. What the gaffer chooses per task is the model and the reasoning effort: the heaviest model where the shape of the work is unclear, a smaller one where the answer is known.

It ships no model and never sees your API keys. Every agent is a tmux session, so you can attach to any of them mid-task and take over by typing.

You approve going in. You review coming out.

  1. Talk to reception about something you want, or skip that and write it up yourself.
  2. An RFC lands as a pull request. You merge it, and that merge is the approval.
  3. The gaffer's next beat reads the merged RFC, breaks it into tasks, and dispatches a worker for each one.
  4. Workers open pull requests. You review and merge them, or the gaffer does inside the narrow band you granted it.

Every worker runs interactive in its own named tmux session, so you can attach to one mid-task and take over.

hev factory cloud

The open version needs a Mac that never sleeps, and it runs your agents as you, with your tokens. The cloud version runs the same loop without either requirement. Leave an email and we will tell you when it opens.

esc