dsh-find-jobs
dsh个人求职插件
- Stars
- 0
- Language
- TypeScript
- Created
- Sep 6, 2026
- Updated
- Sep 6, 2026
Introduction
dsh-find-jobs — Personal Job Hunter(DSH 插件)
一个运行在 DeepSeek Harness 上的个人求职 Agent 插件。
了解我,然后替我持续寻找真正值得投递的工作。它不是一个求职网站,也不是“AI 聊天框”。
详细 Spec(产品定义、MVP 范围、分档规则、阶段计划)见 AGENTS.md。
已实现
| 能力 | 工具 | 说明 |
|---|---|---|
| 画像记忆 | get_job_profile / update_job_profile | 持久化到 $DSH_HOME/profiles/<profile>/jobhunter_profile.json |
| 搜索 + 自动落盘 | search_jobs | save_dir 必填:搜索成功即把完整 JD 存档到 <dir>/<id>.json + 更新 index.json(按 id 去重,保留已有 match/note),返回轻量摘要(省 token),精读某岗时读对应文件。mock 内置;实时源(bsk)在同一次浏览会话内抓列表与详情(反直链/风控友好;get_job_detail 已并入) |
| 匹配评估 | job-match 技能 | Agent 按 5 步策略输出每岗统一结果卡(match_level 档位 · apply/skip · reason 理由,见 skills/job-match/SKILL.md) |
| 工作流 Skill | job-hunter | 见 skills/job-hunter/SKILL.md |
匹配档位(业务建议):>85 strong_match · 70–85 good_match · 55–70 stretch · <55 low_match;recommendation = apply(值得投)/ skip(不值得投)。
岗位清单由
job-hunterSkill 指示 Agent 调用search_jobs时传save_dir= 当前会话工作目录<cwd>/jobs/(以pwd为准):search_jobs搜索成功即自动存档(写/更新jobs/<id>.json+ 去重合并jobs/index.json;不依赖 job-match 是否执行),返回里带saved汇总;评估产出的match/ 人工note再由 Agent 读改写回对应jobs/<id>.json。 插件按 Agent 传入的目录写,不自己决定保存路径。
数据源切换(mock → bsk 实时抓取)
改两处之一即可(profile 层优先级更高):
# 方式 A:直接改本仓库 cordis.patch.yml 的默认值(reload dsh 即生效)
- insert:
- id: dsh-find-jobs
config:
mock: false # true=离线演示;false=用 sources 实时抓取
sources:
- boss-zhipin # 可勾选增删,顺序即优先级
- xiaohongshu
bsk_session: "" # 留空自动开/关;或填 `bsk session start` 的 id 复用
# 方式 B:profile 层覆盖(追加到 ~/.dsh/profiles/web/cordis.patch.yml,注意需整段重述 config)
- update:
- id: dsh-find-jobs
config:
mock: false
sources: [boss-zhipin, xiaohongshu]
bsk_session: ""
实时抓取依赖:bsk CLI + 浏览器扩展在线(bsk doctor 自检),并使用你浏览器的登录态。
站点解析器(Boss直聘/小红书)按当前 DOM 编写、属实验性——解析失败时 search_jobs 会带页面片段报错,按实际页面校准即可。
开发
pnpm install
pnpm typecheck # tsc --noEmit
pnpm test # 离线单测(不联网)
pnpm test:boss # 只跑 Boss 解析单测
pnpm test:xhs # 只跑小红书解析单测
pnpm live:boss # 实跑 Boss(需 bsk 在线 + 登录态)
pnpm live:xhs # 实跑小红书(同上)
pnpm live:parallel # 并行实跑 Boss + 小红书(命令级串行,互不撞车)
pnpm build # typecheck + tsdown → lib/
在 dsh 里跑起来
# 1) 注册进 profile(等价于“CLI 初始化”;dsh 无 init 脚手架,add 即注册)
dsh plugin --profile web add "$(pwd)"
# 2) (仅当未走插件内运行时技能注册时)把技能复制到 DSH 本地技能发现目录;改 SKILL.md 后重跑即热更新
for s in job-hunter job-search job-match; do
mkdir -p ~/.dsh/skills/$s
cp skills/$s/SKILL.md ~/.dsh/skills/$s/SKILL.md
done
# 3) 验证与运行
dsh web --dump-config | grep -i find-jobs # 层已加载
dsh web # Web UI,对 Agent 说一句:
# “帮我找适合我的工作。”
卸载:dsh plugin --profile web remove dsh-find-jobs。
目录结构
src/
├── index.ts # 插件入口(name/inject/Config/apply)
├── config.ts # JobHunterConfig + Schema(mock 门控 + sources 勾选)
├── types.ts # 领域类型契约(Job 已带 source / salary_text)
├── data/mockJobs.ts # 离线 mock 岗位库(保持 Job 形状)
├── lib/
│ ├── profileStore.ts # 画像持久化
│ ├── search.ts # mock 搜索纯函数
│ └── jobsArchive.ts # search_jobs 自动落盘(<id>.json + index.json 去重合并)
├── provider/ # bskRunner(会话+抓取) · 站点适配器(bossZhipin/xiaohongshu) · HTML/薪资解析
└── tools/ # searchJobs(save_dir 必填自动落盘,返回轻量摘要)/ jobProfile
test/ # 纯解析/落盘可离线单测
skills/
├── job-hunter/ # 总工作流技能(画像→编排→分流→Top N)
├── job-search/ # 搜索技能(search_jobs 参数识别 + 自动存档)
└── job-match/ # 匹配评估技能(5 步业务判断,替代原 score_job 工具)
新增数据源(例如猎聘 / 拉勾)
- 仿照
src/provider/bossZhipin.ts实现SiteAdapter(buildSearchUrl/parseListPage/parseDetailText纯函数); - 在
src/provider/site.ts的ADAPTERS注册表登记; - 在
src/config.ts的sourcesunion 与cordis.patch.yml中启用; - 纯解析部分写单测(无需真实浏览器)。
Roadmap
- Phase 2:真实 Job Search provider(当前:bsk 实时浏览 Boss直聘/小红书;待实站校准解析器 + 更多站点)
- Phase 3:个人 Memory / 持续搜索(基于 Profile Store 演进)
- Phase 4:自建 Web UI 包装(先吃透 dsh web)
License
MIT