Getting started
TerminalHire matches developers to paid tasks and open-source issues, in the terminal. Developers claim a task, do it in their own editor with their own agents, and build a record of contributions other people accepted. Posters put up work against a repository they control and pay for what they accept.
Matching runs on your machine. Your matching profile does not leave it unless you
send it, with sync --push.
This page is the short way in, for both sides.
Sign in on the web
Open the dashboard and sign in with GitHub to return to your workspace. The web dashboard requires a signed-in session, even if this browser has an old local profile. Signing out returns you to the sign-in screen. New posters can create an account.
Install
npm i -g terminalhire
terminalhire init
Or the one-liner, which pins the current release:
curl -fsSL https://terminalhire.com/install.sh | bash
init walks seven steps: GitHub sign-in, seeding the local job cache, a personal
interest, the ambient spinner, connection counts in your statusline, the MCP
server, and th:// claim links. You can decline six of them. Seeding the cache
is the exception — it downloads the job index anonymously and does not ask.
th is a short alias for terminalhire everywhere.
Find work
| Command | What it does |
|---|---|
terminalhire work [--priced] |
First-party paid tasks; --priced adds scraped paid open-source supply |
terminalhire bounties [--priced] |
Same as work |
terminalhire contribute |
Open-source issues ranked by winnability, on unless you opt out |
terminalhire jobs |
Roles, scored on your machine |
terminalhire refresh |
Pull the current index and match again |
terminalhire inbox |
Connection chats and intro requests |
Do a paid task
Four commands, in order. claim start gives you the whole repository at the
commit the posting names.
terminalhire claim preview <taskId|issueUrl> # read it; claims nothing
terminalhire claim record <taskId|issueUrl> # record the claim
terminalhire claim start <id> # clone, branch, ready to work
terminalhire run # verify your diff in a container
terminalhire claim submit # push the branch, open the PR
claim submit is the only step that pushes anything.
run needs Docker running, and the network for its first clone. It answers with
its exit code: 0 the tests were green, 1 we judged the work and it is not
green, 2 we rendered no verdict — our environment could not run it, so nothing
was said about your work.
terminalhire link connects the terminal to your account. Commands that speak for
you — claim note, claim resolve, connect, hub, decline — ask for it first.
Paid postings are limited to approved developers while the beta runs. Claiming one
without approval answers paid-work-not-approved and changes nothing; open-source
work stays open to everyone. terminalhire beta joins the invite-only beta or its
waitlist.
Post a paid task
Start at terminalhire.com/poster/start. A posting names a repository you control and the change you want. Publishing asks for three things, and says which is missing:
- the TerminalHire Poster GitHub App covering that repository,
- a saved card,
- a confirmed contact email.
A claimant gets the whole repository at the commit you posted. You read the patch they submit, and you accept or ask for changes.
From an agent, terminalhire mcp --print-config also wires a poster MCP server
with 13 tools: drafting, reading your postings and claims, publishing a draft you
reviewed, editing, withdrawing, and asking for changes. Four of them — publish,
edit, withdraw, ask for changes — need a connector you gave permission to act.
No tool and no command moves money. Accepting finished work, releasing funds and refunds happen in the browser, signed in as you, or automatically on a posting that accepts work after a missed deadline. The route that records a verdict refuses anything but a browser session.
Where it shows up while you work
- Claude Code: spinner verbs, and a statusline carrying counts — unread chats, intro requests, approved claims, notes from a poster, open paid postings. Job matches and scores never appear there.
- VS Code, Cursor, Windsurf: a quiet status bar item with the same counts and a hover card of your top matches.
- Any MCP editor:
terminalhire mcp --print-configemits config for VS Code, Cursor, OpenAI Codex CLI, Gemini CLI and Claude Code. See MCP.
Connect, don't broadcast
Matching with other developers and posters is double opt-in: nobody sees you until you consent, an intro needs a typed yes from both sides, and chat is end-to-end encrypted — the server stores ciphertext it cannot read. Details in Privacy architecture.