hiregraph 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # HireGraph
2
+
3
+ **Your code is your resume. Everything runs on your machine.**
4
+
5
+ HireGraph is a local-first CLI that turns your code into job applications. It scans your projects, builds a skill graph, matches you against jobs from public ATS APIs, generates tailored resumes, and submits applications — all from your terminal.
6
+
7
+ Open Source | Local-First | Bring Your Own Key
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install -g hiregraph
13
+ ```
14
+
15
+ That's it. No account. No sign up. HireGraph reads `ANTHROPIC_API_KEY` from your environment — the same key Claude Code or Cursor already uses.
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # 1. Set up your profile
21
+ hiregraph init
22
+
23
+ # 2. Scan your projects
24
+ hiregraph scan ~/projects/my-app
25
+ hiregraph scan ~/projects/another-app
26
+
27
+ # 3. Check your skill graph
28
+ hiregraph status
29
+
30
+ # 4. Fetch jobs from Greenhouse, Lever, and Ashby
31
+ hiregraph jobs
32
+
33
+ # 5. Find your best matches
34
+ hiregraph matches
35
+
36
+ # 6. Apply with a tailored resume
37
+ hiregraph apply gh_12345 --review
38
+
39
+ # 7. Track your applications
40
+ hiregraph history
41
+ ```
42
+
43
+ ## How It Works
44
+
45
+ ### Scan: 7 Layers of Code Analysis
46
+
47
+ When you run `hiregraph scan`, seven layers extract structured data from your codebase:
48
+
49
+ | Layer | What It Does | LLM? |
50
+ |-------|-------------|------|
51
+ | 1. File Discovery | Walk file tree, count LOC, detect languages | No |
52
+ | 2. Dependencies | Parse package.json, requirements.txt, Cargo.toml, go.mod | No |
53
+ | 3. AST Analysis | Analyze code structure — functions, classes, components, hooks | No |
54
+ | 4. Git Forensics | Commits, active days, contributors, velocity | No |
55
+ | 5. Quality Signals | Test ratio, complexity, type safety, secrets scan | No |
56
+ | 6. Architecture | Detect patterns — Service Layer, MVC, Repository, Monorepo | No |
57
+ | 7. Classification | One Haiku call on a structured summary (not your code) | Yes |
58
+
59
+ Layers 1-6 are completely local. No network calls. No code leaves your machine.
60
+
61
+ ### Match: Two-Tier Matching
62
+
63
+ 1. **Pre-filter** — TF-IDF vector similarity finds the top 50 candidates from thousands of jobs. Runs locally in milliseconds.
64
+ 2. **LLM evaluation** — Haiku scores each candidate with reasoning, strengths, and gaps. ~$0.15 for 50 evaluations.
65
+
66
+ ### Apply: Tailored Resume + Auto-Submit
67
+
68
+ - One Haiku call tailors your summary and selects relevant project bullets per job
69
+ - pdfkit generates an ATS-compatible PDF locally
70
+ - Submits through official ATS APIs (same ones Indeed/LinkedIn use)
71
+ - The company sees a normal application — they have no idea HireGraph exists
72
+
73
+ ## Commands
74
+
75
+ | Command | What It Does |
76
+ |---------|-------------|
77
+ | `hiregraph init` | Set up your profile (resume upload + preferences) |
78
+ | `hiregraph scan <path>` | Scan a project and update your skill graph |
79
+ | `hiregraph status` | Show your skill graph summary |
80
+ | `hiregraph jobs` | Fetch jobs from Greenhouse, Lever, and Ashby |
81
+ | `hiregraph matches` | Match your skill graph against fetched jobs |
82
+ | `hiregraph apply <job-id>` | Generate tailored resume and submit |
83
+ | `hiregraph history` | View and manage application history |
84
+
85
+ ### Apply Options
86
+
87
+ ```bash
88
+ hiregraph apply gh_12345 # Apply to a specific job
89
+ hiregraph apply gh_12345 --review # Preview resume before submitting
90
+ hiregraph apply gh_12345 --dry-run # Generate PDF without submitting
91
+ hiregraph apply --all-above 8 # Batch apply to all 8+ matches
92
+ ```
93
+
94
+ ### History Options
95
+
96
+ ```bash
97
+ hiregraph history # List all applications
98
+ hiregraph history update app_x9y8 --status interview
99
+ hiregraph history update app_x9y8 --status offer --notes "Start date March"
100
+ ```
101
+
102
+ ## What's On Your Machine
103
+
104
+ ```
105
+ ~/.hiregraph/
106
+ identity.json # Your profile
107
+ skill-graph.json # Accumulated skill graph from scans
108
+ config.json # Preferences
109
+ jobs/ # Cached job listings
110
+ matches/ # Match results with scores
111
+ resumes/ # Generated PDFs
112
+ history.json # Application tracking
113
+ ```
114
+
115
+ Everything is a file. You can inspect it, back it up, version control it, or delete it.
116
+
117
+ ## What It Costs
118
+
119
+ The only cost is LLM API usage on your existing Anthropic key:
120
+
121
+ | Action | Cost |
122
+ |--------|------|
123
+ | Scan a project | ~$0.003 (1 Haiku call) |
124
+ | Parse ~5,000 job descriptions (first run) | ~$1.50 (cached after) |
125
+ | Match (50 evaluations) | ~$0.15 |
126
+ | Tailor + apply per job | ~$0.003 |
127
+ | **Total first run** | **~$1.70** |
128
+ | **Daily refresh + match** | **~$0.15** |
129
+
130
+ ## Supported ATS
131
+
132
+ | ATS | Fetch Jobs | Auto-Submit |
133
+ |-----|-----------|-------------|
134
+ | Greenhouse | Yes | Yes |
135
+ | Lever | Yes | Yes |
136
+ | Ashby | Yes | Yes |
137
+
138
+ 63 companies included in the seed registry. Add your own to `~/.hiregraph/companies.json`.
139
+
140
+ ## Requirements
141
+
142
+ - Node.js >= 18
143
+ - `ANTHROPIC_API_KEY` in your environment (auto-set by Claude Code / Cursor)
144
+
145
+ ## License
146
+
147
+ MIT
@@ -0,0 +1,65 @@
1
+ [
2
+ { "name": "Stripe", "slug": "stripe", "ats": "greenhouse", "board_token": "stripe", "domain": "fintech", "size": "growth" },
3
+ { "name": "Airbnb", "slug": "airbnb", "ats": "greenhouse", "board_token": "airbnb", "domain": "travel-tech", "size": "enterprise" },
4
+ { "name": "Coinbase", "slug": "coinbase", "ats": "greenhouse", "board_token": "coinbase", "domain": "crypto", "size": "growth" },
5
+ { "name": "Notion", "slug": "notion", "ats": "greenhouse", "board_token": "notion", "domain": "productivity", "size": "growth" },
6
+ { "name": "Figma", "slug": "figma", "ats": "greenhouse", "board_token": "figma", "domain": "design-tools", "size": "growth" },
7
+ { "name": "Datadog", "slug": "datadog", "ats": "greenhouse", "board_token": "datadog", "domain": "observability", "size": "enterprise" },
8
+ { "name": "Ramp", "slug": "ramp", "ats": "greenhouse", "board_token": "ramp", "domain": "fintech", "size": "growth" },
9
+ { "name": "Brex", "slug": "brex", "ats": "greenhouse", "board_token": "brex", "domain": "fintech", "size": "growth" },
10
+ { "name": "Discord", "slug": "discord", "ats": "greenhouse", "board_token": "discord", "domain": "social", "size": "growth" },
11
+ { "name": "Vercel", "slug": "vercel", "ats": "greenhouse", "board_token": "vercel", "domain": "dev-tools", "size": "growth" },
12
+ { "name": "Supabase", "slug": "supabase", "ats": "greenhouse", "board_token": "supabase", "domain": "dev-tools", "size": "startup" },
13
+ { "name": "Retool", "slug": "retool", "ats": "greenhouse", "board_token": "retool", "domain": "dev-tools", "size": "growth" },
14
+ { "name": "Scale AI", "slug": "scaleai", "ats": "greenhouse", "board_token": "scaleai", "domain": "ai-ml", "size": "growth" },
15
+ { "name": "Anduril", "slug": "anduril", "ats": "greenhouse", "board_token": "andurilindustries", "domain": "defense-tech", "size": "growth" },
16
+ { "name": "Plaid", "slug": "plaid", "ats": "greenhouse", "board_token": "plaid", "domain": "fintech", "size": "growth" },
17
+ { "name": "Rippling", "slug": "rippling", "ats": "greenhouse", "board_token": "rippling", "domain": "hr-tech", "size": "growth" },
18
+ { "name": "Anthropic", "slug": "anthropic", "ats": "greenhouse", "board_token": "anthropic", "domain": "ai-ml", "size": "growth" },
19
+ { "name": "OpenAI", "slug": "openai", "ats": "greenhouse", "board_token": "openai", "domain": "ai-ml", "size": "growth" },
20
+ { "name": "Databricks", "slug": "databricks", "ats": "greenhouse", "board_token": "databricks", "domain": "data", "size": "enterprise" },
21
+ { "name": "Cloudflare", "slug": "cloudflare", "ats": "greenhouse", "board_token": "cloudflare", "domain": "infrastructure", "size": "enterprise" },
22
+ { "name": "HashiCorp", "slug": "hashicorp", "ats": "greenhouse", "board_token": "hashicorp", "domain": "dev-tools", "size": "enterprise" },
23
+ { "name": "GitLab", "slug": "gitlab", "ats": "greenhouse", "board_token": "gitlab", "domain": "dev-tools", "size": "enterprise" },
24
+ { "name": "Samsara", "slug": "samsara", "ats": "greenhouse", "board_token": "samsara", "domain": "iot", "size": "growth" },
25
+ { "name": "Toast", "slug": "toast", "ats": "greenhouse", "board_token": "toast", "domain": "restaurant-tech", "size": "enterprise" },
26
+ { "name": "Gusto", "slug": "gusto", "ats": "greenhouse", "board_token": "gusto", "domain": "hr-tech", "size": "growth" },
27
+ { "name": "Webflow", "slug": "webflow", "ats": "greenhouse", "board_token": "webflow", "domain": "design-tools", "size": "growth" },
28
+ { "name": "Airtable", "slug": "airtable", "ats": "greenhouse", "board_token": "airtable", "domain": "productivity", "size": "growth" },
29
+ { "name": "Navan", "slug": "navan", "ats": "greenhouse", "board_token": "navan", "domain": "travel-tech", "size": "growth" },
30
+ { "name": "Pagerduty", "slug": "pagerduty", "ats": "greenhouse", "board_token": "pagerduty", "domain": "dev-tools", "size": "enterprise" },
31
+ { "name": "MongoDB", "slug": "mongodb", "ats": "greenhouse", "board_token": "mongodb", "domain": "database", "size": "enterprise" },
32
+ { "name": "Confluent", "slug": "confluent", "ats": "greenhouse", "board_token": "confluent", "domain": "data", "size": "enterprise" },
33
+ { "name": "Cockroach Labs", "slug": "cockroachlabs", "ats": "greenhouse", "board_token": "cockroachlabs", "domain": "database", "size": "growth" },
34
+ { "name": "Snyk", "slug": "snyk", "ats": "greenhouse", "board_token": "snyk", "domain": "security", "size": "growth" },
35
+ { "name": "Lattice", "slug": "lattice", "ats": "greenhouse", "board_token": "lattice", "domain": "hr-tech", "size": "growth" },
36
+ { "name": "Dbt Labs", "slug": "dbtlabs", "ats": "greenhouse", "board_token": "daboratoryinc", "domain": "data", "size": "growth" },
37
+ { "name": "Linear", "slug": "linear", "ats": "lever", "board_token": "linear", "domain": "dev-tools", "size": "startup" },
38
+ { "name": "Loom", "slug": "loom", "ats": "lever", "board_token": "useloom", "domain": "productivity", "size": "growth" },
39
+ { "name": "Postman", "slug": "postman", "ats": "lever", "board_token": "postman", "domain": "dev-tools", "size": "growth" },
40
+ { "name": "Weights & Biases", "slug": "wandb", "ats": "lever", "board_token": "wandb", "domain": "ai-ml", "size": "growth" },
41
+ { "name": "Mux", "slug": "mux", "ats": "lever", "board_token": "mux", "domain": "video-tech", "size": "growth" },
42
+ { "name": "Railway", "slug": "railway", "ats": "lever", "board_token": "railway", "domain": "dev-tools", "size": "startup" },
43
+ { "name": "Replit", "slug": "replit", "ats": "lever", "board_token": "replit", "domain": "dev-tools", "size": "growth" },
44
+ { "name": "Sanity", "slug": "sanity", "ats": "lever", "board_token": "sanity", "domain": "cms", "size": "growth" },
45
+ { "name": "Cal.com", "slug": "calcom", "ats": "lever", "board_token": "calcom", "domain": "scheduling", "size": "startup" },
46
+ { "name": "Fly.io", "slug": "flyio", "ats": "lever", "board_token": "fly", "domain": "infrastructure", "size": "startup" },
47
+ { "name": "Temporal", "slug": "temporal", "ats": "lever", "board_token": "temporal", "domain": "dev-tools", "size": "growth" },
48
+ { "name": "Prisma", "slug": "prisma", "ats": "lever", "board_token": "prisma", "domain": "dev-tools", "size": "growth" },
49
+ { "name": "Resend", "slug": "resend", "ats": "lever", "board_token": "resend", "domain": "dev-tools", "size": "startup" },
50
+ { "name": "Stytch", "slug": "stytch", "ats": "lever", "board_token": "stytch", "domain": "auth", "size": "startup" },
51
+ { "name": "Materialize", "slug": "materialize", "ats": "lever", "board_token": "materialize", "domain": "data", "size": "startup" },
52
+ { "name": "Census", "slug": "census", "ats": "lever", "board_token": "getcensus", "domain": "data", "size": "startup" },
53
+ { "name": "Courier", "slug": "courier", "ats": "lever", "board_token": "courier", "domain": "notifications", "size": "startup" },
54
+ { "name": "Ashby", "slug": "ashby", "ats": "ashby", "board_token": "ashby", "domain": "hr-tech", "size": "startup" },
55
+ { "name": "Vanta", "slug": "vanta", "ats": "ashby", "board_token": "vanta", "domain": "security", "size": "growth" },
56
+ { "name": "Ramp (Ashby)", "slug": "ramp-ashby", "ats": "ashby", "board_token": "ramp", "domain": "fintech", "size": "growth" },
57
+ { "name": "Zip", "slug": "zip", "ats": "ashby", "board_token": "zip", "domain": "procurement", "size": "growth" },
58
+ { "name": "Persona", "slug": "persona", "ats": "ashby", "board_token": "persona", "domain": "identity", "size": "growth" },
59
+ { "name": "Slope", "slug": "slope", "ats": "ashby", "board_token": "slope", "domain": "fintech", "size": "startup" },
60
+ { "name": "Stainless", "slug": "stainless", "ats": "ashby", "board_token": "stainless", "domain": "dev-tools", "size": "startup" },
61
+ { "name": "Highlight", "slug": "highlight", "ats": "ashby", "board_token": "highlight", "domain": "observability", "size": "startup" },
62
+ { "name": "Baseten", "slug": "baseten", "ats": "ashby", "board_token": "baseten", "domain": "ai-ml", "size": "startup" },
63
+ { "name": "Modal", "slug": "modal", "ats": "ashby", "board_token": "modal", "domain": "ai-ml", "size": "startup" },
64
+ { "name": "E2B", "slug": "e2b", "ats": "ashby", "board_token": "e2b", "domain": "dev-tools", "size": "startup" }
65
+ ]