Back to home@nicklin99

dsh-find-jobs

dsh个人求职插件

Stars
0
Language
TypeScript
Created
Sep 6, 2026
Updated
Sep 6, 2026
GitHub repo

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_jobssave_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
工作流 Skilljob-hunterskills/job-hunter/SKILL.md

匹配档位(业务建议):>85 strong_match · 70–85 good_match · 55–70 stretch · <55 low_matchrecommendation = apply(值得投)/ skip(不值得投)。

岗位清单由 job-hunter Skill 指示 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 工具)

新增数据源(例如猎聘 / 拉勾)

  1. 仿照 src/provider/bossZhipin.ts 实现 SiteAdapterbuildSearchUrl / parseListPage / parseDetailText 纯函数);
  2. src/provider/site.tsADAPTERS 注册表登记;
  3. src/config.tssources union 与 cordis.patch.yml 中启用;
  4. 纯解析部分写单测(无需真实浏览器)。

Roadmap

  • Phase 2:真实 Job Search provider(当前:bsk 实时浏览 Boss直聘/小红书;待实站校准解析器 + 更多站点)
  • Phase 3:个人 Memory / 持续搜索(基于 Profile Store 演进)
  • Phase 4:自建 Web UI 包装(先吃透 dsh web)

License

MIT