Indexes public AI-company job boards (Greenhouse, Ashby, Lever, Workable, SmartRecruiters), scores postings for AI relevance, extracts the requirements from each job description, and produces a scheduled daily Markdown digest.
Install
# from a prebuilt release tarball
dsh plugin --profile web add "https://github.com/justinzyc271828-sys/dsh-ai-jobs/releases/latest/download/dsh-ai-jobs.tgz"
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:justinzyc271828-sys/dsh-ai-jobs
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
AI hiring radar for DeepSeek Harness. Index the public job boards of AI labs and AI-heavy companies, rank every posting against your own criteria, mine what they actually ask for (years, skills, degree, work mode, comp, visa), and push a daily digest of the openings worth reading.
No API keys, no accounts, no scraping of logged-in sites — every source is a public ATS board endpoint that the company itself publishes for its careers page.
Why
Job hunting for AI roles is a search problem over ~70 companies that each use a different ATS. The data is public but scattered, re-read by hand every week, and impossible to compare across companies. This plugin keeps one local index, so you can ask cross-company questions:
- Which labs are hiring research engineers right now, and what do they require?
- What share of core AI roles ask for a PhD? What is the median "N+ years"?
- Which openings appeared in the last 7 days, and which of them match my stack?
- What do Anthropic/OpenAI/Mistral ask for that I do not have yet?
What it does
| Step | Detail |
|---|---|
| Collect | 71 pre-verified boards (Greenhouse, Ashby, Lever) + Workable/SmartRecruiters for your own additions |
| Normalize | One posting shape across ATSes: title, locations, remote flag, department, dates, URL, JD text |
| Classify | core / adjacent / other AI relevance, role family, seniority — rule-based and auditable |
| Mine | Years of experience, degree, work mode, compensation range, visa sponsorship, 38-skill vocabulary |
| Rank | 0–100 score from relevance, freshness, seniority, your skills of interest and preferred locations |
| Store | Local JSON index with JD snapshots, change history, and a digest cursor |
| Push | Markdown digest + optional daily reminder through the harness scheduler |
Install
# from the marketplace / npm (once published)
dsh plugin --profile web add dsh-ai-jobs
# from a local checkout, for development
dsh plugin --profile desktop add ./dsh-ai-jobs
# from a packed tarball
npm pack && dsh plugin --profile desktop add ./dsh-ai-jobs-0.1.0.tgz
The bundle patch mounts one plugin row (ai-jobs); restart the app or toggle it on the Plugins page.
Quick start
ai_jobs_refresh # index every watched board (first run: ~10s for 3 big boards)
ai_jobs_search { "tier": "core", "postedWithinDays": 7, "minScore": 70 }
ai_jobs_requirements { "tier": "core", "limit": 200 }
ai_jobs_digest
ai_jobs_watchlist { "action": "add", "company": "Mistral", "ats": "ashby", "token": "mistral.ai" }
Tools
| Tool | What it returns |
|---|---|
ai_jobs_refresh |
Re-index all/A-selected boards. Reports per-board ok/error, added/changed/closed counts. |
ai_jobs_search |
Filtered, scored postings: query, company, tier, seniority, remote, location, minScore, postedWithinDays, limit, sort. |
ai_jobs_get |
One posting in full: metadata, score, extracted requirements, JD head, stored JD path. |
ai_jobs_digest |
Markdown digest of what changed since the last digest (or the last N days). |
ai_jobs_requirements |
Cross-company aggregate: skill frequency, median years, degree mix, work-mode mix, comp ranges. |
ai_jobs_watchlist |
list / add / remove boards (any of greenhouse, ashby, lever, workable, smartrecruiters). |
ai_jobs_status |
Index health: boards, open/closed counts, tier mix, last refresh, last digest, storage path. |
ai_jobs_schedule |
create / list / delete the daily digest reminder (needs the schedule service). |
Daily digest
Two ways:
ai_jobs_schedule { "action": "create", "time": "09:00:00", "timeZone": "Asia/Shanghai" }— one reminder per session, matchingtitle≤ 120 chars.dailyDigest.enabled: truein config — the plugin arms the reminder itself the first time a session runsai_jobs_refreshorai_jobs_digest.
The digest only reports postings that are new since the previous digest cursor, so a daily push does
not repeat yesterday's openings. ai_jobs_digest { "days": 7 } ignores the cursor.
Configuration
{
"lang": "zh",
"timeZone": "Asia/Shanghai",
"concurrency": 4,
"skillsOfInterest": ["LLM", "inference", "agents", "RAG"],
"preferredLocations": ["San Francisco", "Remote"],
"remoteOk": true,
"digestPerCompany": 4,
"digestLimit": 30,
"digestMinScore": 0,
"dailyDigest": { "enabled": true, "time": "09:00:00" },
"companies": [
{ "company": "Cohere", "ats": "ashby", "token": "cohere", "tags": ["frontier-lab"] }
]
}
| Key | Default | Meaning |
|---|---|---|
dataDir |
$DSH_HOME/ai-jobs (falls back to ~/.dsh/ai-jobs) |
Index, JD snapshots, digest state |
lang |
zh |
Digest language (zh / en) |
concurrency |
4 |
Parallel board fetches |
timeoutMs |
25000 |
Per-request timeout |
jdMaxChars |
20000 |
JD text kept per posting |
maxDetailPerBoard |
60 |
Greenhouse JD fetches per board per refresh |
tags |
from seed | frontier-lab, ai-native, ai-user — used by scoring and filters |
companies |
[] |
Extra boards appended to the shipped seed |
Data sources
All endpoints are public and unauthenticated:
| ATS | Endpoint | Seed boards |
|---|---|---|
| Greenhouse | boards-api.greenhouse.io/v1/boards/{token}/jobs |
33 |
| Ashby | api.ashbyhq.com/posting-api/job-board/{token} |
37 |
| Lever | api.lever.co/v0/postings/{token}?mode=json |
1 |
| Workable | apply.workable.com/api/v1/widget/accounts/{token} |
— |
| SmartRecruiters | api.smartrecruiters.com/v1/companies/{token}/postings |
— |
The shipped seed covers Anthropic, OpenAI, xAI, Mistral, Cohere, Perplexity, Thinking Machines, Cursor, Cognition, Harvey, Sierra, Decagon, ElevenLabs, Suno, Midjourney, Runway, Baseten, Cerebras, Fireworks, Modal, Anyscale, Together, Scale, Pinecone, Weaviate, Chroma, LangChain, LlamaIndex, Databricks, Snowflake, Stripe, Cloudflare, Datadog, Elastic, MongoDB, Figma, Notion, Vercel, Plaid, Ramp, Airbnb, Instacart, Lyft, Pinterest, Reddit, Discord, Roblox, Duolingo, Khan Academy, Spotify and more. Companies on Greenhouse store their JD behind a second request; the plugin fetches it only for new or changed postings.
ai_jobs_watchlist adds any other company whose careers page exposes one of these boards. Token
discovery is manual by design — the seed was verified one board at a time.
How ranking works
score = tier(55 core / 28 adjacent / 8 other)
+ freshness (30 → 0 over ~40 days)
+ seniority (-6 intern … +7 principal)
+ skills-of-interest overlap (max 12)
+ location preference (max 8) / remote (max 6)
+ comp disclosed (3)
Titles that mention AI but hire for a non-engineering function (counsel, sales, policy, marketing,
recruiting, finance, procurement …) are classified other before the AI patterns run.
People-management titles that carry AI vocabulary (program / product / project manager, TPM) end up
adjacent: they are real openings, but they are not AI individual-contributor roles.
Data & privacy
- Everything is stored locally under
$DSH_HOME/ai-jobs:store.json(index),jd/*.txt(JD snapshots), digest cursor. - The plugin sends no telemetry and has no backend. It only calls the public board endpoints listed above, with a descriptive User-Agent.
- Nothing is scraped from logged-in sites; no credentials are read or stored.
- Deleting
dataDirremoves everything.
Legal note
Board endpoints are published by the companies for their own careers pages. Keep the default
politeness settings (concurrency: 4, one refresh per run, JD fetched only for new postings) and do
not republish bulk data. Requirements, compensation, and availability change; always confirm on the
company's own careers page before acting.
Development
npm run smoke # schema contract + refresh/search/digest against two small boards
npm run live-check # multi-board end-to-end check against the real APIs
npm run probe # re-verify candidate ATS tokens
npm run seed # rebuild data/companies.json
Layout: src/text.js (HTML → text), src/sources.js (ATS adapters), src/classify.js
(tier/seniority/requirements/score), src/store.js (index + JD snapshots), src/digest.js
(markdown), src/tools.js (8 tools), src/index.js (bundle entry).
Zero runtime dependencies; Node built-ins only.
License
MIT
Links
More in this category
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36548
Draws draw.io diagrams in DeepSeek Harness through the next-ai-drawio MCP server: the link in the reply opens a live preview in the right sidebar, you can edit the diagram by hand, and each AI change is a version you can restore. Node.js 18+; npx downloads the MCP server on first use.
Tencent/WeKnora#dsh-weknora★ 36201
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 6962
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 5011
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
sixtysevenlf/dsh-blender-plugin★ 1536
Lets a DSH agent drive a local Blender over a direct TCP channel with 15 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 228 ops across 34 families.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1153
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.