L3n3L/dsh-resume 预览 preview

L3n3L/dsh-resume

AI 写简历容易,但写完总会遇到模板难看、排版溢出、页面留白、改一处全局变形等问题。dsh-resume 专注解决“内容生成后的视觉复核”:让 AI 和用户一起把简历调到真正适合投递的刚好一页。AI can write a resume, but the result often looks unbalanced, overflows the page, leaves large blank areas, or breaks after a small edit. dsh-resume focuses on visual review after generation, helping AI and users refine the resume into a polished.

Project Overview项目介绍

dsh-resume is a DeepSeek Harness plugin that combines resume rewriting, A4 visual review, and layout tuning in one workbench. It shows a real A4 preview alongside editable Markdown, lets users switch visual directions through a template library, and has the agent reorder modules and reword content based on job descriptions using real layout metrics. It is intended for job seekers who need to tailor resumes for specific roles while controlling typography. The agent does not auto-export PDFs or fabricate facts; the user confirms content and triggers the final export.

dsh-resume 是 DeepSeek Harness 的简历工作台,将内容改写、A4 视觉复核与排版调优整合在同一界面。用户编辑 Markdown 时可同步查看真实 A4 预览,并通过模板库切换视觉方向;Agent 根据 JD 调整模块顺序与措辞,依据真实排版指标进行有界调优。适用于需要围绕岗位精修简历并把控版面的求职者。需注意:Agent 不会代为导出 PDF,最终内容与导出动作由用户在确认后完成。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

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

L3n3L/dsh-resume 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-resume

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

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

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

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

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

dsh-resume 工作台:Markdown、A4 预览与排版状态同屏

你会得到什么

  • 一边编辑 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 和排版状态放在同一视线内:

Markdown 与 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 助手:不是另一个聊天窗口

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

上一个 Prev dsh-huadongbianzuqi 下一个 Next dsh-soul-md