terminalhire
install

Three steps to your first match.

Sign in with GitHub first for an instant verified profile. Then install the CLI and run terminalhire jobs to match locally. Prefer no account? Skip step 1 — start at step 2.

01recommended

Sign in with GitHub — instant verified profile

Connect your public GitHub account and get skill tags, seniority inference, and top language signals populated automatically — no manual profile setup. Scope: read:user and public repos only. We never request private-repo scopes. This is step 1 because it eliminates the cold-start problem: without it, you match against an empty profile.

// what we read from GitHub (read:user scope only)
public user profile (login, name, public email if set)
public repos — languages, topics (forks excluded)
public PR activity (merged PRs in public repos)
private repos — never requested, never accessible
org membership, email list, SSH keys, webhooks
write access of any kind
Sign in with GitHub

Prefer to stay local? Skip this step — go straight to step 2 and build your profile manually via the CLI.

Step 2: Install the CLI globally
npm install -g terminalhire
→ hooking into shell precmd…
→ writing ~/.terminalhire/config.json (tier:0)…
→ initializing encrypted profile at ~/.terminalhire/profile…
✓ terminalhire v0.3.0 installed
Step 3: Run terminalhire jobs to pull the index and match locally
terminalhire jobs
→ downloading index from api.terminalhire.com/api/index… (anonymous)
→ running match() locally against ~/.terminalhire/profile…
1 Staff Backend Eng · Vercel [oauth, typescript, node] 82% apply-direct
2 Senior Auth Engineer · (Coastal) [oauth, postgresql] 74% share with Coastal? yes/no
3 Platform Eng · Ashby [typescript, api, react] 61% apply-direct
✦ 3 matches · matched on your machine · no fingerprint sent

Privacy tiers

Tier 1 (GitHub-verified) is recommended because it solves the cold-start problem. Tier 0 is always available — no account, no data shared unless you explicitly approve a lead.

Tier 0

Local · No account

always available
  • Run terminalhire jobs — downloads the public index anonymously, no fingerprint sent
  • Matching runs entirely on your machine against your local encrypted profile
  • Apply-direct: opens employer URL, no data shared, no payload
  • For Coastal-repped roles: explicit "Share with Coastal Recruiting LLC? yes/no" prompt
  • Profile encrypted at rest (~/.terminalhire/profile)
  • Employer-repo sessions excluded by default (corp email / git remote detection)
  • Once-per-session discovery nudge — not per-commit
  • One-click disable: terminalhire off
  • Cross-device profile sync
  • Recruiter passive discovery
  • Pre-populated skill tags (you build the profile manually)

Tier 1

GitHub-verified Profile · Opt-in

recommended
  • Everything in Tier 0
  • Sign in with GitHub → instant skill tags from public repos (scope: read:user only)
  • Seniority inference from account age, repo count, followers
  • Cross-device profile sync (explicit opt-in; still encrypted in transit)
  • Open-to-work passive discovery by vetted recruiters
  • Verified GitHub identity strengthens lead anti-fraud signals
  • Revoke anytime — server profile deleted, recruiter copies via DPA

What gets installed

terminalhire

CLI binary — run "terminalhire jobs" to download the index and match locally

~/.terminalhire/profile

Encrypted local profile (AES-256-GCM). Never uploaded in Tier 0.

~/.terminalhire/config.json

Local config: tier, nudge toggle, employer-repo exclusion preference

~/.terminalhire/consent.ndjson

Local-only consent log of every lead action you approved or declined

Requirements

Node.js>= 18.0
npm / pnpm / bunany modern
Shellzsh, bash, fish
OSmacOS, Linux, WSL2