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 +147 -0
- package/dist/data/companies.json +65 -0
- package/dist/index.js +3282 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -0
- package/src/data/companies.json +65 -0
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
|
+
]
|