全部插件

DSH / BUNDLE / CLIENT-UI

dsh-resume

v0.1.3L3n3L / dsh-resume60fe0dcc07

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-resume

Markdown campus resume workbench: the agent edits resumes and CSS templates under jobhunt/, and the user previews and exports from the sidebar.

README / ZH

插件文档

dsh-resume

把简历从一段 Markdown,变成一份可以认真投出去的 A4 成品。

dsh-resume 是 DeepSeek Harness 的求职简历工作台。它不只是“让 AI 改几句文案”,而是把求职简历最容易失控的三件事放到同一个闭环里:

内容改写 → A4 视觉复核 → 排版调优与导出。

你提供真实经历和目标岗位,Agent 负责整理、匹配和调整;你始终能看到 Markdown、A4 预览、模板和排版指标,并在最终导出前做确认。

简历 Agent 的内容取舍和验收依据见:校招简历写作方法论

你会得到什么

  • 一边编辑 Markdown,一边看到真实的 A4 预览
  • 清楚知道是“刚好一页”、溢出,还是一页但留白过多
  • 用模板库切换视觉方向,不需要重新写简历内容
  • 让 Agent 根据目标岗位改写内容、排序模块、补齐排版动作
  • 在工作台内镜像主对话的 Think、Read、Edit、Tool call 和回答
  • 手动微调字号、行高、模块间距和页边距,实时看到变化
  • 确认后再下载 HTML 或导出 PDF,不让 Agent 越权替你提交

它的目标不是“生成一份看起来像简历的文字”,而是让你在投递前回答三个问题:

  1. 内容有没有围绕这个岗位?
  2. 视觉上是否清楚、克制、适合阅读?
  3. 打印或导出后是不是一页,而且没有明显浪费或挤压?

90 秒上手

1. 安装插件

dsh plugin --profile web add github:L3n3L/dsh-resume

然后启动或重启 Web 端:

dsh web

环境要求:

  • DeepSeek Harness Web profile
  • dsh >= 0.1.0-rc.6
  • Node.js 22+

2. 打开「求职简历」

第一次打开不用先准备复杂目录。进入插件后,在「开始」页选择:

  • 有已有简历:导入并继续
  • 从零开始:创建一个空白求职工作区
  • 先看看效果:使用示例内容体验工作流

工作区默认是全局的,换会话或重启 DSH 后仍会继续使用。需要切换简历时,在左侧「工作区」页点击「选择文件夹」即可;插件直接复用 DSH 的工作区选择器,不需要手动填写绝对路径,选择过的文件夹会出现在最近工作区列表。

选择空文件夹时插件会自动准备基础文件;选择已有 resume.md 的目录会直接绑定。已有其他文件但还没有 resume.md 的目录会先要求确认,确认后只登记为简历工作区,不会覆盖或自动改动原文件;编辑器存在未保存的内容、排版或模板草稿时,切换前也会提示确认。

工作台会把内容、A4 和排版状态放在同一视线内:

3. 把真实材料和 JD 交给 Agent

直接复制下面这段作为第一句话即可:

请先初始化我的求职工作区。

我的真实材料如下,禁止编造:
- 学校 / 专业 / 时间:
- 意向岗位:
- 项目:
- 实习:
- 联系方式:

目标 JD:
(粘贴 JD)

请完成:
1. 整理通用简历底稿;
2. 生成 companies/目标公司-岗位/ 下的 jd.md 和 resume.md;
3. 根据岗位相关性调整模块顺序和措辞;
4. 执行 jobhunt_render;
5. 告诉我打开「求职简历」检查 A4,不要替我导出。

4. 在预览里复核

当 Agent 完成一轮修改后,打开「预览」:

  • 左侧直接改 Markdown
  • 中间查看固定 A4 页面
  • 顶部查看页数和留白比例
  • 需要时打开右侧 AI 助手
  • 需要时打开「手动调整」进行细调

右上角的「保存版本」会保存当前 Markdown,并把当前模板、字体、字号、行距、页边距、颜色和图标微调参数绑定到这份版本。进入「投递版本」可以查看主简历和投递版,使用「另存为版本」创建新的岗位版本,或对已有版本改名、打开和归档;归档只隐藏版本记录,不删除原文件。

预览中的排版和模板 CSS 调整先停留在临时草稿,不会随着滑块变化写入共享模板。点击保存当前版本或另存为版本时,若只有字号、行距、页边距、颜色和图标变化,就保存到简历版本;若还有模板结构或 CSS 草稿,会先询问是否复制为新模板。打印时也会给出同样选择;不复制时按已保存模板打印,避免临时试验污染其他简历。

5. 复核内容,再把页面调到合适密度

可以这样要求 Agent:

请读取真实的 A4 排版指标。
目标是内容完整、容易被 HR 扫描;校招优先争取一页,但不要为了塞进一页删掉关键证据或把字压到难读。
请先保留每段经历的个人负责范围、动作、方法和结果,再合并重复、删除低相关内容,最后调整模板视觉参数,最多自动调优 3 轮;
每轮都重新渲染并复核。允许把有依据的事实写得更专业、更有成果感,但不要凭空新增数字、职责、技术栈或结果。

6. 可选:手动启动简历 MCP

打开「求职简历」工作台左侧的「MCP 服务」,点击「启动 MCP」后,插件才会启用本地 Streamable HTTP 端点 /dsh-resume/mcp。点击「停止」后不会自动重启,也不会影响 DSH 的预览、模板和手动调整。

启动后点击「复制配置」,把面板生成的 JSON 粘贴到其他 Agent 的 MCP 配置中即可。典型配置如下:

{
  "mcpServers": {
    "dsh-resume": {
      "type": "streamable-http",
      "url": "http://127.0.0.1:3099/dsh-resume/mcp"
    }
  }
}

兼容宿主仍需要按自身方式连接面板显示的本地端点;插件不会在未授权时自动把 MCP 注入所有 Agent。需要 stdio 方式时,也可以在插件目录执行 npm run mcp,使用同一套简历工具。

工作台怎么工作

内容层:Markdown 是你的可读底稿

你可以直接编辑 Markdown,也可以让 Agent 修改。内容和视觉分开保存:换模板不会覆盖经历,改排版不会污染正文。

视觉层:模板是可替换的视觉基线

模板库提供不同的布局和视觉方向:

模板 适合场景 视觉特点
校招标准 通用校招、第一份实习 稳定、清晰、单栏
技术极简 前端、后端、算法 高密度、技术感、少装饰
安静编辑 产品、运营、综合岗位 低饱和、舒展、阅读友好
黑白终端 开发、测试、工程岗位 黑白高对比、少量强调色
侧栏聚焦 项目很多、技能信息密集 双栏、项目优先
工程时间线 Geek、工程和技术岗位 紧凑层级、经历时间线
作品集网格 前端、设计、产品作品集 双栏、项目卡片
产品信号 产品、运营、综合岗位 结果导向、舒展阅读
学术研究 研究生复试、科研申请 衬线字体、克制分隔

点击模板卡片只会选择视觉方向,不会把你带离当前页面;确认后再进入 A4 预览。

模板库支持把最多三个候选加入对比。候选缩略图使用当前 Markdown 通过同一套 Renderer 生成的真实 A4 页面,只做缩放展示,不是几条线拼出的静态占位图。模板工坊会同时显示候选缩略图、当前内容的实时 A4 预览和视觉 Token 面板;颜色、圆角和分隔线只先作用于当前预览,点击“另存为模板”后才进入模板库。模板卡片会标出内置/自定义、来源和当前修订号;查看版本时可以基于历史修订继续生成副本,应用模板只改变当前简历,不改模板库。

如果选中的模板需要更饱满或更适配内容,应要求 Agent 在它的视觉基线上改造。改造不只包括字号、行距和边距,也可以重构模块承载、信息密度、组件变体、流向和 CSS;默认会先生成草稿,确认后保存为独立副本,原模板不变:

复制“技术极简”为“前端实习高密度”,
保留它的视觉语言,重构模块承载以突出项目结果,
保存为新模板并让我在模板库里预览和管理版本。

如果你想从零做一个视觉方向,也不需要手写完整模板 JSON。告诉 Agent 面向什么岗位、希望单栏还是双栏、内容密度和视觉语气,插件会生成候选模板和模块布局(例如技能标签、项目卡片、经历时间线),经过校验、预览和 A4 测量后直接完成保存;只有目标路径或是否覆盖已有内容不明确时,Agent 才会停下来询问。

模板生成不是让模型自由拼接 CSS。Agent 会先从主题家族中选择一个稳定的视觉骨架,再组合语义模块预设,最后用真实 A4 指标复核。当前可用方向包括校招清晰、工程密集、双栏侧重、安静编辑、黑白终端和项目作品集;同一份 Markdown 可以在这些方向之间切换。

复核层:A4 指标不是装饰

插件会读取浏览器中的真实预览结果,关注这些指标:

  • 页面数量
  • 内容是否溢出
  • 底部剩余空间比例
  • 内容密度和异常留白
  • 模块是否被分页截断
  • 标题、项目和列表是否出现孤立断裂

如果用户明确要求一页,“一页通过”不是只看页面数量。真正的通过是:页面数量为 1、没有溢出、底部留白处于合理范围、内容没有被硬挤变形。 校招投递版将一页作为硬交付指标;内容取舍遵循实习和教育完整、项目按岗位筛选、荣誉优先于技能,先改模板和排版,再处理低优先级文本。

调优层:Agent 和用户各自负责什么

Agent 适合做:

  • 根据 JD 调整信息优先级
  • 改写空泛表述,强化有依据的动作、负责范围和结果
  • 选择适合岗位的模板
  • 根据测量结果进行有限轮次的排版调优
  • 解释为什么需要缩短、收紧或更换布局

用户适合做:

  • 确认经历是否真实
  • 选择自己愿意使用的视觉方向
  • 用滑杆做最后的字号、行高、页边距微调
  • 在导出前确认内容和页面效果

AI 助手:不是另一个聊天窗口

AI 助手位于当前预览工作台右侧,拿到的是当前简历上下文:

  • 当前 Markdown 草稿
  • 当前模板和模板参数
  • 当前 A4 测量结果
  • 当前主对话的任务流

它的作用是减少“离开预览 → 复制上下文 → 回主对话 → 再回来确认”的往返。你可以直接说:

把项目经历压缩成每个项目两行,保留技术栈和量化结果。
现在底部留白太多,请优先收紧模块间距;如果仍然不足,再考虑字号。

主对话发生 Think、Read、Edit、Tool call 时,助手会按真实顺序显示任务流;最终回答和推理过程分开,不把整段工作过程挤成一条消息。

Agent 工具链

插件提供一组面向求职工作区的工具,Agent 可以组合使用:

模板视觉设计的详细方法由随包提供的 skills/resume-template-design/SKILL.md 承载;系统提示词负责触发路由,工具负责最终校验和落盘。

外部 Agent 通过 MCP 连接时不会自动读取 DSH 的 Skill。MCP 会在连接初始化时提供短版规则,并提供 resume_guide;但业务闭环不依赖 Agent 是否真的读到了指南:首次制作或每次切换工作区/简历时,必须先调用 resume_prepare,服务端会绑定当前工作区、保存内容基线、执行本地预检并返回当前版本指南。没有准备、工作区已切换、内容已被 DSH 或其他 Agent 改动,MCP 会拒绝写入和渲染并返回 nextTool

MCP 的模板能力与 DSH 内置工具保持同一套业务边界:template_listtemplate_family_listtemplate_validatetemplate_generatetemplate_savetemplate_copytemplate_versionstemplate_restorelayout_savepresentation_savetemplate_autotune。模板结构修改通过复制后保存,内置模板不会被覆盖;字号、行距、页边距、颜色和图标微调通过呈现参数保存,不改 Markdown。核心实习和关键项目不得为了“一页”先被压缩,先用模板结构和排版承载。

MCP 写入采用服务端工作流引导:resume_prepare → resume_read / resume_check → 变更 → resume_read / resume_check → resume_render → resume_metrics。每次写入、模板结构修改、布局保存、呈现参数保存或持久化调优后,服务端会返回检查、渲染和指标的推荐下一步,但不阻塞下一次有明确意图的迭代;简历内容允许 Agent 按用户意图重写、压缩、改名和重组,核心条目变化只作为审计警告返回。HTTP MCP 渲染后登记 renderId/contentHash,插件页会轮询轻量状态并刷新预览 iframe,由 iframe 将真实 DOM 测量回传给 resume_metrics;Agent 不应直接打开 file:// 预览文件来等待指标。硬门槛仅用于工作区绑定、路径安全、外部内容过期和未知图标等完整性问题。这个门槛只存在于 MCP 会话,不改变 DSH 内置工具和手动编辑入口。

工具 用途
jobhunt_init 初始化求职工作区
jobhunt_read / jobhunt_write 读取和写入简历材料
jobhunt_check 检查内容证据、目录和排版风险
jobhunt_template_list 查看 6 个内置模板和已保存的 composition 模板;不支持的模板会被忽略
jobhunt_template_copy 复制模板并建立独立版本
jobhunt_template_generate 从 DesignBrief 生成可校验的模板候选,不自动入库
jobhunt_template_validate 校验模板配置
jobhunt_template_save 创建 composition 模板;默认不覆盖已有自定义模板,覆盖必须显式确认影响
jobhunt_layout_validate 校验模块布局声明
jobhunt_layout_metrics 读取真实 A4 测量指标
jobhunt_template_autotune 根据指标做有限轮次调优
jobhunt_template_versions / jobhunt_template_restore 查看模板历史修订;按指定修订或最新历史修订恢复为新的当前修订
jobhunt_render 生成或刷新预览

jobhunt_template_autotune 默认只返回草稿建议,不会因为一次试调就写入共享配置;只有用户接受后才显式传 persist=true 提交。模板 CSS 或结构修改则由工作台在保存、另存为或打印边界询问是否复制为新模板。

推荐的 Agent 工作顺序是:

初始化 → resume_prepare → 读取材料和 JD → 检查证据 → 生成投递版
→ 选择或生成模板候选 → 校验 → 保存并重新列出确认
→ 用精确模板 ID 渲染 → 读取 A4 指标
→ 有界调优 → 用户确认 → 复制/保存模板修订 → 再检查和渲染

模板生成的完成判定不是“AI 返回了候选 JSON”,而是 jobhunt_template_save 成功,随后 jobhunt_template_list 能查到该 ID,并且 jobhunt_render 使用同一个 templateId 成功刷新预览。 不支持的旧模板不会进入模板库;需要使用时应重新生成 composition 模板。

文件结构

jobhunt/
├─ profile.md                 # 求职意向、城市、到岗时间
├─ resume.md                  # 通用简历底稿
├─ resume.layout.json         # 模块顺序和布局声明
├─ story-bank.md              # 项目 / 实习素材库
├─ notes.md                   # 缺口、反馈和待补证据
├─ templates/
│  ├─ default.md              # 内容结构基线
│  └─ default.css             # 工作区自定义样式
└─ companies/
   └─ 公司-岗位/
      ├─ jd.md                # 岗位描述
      ├─ resume.md            # 该岗位投递版
      └─ preview.html         # 渲染预览

模板可以扩展布局,但不需要把私有渲染语法塞进每一份简历正文。内容保持可读,布局放在 resume.layout.json,视觉参数放在模板 Schema 中。

安全边界

这个插件把“投递前确认”放在核心位置:

  • 不应编造学校、项目、实习、奖项或数据
  • 不自动替你投递
  • 不自动替你最终导出 PDF
  • 不把模板选择等同于内容覆盖
  • 不要求你把简历提交到插件仓库
  • Agent 生成的内容仍然需要你确认真实性

建议始终告诉 Agent:不要编造;缺少证据就标出来,写进 notes.md

常见问题

我只想改措辞,必须打开模板吗?

不需要。直接让 Agent 修改 resume.md 或某个公司的投递版,模板和视觉可以保持不变。

应用模板会改动原模板吗?

不会。模板是视觉基线,简历内容单独保存。只调整当前简历的参数时,设置绑定到简历版本;需要改结构或 CSS 时,系统基于选中模板生成副本。内置模板不可变,已有自定义模板也不会被 AI 默认覆盖。

模板副本和版本怎么管理?

模板库会显示来源、修订号和历史版本。小的字号、行距、图标调整不会生成新模板;结构性改造在确认后生成副本,副本内部继续保留 v1、v2 等修订。恢复历史版本会生成新的当前修订,不删除旧记录。

为什么页面显示 1 页,但看起来还是不对?

因为“1 页”只代表没有分页,不代表排版平衡。请继续看底部留白、内容密度和模块断裂;插件会把这些状态区分出来。

能不能让 Agent 自动调到刚好一页?

可以。先让它读取 jobhunt_layout_metrics,再要求最多 3 轮有界调优。每轮必须重新渲染和复核,避免无限试错或把字号压得过小。

Agent 思考很久会被插件判定失败吗?

不会再使用固定秒数判定主对话失败。长思考、连续工具调用和等待确认会保持真实状态;如果你不想继续等,可以在 AI 助手里主动停止等待,主对话本身不会被取消。

Agent 写入新文件后需要我手动刷新吗?

不需要反复打开 Settings。主对话产生新的 jobhunt_render 或模板保存事件后,工作台会自动刷新文件列表、模板和 A4 预览;顶部也保留一个轻量的“刷新预览”按钮。若你有未保存的 Markdown 草稿,插件不会静默覆盖,而会提供“读取最新文件”按钮。

简历数据会上传到 GitHub 吗?

不会自动上传到本仓库。简历内容保存在你选择的本地工作区(旧版默认目录仍兼容);模型调用和数据传输仍遵循你的 DeepSeek Harness 配置。

开发与贡献

git clone https://github.com/L3n3L/dsh-resume.git
cd dsh-resume

# 本地开发时,可将插件链接到 web profile 后启动 Harness
dsh plugin --profile web add link:.
dsh web

主要目录:

  • client/client.js:工作台、编辑器、A4 预览和 AI 助手
  • lib/renderer.js:Markdown、模板和固定 A4 页面渲染
  • lib/template-generation.js:DesignBrief 到安全 TemplateSpec 候选生成
  • lib/template-presets.js:内置模板
  • lib/autotune.js:排版指标和有限调优逻辑
  • index.js:插件工具、工作区和 Harness 对接

License

MIT © L3n3L