skip to content
you name the files · you name the price · you read every change

Hand a coding task to a developer for a fixed price.

A failing test, a migration, a flag you keep meaning to flip. Name the files, name the price, and hand it off. The work runs on the developer's machine — their agent, their tokens — and comes back as a change on its own branch. Nothing merges until you read it.

The developers who take this work have had changes accepted by maintainers who are not them, and they can publish that record for you to read.

345 live roles + contributions · profile never leaves your machine · 7 sources · refreshed every 5 min
curl -fsSL terminalhire.com/install.sh | bash
Or follow the full install guide →
~/projects/my-appclaude code
add rate limiting to the auth endpoints
Editedsrc/middleware/rateLimit.ts
Editedsrc/routes/auth.ts
Fits your typescript + api work(esc to interrupt · 7s)
Staff Backend Eng @ Vercel· 82% match⌘-click
profile never leaves your machine · no fingerprint sent
what they can and cannot touch

The reason you can say yes to a stranger.

Handing work to someone you do not know is really a question of what they can see, and that is the part we built first. The developer never gets a copy of your repository — only the files you named, put together on our side and refused outright if we find anything secret in them. They never get the ability to push, either. What comes back returns through us and is checked against those same files: anything outside them is refused, and so is anything touching your CI setup or lockfiles. If your repo has no test workflow set up for this, we say so — the change waits on your review rather than on a build.

  • You choose what they seeper posting, the developer sees the issue text alone, or the files you name. Your call, every time.
  • We check for secrets firstwe put the files together on our side and check them, then hand them over — nothing is pulled straight out of your repo.
  • Checked against the files you namedthe change comes back through us and is checked against the files you named. Anything outside them is refused — and so is anything touching your CI setup or lockfiles, the two ways a change turns into code running on your repo.
See how it works →
lib/patchBoundary.tsvalidated
// what stands between them and your repo
grant the files you named
scan secrets fails closed
deny any file you did not name
deny .github/workflows · lockfiles
deny push access, always
// refuse on doubt — the refusal names the file and the hunk
mechanism

Two sides. One boundary between them.

The pool lives on the server. Matching lives on the developer's machine. Nothing a founder did not declare leaves their repo, and nothing a developer did not approve leaves theirs.

for founders

You have work you will never get to.

  1. 01Say what needs doingA failing test, a feature behind a flag, a migration nobody has time for. Name the files it touches — or just hand over the issue text. You set the price.
  2. 02A developer picks it upThey see the files you named and nothing else. We check those files for anything secret before they leave, and stop the hand-off if we find any. No copy of your repository, and no way to push to it.
  3. 03You read the change and decideWhat comes back is checked against the files you named. Anything that reaches outside them is refused. Accept it or reject it — the record of which one you chose is what makes the next hand-off easier.
Post your first task →
for developers

You have an agent and nothing to point it at.

  1. 01Install the pluginOne bash line installs the Claude Code plugin and CLI. Run terminalhire init for one-time consent — it can sign you into GitHub for richer matches, or skip it. No website account needed.
  2. 02Matched work finds youOpen-source issues worth merging, live roles, and founders’ paid tasks — matched against a local profile that never leaves your machine. Our server never sees your stack or identity.
  3. 03Ship it, and keep the recordYou work the job in your own environment, with your own tools. When a maintainer or a founder accepts it, that acceptance lands on your record — attested by someone who is not you.
Install the plugin →
proof of work

Anyone can claim senior. You can prove it.

Every job leaves a record of whether the work was taken, and it faces both ways. To a founder it is a filter — the beginning of being able to hand work to someone without reading every line first. To a developer it is a portable history of work that strangers accepted, attested by the maintainers who merged it. Your résumé tells your story; this is the part of it someone else signed off on, one click from the code.

  • Someone else merged your codea maintainer on an established repo (≥50★, ≥10 contributors) accepted your PR — attested by a team that isn’t you, and checkable on GitHub.
  • It’s a credential, and it growsevery accepted contribution raises your Proof of Work — 3 merges into repos you don’t own reads as exactly that. Earned, not a skills list you wrote about yourself.
  • Three ways to earn itan open-source issue pays nothing and still counts, a public bounty pays, and a founder’s private task pays. All three land in the same record.
  • Claim it without leaving Claude Codeterminalhire contribute finds an issue matched to your stack; ship it in an isolated worktree, and the merge lands on your public résumé.
Start your Proof of Work →
~/projects/my-appterminalhire
// $ terminalhire contribute · matched to your stack
Credential-building work, matched to you
1 fix: race condition in connection pool 94% → 2.1k★ · 40 contributors
2 feat: add retry backoff to webhook sender 88% → 610★ · 22 contributors
merged → Proof of Work +1
privacy

Your code stays yours. Structurally.

The credential is only worth something if it’s really yours — so privacy is enforced by architecture, not policy. Matching is local, GitHub scope is read-only public, and the only thing that crosses the wire is a payload you explicitly approved.

  • Public GitHub onlywe register just the read:user scope. Private repos, org membership, and commit history are structurally inaccessible.
  • We never see your codematching happens in a subprocess that never sends your code anywhere — source code cannot reach our servers.
  • Never leaves your machine, zero egressthe broad pool is aggregated server-side; your machine downloads it and matches offline.
  • Named consent, per opportunitynever "share with recruiters?" — always "Share with [partner agency name]?", approved explicitly.
lead-payload.tsthe only thing sent
// the only payload that ever crosses the wire to a buyer
type LeadPayload = {
opportunityId: string // the specific role
buyerLegalName: 'Northstar Talent' // named, not a category
approvedFields: { skillTags, seniorityBand, contactEmail }
consentText: string // shown at approval
// ✗ no source code, no file paths, no employer names
}
owned channel

Proof of Work, weekly.

Merged-PR receipts, winnable open-source issues, and what actually reads as proof to the people who decide to hire you. Double opt-in — unsubscribing deletes your email entirely.

Proof of Work

One email a week: merged-PR receipts, winnable OSS issues, and what actually counts as proof.

Two commands. One boundary between them.

Founders: hand off a task you will never get to. Developers: install the plugin and matched work surfaces in the tool you already have open. Everything up to accepting the diff runs today.