dsh-rxresume
DSH plugin that talks to the Reactive Resume REST API directly: create, read, patch, and manage resumes over /api/openapi with an API key. 直接对接 Reactive Resume REST API 管理简历的 DSH 插件。
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 23, 2026
- Updated
- Aug 23, 2026
Introduction
dsh-rxresume
A DeepSeek Harness (
dsh) plugin that manages your resumes on Reactive Resume — by talking to its REST API directly (/api/openapi,x-api-keyauth), with no MCP hop.
Create and edit resumes right from a harness session. Every operation is a native, schema-validated tool the model can call — read before patching, edit content with JSON Patch, roll back to any version.
Install
# from the parent directory of this package:
dsh plugin --profile <name> add ./dsh-rxresume
Or straight from the repo:
dsh plugin --profile <name> add github:Triple3h/dsh-rxresume
The bundle patch reads RXRESUME_API_KEY from the environment. Without a key the plugin installs inert (a warning, no tools), so adding it before configuring never leaves a profile unbootable.
What you get
The plugin registers a set of first-party tools (native tool cards, schema-validated args) that mirror the Reactive Resume REST surface:
| Tool | What it does |
|---|---|
resume_list | List resumes (metadata, tag filter, sort) — the way to discover IDs |
resume_get | Read one resume's full data document |
resume_create | Create a resume (optionally pre-filled with sample data) |
resume_import | Create a resume from a complete ResumeData document |
resume_patch | Edit content via RFC 6902 JSON Patch operations |
resume_update | Change metadata: name, slug, tags, public visibility |
resume_duplicate | Copy a resume (e.g. job-specific variants) |
resume_delete | Permanently delete a resume |
resume_lock / resume_unlock | Protect / unprotect a resume against edits |
resume_versions / resume_restore_version | Version history and non-destructive rollback |
The plugin also contributes a system-prompt section teaching the model the workflow that matters for resume editing: read before patching, UUID-keyed section items, valid-HTML rich text, atomic multi-op patches, and unlock → edit → re-lock for locked resumes.
Configure
Mint an API key in the web app at <url>/dashboard/settings/api-keys, then:
export RXRESUME_API_KEY=rrk_...
dsh --profile <name>
To override any option, patch the row by id in your profile's cordis.patch.yml:
- id: rxresume
config:
apiKey: !!js process.env.RXRESUME_API_KEY
url: http://localhost:3000 # self-hosted origin (Docker 3000; pnpm dev 3001; no trailing slash)
timeoutMs: 30000
| Key | Default | Description |
|---|---|---|
apiKey | '' | API key from <url>/dashboard/settings/api-keys. Empty mounts nothing. |
url | http://localhost:3000 | Server origin. Docker/compose self-hosting listens on 3000; the pnpm dev server on 3001; hosted service https://rxresu.me. |
timeoutMs | 30000 | Per-request timeout. |
For a local instance of reactive-resume: Docker/compose serves the whole app on port 3000 (docker compose up), the dev server (pnpm --filter @reactive-resume/server dev) on 3001. Sign in through the web app and mint a key in settings.
How it works
- Each tool wraps one REST endpoint of the server's OpenAPI surface (
packages/apiin the reactive-resume monorepo defines them):GET/POST /api/openapi/resumes,PATCH /api/openapi/resumes/{id}(JSON Patch),PUT(metadata),/duplicate,/lock,/versions/.... - Tool parameters are validated by the dsh-tools schema DSL before execution; outputs are narrow, plugin-constructed envelopes validated against a declared schema — a server response can never silently break the tool contract.
- API failures are converted to actionable errors (
locked → resume_unlock first,404 → resume_list, slug conflicts, version conflicts). - Every request carries
x-api-key, a per-request timeout, and honors the harness's cancellation signal.
Compared to the official dsh-plugin-reactive-resume (which bridges the server's MCP endpoint): this plugin needs no MCP client runtime, registers plain first-party tools (native tool cards, schema-validated args), and adds lock/version workflows in the prompt guide.
Requirements
- Node
^22.19.0 || >=24.0.0 - A Reactive Resume instance (hosted
https://rxresu.meor self-hosted) reachable from the harness host
Development
pnpm install
pnpm test # vitest (fetch stubbed; also locked against the live error shape)
pnpm run typecheck
pnpm run build # tsdown -> dist/
Version notes: @deepseek-ai/* packages must come from the next dist-tag line (^0.1.1-rc.2); the latest tag is stale. Cordis is a peer dependency — the host provides it.
License
MIT