openings 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/.codex-plugin/plugin.json +23 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +110 -0
- package/data/companies.json +2550 -0
- package/docs/job-seeker-quickstart.md +109 -0
- package/package.json +42 -0
- package/skills/openings/SKILL.md +28 -0
- package/src/artifact-path.ts +48 -0
- package/src/atomic-file.ts +13 -0
- package/src/candidate-profile.ts +273 -0
- package/src/career-tracing.ts +181 -0
- package/src/catalog.ts +382 -0
- package/src/cli.ts +601 -0
- package/src/common-crawl-discovery.ts +137 -0
- package/src/company-seeds.ts +43 -0
- package/src/country-coverage.ts +203 -0
- package/src/crawl-reporting.ts +56 -0
- package/src/crawler.ts +146 -0
- package/src/enrichment-registry.ts +137 -0
- package/src/file-lock.ts +85 -0
- package/src/index.ts +37 -0
- package/src/intent-validation.ts +28 -0
- package/src/job-coverage.ts +73 -0
- package/src/job-fit-analysis.ts +247 -0
- package/src/job-matching.ts +445 -0
- package/src/job-recommendations.ts +193 -0
- package/src/job-search-preparation.ts +116 -0
- package/src/jobposting-probe.ts +167 -0
- package/src/local-jobs.ts +113 -0
- package/src/locations.ts +180 -0
- package/src/mcp.ts +98 -0
- package/src/package-mcp.ts +8 -0
- package/src/recruitee-round.ts +114 -0
- package/src/report-meta.ts +17 -0
- package/src/requirement-vocabulary.ts +111 -0
- package/src/resume-optimization.ts +118 -0
- package/src/runtime.ts +51 -0
- package/src/safe-get.ts +88 -0
- package/src/safe-head.ts +79 -0
- package/src/screening-requirements.ts +99 -0
- package/src/selected-job-lookup.ts +14 -0
- package/src/snapshot-catalog.ts +21 -0
- package/src/snapshot-export.ts +66 -0
- package/src/snapshot-store.ts +31 -0
- package/src/source-discovery-pipeline.ts +26 -0
- package/src/source-discovery.ts +231 -0
- package/src/source-enrichment.ts +92 -0
- package/src/source-pipeline.ts +245 -0
- package/src/source-verification.ts +297 -0
- package/src/tools.ts +194 -0
- package/src/types.ts +136 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openings",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Find evidence-grounded jobs, including relevant roles you may not have searched for, without accounts or API keys.",
|
|
5
|
+
"author": { "name": "Openings contributors" },
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": ["jobs", "resume", "matching", "mcp", "greenhouse", "lever", "ashby", "workday", "recruitee"],
|
|
8
|
+
"skills": "./skills/",
|
|
9
|
+
"mcpServers": "./.mcp.json",
|
|
10
|
+
"interface": {
|
|
11
|
+
"displayName": "Openings",
|
|
12
|
+
"shortDescription": "Find real jobs with evidence you can inspect.",
|
|
13
|
+
"longDescription": "A free, candidate-safe job-search workflow. Build a private local index, check honest country coverage before sharing a resume, find direct and hidden opportunities across five public ATS providers, inspect fit evidence and gaps, and generate truthful resume improvements without storing the resume or submitting an application.",
|
|
14
|
+
"developerName": "Openings contributors",
|
|
15
|
+
"category": "Productivity",
|
|
16
|
+
"capabilities": ["Coverage-aware job discovery", "Evidence-grounded fit analysis", "Truthful resume optimization"],
|
|
17
|
+
"defaultPrompt": [
|
|
18
|
+
"Prepare my private job index and tell me how many employers and jobs you cover in India before I share my resume.",
|
|
19
|
+
"Find roles that fit my resume, including relevant titles I may not have searched for.",
|
|
20
|
+
"Explain this job with resume evidence and suggest only truthful, evidence-backed improvements."
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
package/.mcp.json
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Openings contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Openings
|
|
2
|
+
|
|
3
|
+
A free, candidate-safe job search for AI agents.
|
|
4
|
+
|
|
5
|
+
Openings indexes public company job boards into a private index on your machine and exposes it to any MCP client. Your agent can find roles that fit a resume, explain the fit with evidence, and propose truthful resume improvements. There are no accounts, no API keys, no model calls, and no way to submit an application.
|
|
6
|
+
|
|
7
|
+
- **Five providers.** Greenhouse, Lever, Ashby, Workday, and Recruitee, crawled from their public structured endpoints. No HTML scraping.
|
|
8
|
+
- **Verified sources only.** Every company in the catalog passed an identity check against its own board.
|
|
9
|
+
- **Resumes stay in memory.** Resume content is parsed for a single request and never written to disk.
|
|
10
|
+
- **Honest coverage.** Before you share a resume, Openings tells you how many employers and jobs it actually has for your countries.
|
|
11
|
+
|
|
12
|
+
## For job seekers
|
|
13
|
+
|
|
14
|
+
Install [Bun](https://bun.sh/) 1.3 or newer, then the package with whichever package manager you use:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
bun add --global openings
|
|
18
|
+
# or
|
|
19
|
+
npm install --global openings
|
|
20
|
+
# or
|
|
21
|
+
yarn global add openings
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Bun must be on your `PATH` either way; it is the runtime the server runs on.
|
|
25
|
+
|
|
26
|
+
Add the server to your MCP client:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"openings": { "command": "openings-mcp", "args": [] }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Then ask your agent something like:
|
|
37
|
+
|
|
38
|
+
> Show me what Openings covers in India. If that looks useful, use my resume to find backend roles, including good jobs whose titles I would not have searched for. Rank by evidence and explain every gap.
|
|
39
|
+
|
|
40
|
+
On first use the agent builds your private index in resumable batches of ten sources, reports real coverage, and only then asks for a resume. Results come back in three buckets: direct title matches, hidden roles found through grounded title families, and stretch roles, each with separate evidence and keyword scores. The index lives under `~/.openings`.
|
|
41
|
+
|
|
42
|
+
The [job-seeker quickstart](docs/job-seeker-quickstart.md) has sample prompts, an example conversation, privacy details, and common errors.
|
|
43
|
+
|
|
44
|
+
## The tools
|
|
45
|
+
|
|
46
|
+
| Tool | What it does |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `prepare_job_search` | Builds or refreshes the index for your countries and reports coverage. Uses the network, never touches a resume. |
|
|
49
|
+
| `get_job_coverage` | Reports current coverage with no network access. |
|
|
50
|
+
| `recommend_jobs` | Ranks jobs against a resume and explicit intent. Returns direct, hidden, and stretch results with evidence. Performs at most one scoped refresh; `refresh.policy: "never"` guarantees no crawl. |
|
|
51
|
+
| `analyze_job_fit` | Explains one job against verbatim resume evidence: supported, transferable, unsupported, and screening risks. |
|
|
52
|
+
| `optimize_resume` | Proposes grounded suggestions, an additive diff, or revised Markdown. Never invents experience. |
|
|
53
|
+
| `search_jobs` | Plain keyword, location, country, and remote search over the index. `country` takes a two-letter code such as `IN`. |
|
|
54
|
+
| `get_job` | Returns one job with its full description. |
|
|
55
|
+
|
|
56
|
+
There is deliberately no form-fill, apply, or submit tool. The only thing Openings writes is your own job index.
|
|
57
|
+
|
|
58
|
+
## From a source checkout
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
bun install
|
|
62
|
+
bun run src/mcp.ts # stdio MCP server
|
|
63
|
+
bun run src/cli.ts crawl --country IN # build the index
|
|
64
|
+
bun run src/cli.ts search "platform engineer" --remote
|
|
65
|
+
bun run src/cli.ts get greenhouse:anthropic:12345
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
CLI commands return JSON. Search refreshes a missing or stale index automatically; pass `--offline` to guarantee no network request. The source entrypoint stores its index under `.openings` in the working directory unless `OPENINGS_DATA_DIR` is set. The included [`.mcp.json`](.mcp.json) is picked up when this repository is installed as a Codex plugin.
|
|
69
|
+
|
|
70
|
+
Discovery campaigns, source verification, corpus expansion, coverage reports, and lock recovery are documented in the [maintainer guide](docs/maintainer-guide.md).
|
|
71
|
+
|
|
72
|
+
## Add a company
|
|
73
|
+
|
|
74
|
+
Append a candidate to [`data/source-candidates.json`](data/source-candidates.json) and run verification. Never edit the generated catalog in `data/companies.json` by hand.
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"companyName": "Example",
|
|
79
|
+
"companyDomain": "example.com",
|
|
80
|
+
"sourceUrl": "https://job-boards.greenhouse.io/example",
|
|
81
|
+
"cohorts": ["IN"],
|
|
82
|
+
"discoveredFrom": { "channel": "community", "reference": "issue-123" }
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
bun run src/cli.ts sources verify data/source-candidates.json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The verifier resolves the canonical board endpoint, validates its payload, applies the provider's identity check, and regenerates the catalog atomically. Rejected candidates are reported with a machine-readable reason. `cohorts` records why a source was selected for a country campaign; eligibility is always decided per job. An optional `slug` keeps existing job IDs stable when it differs from the first label of the company domain.
|
|
91
|
+
|
|
92
|
+
## Sharing crawls
|
|
93
|
+
|
|
94
|
+
Set `OPENINGS_AGGREGATOR_URL` and each source you crawl is reported to that aggregator, which merges reports from every install and publishes the result. New installs then download the published index on first setup instead of crawling every source. Only public job data is sent, never resume content. Leave the variable unset to keep every crawl local.
|
|
95
|
+
|
|
96
|
+
## Privacy
|
|
97
|
+
|
|
98
|
+
Job data comes straight from public ATS endpoints and is stored only on your machine. Your MCP client reads the resume file and passes its content to a tool; Openings never sees the path and never persists the content or anything derived from it. Every proposed change stays subject to your review.
|
|
99
|
+
|
|
100
|
+
## Develop
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
bun test
|
|
104
|
+
bun run typecheck
|
|
105
|
+
bun run test:live # one real board per provider, needs internet
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## License
|
|
109
|
+
|
|
110
|
+
[MIT](LICENSE)
|