voice-interview-coach
Manifest validVoice Interview Coach ๐๏ธ
A DSH (DeepSeek Harness) plugin that turns the chat into a voice-driven mock interview. Give it your project, language, resume, and target role in natural language; it asks progressively harder questions, listens to your spoken answers, and finishes with a gap-analysis review you can export to Markdown and persist to memory.
Features
- ๐ฃ๏ธ Voice interview โ uses the browser's Web Speech API for both speech recognition and text-to-speech. A text fallback is always available.
- ๐ฏ Natural-language difficulty โ describe the target role and seniority any way you like (e.g. "้ซ็บงๅ็ซฏๅผๅๅทฅ็จๅธ๏ผ่ฆๆฑ้ซๅนถๅๅ็ณป็ป่ฎพ่ฎก๏ผๅ P7"). The model adjusts question depth automatically.
- ๐งฉ Question type chips โ pick any mix of ้กน็ฎๆทฑๆ / ็ณป็ป่ฎพ่ฎก / ็ผ็จ่ฏญ่จๅบ็ก / ๅ ซ่กๅ็ / ่กไธบ้ข่ฏ / ็บฟไธๆ ้ / ็ฎๆณ็ผ็ / ๅทฅ็จๅฎ่ทต.
- ๐ Resume upload โ supports
.txt,.md,.json,.csvnatively, plus PDF and DOCX parsed in the Host with no native dependencies (a tiny built-in FlateDecode / zip-XML reader). - ๐ Structured review โ scores per dimension, strengths, gaps with study plans, better-answer suggestions, and a prioritized action list.
- ๐พ Memory โ every review (with transcript) is written to
.interview-memory/interview-<timestamp>.mdinside the current workspace so future sessions can read it. - ๐ History & trend analysis โ list past interviews, select any subset, and ask the model to produce a trend report highlighting recurring weak spots.
- โฌ๏ธ One-click Markdown export.
Requirements
- DSH
>= 0.1.0-rc.6(Cordis dynamic-plugin runtime) - A configured
llmProvider in your DSH deployment - A Chromium-based browser (Chrome / Edge / Arc) for speech recognition; Firefox/Safari can still use text mode
Installation
From a DSH plugin marketplace
Once the package is published, install it from the Plugins settings page in DSH.
From this repository
# 1. clone or download this repo into your DSH plugin path
git clone https://github.com/<your-org>/dsh-voice-interview-coach.git
# 2. add a row to your agent preset or host composition (cordis.yml):
# - id: voice-interview-coach
# apply: ./dsh-voice-interview-coach
Because the plugin is plain JavaScript with zero npm dependencies, there is no npm install step. The Host requires Node's built-in zlib (already available).
Usage
- Open the DSH session where the plugin is loaded. Run the
cordis_define/cordis_runcard (or the plugin's own entry point). - Fill in:
- Target role / difficulty โ natural language
- Focus / style โ what the interviewer should probe (optional)
- Question types โ chip multi-select
- Project, programming language, resume (paste or upload)
- Question count (3โ15)
- Click ๅผๅง่ฏญ้ณ้ข่ฏ. The interviewer speaks the first question.
- Click ๐ ่ฏญ้ณๅ็ญ (or type in the textarea and press Enter) after each question.
- When the count is reached โ or you click ็ปๆๅนถๅค็ โ the review appears.
- Use โฌ ๅฏผๅบ Markdown to download it, ๐พ ๅๅ ฅ่ฎฐๅฟ to re-save it, and switch to the ๅๅฒๅฏนๆฏ tab to compare multiple interviews.
How it works
โโโโโโโโโโโโโโโโ Browser (Client) โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโ Host (Node) โโโโโโโโโโโโโ
โ React UI in `tool.view.cordis` slot โ โ harness.handle(): โ
โ โข SpeechRecognition / SpeechSynthesis โ RPC โ โข startInterview / submitAnswer โ
โ โข File upload (base64 for PDF/DOCX) โโโโโโโโโโผโโโโโโบโ โข parseResume (PDF/DOCX via zlib) โ
โ โข Markdown download, history selection โ โ โข listHistory / compareHistory โ
โ โ โ โข saveMemory โ <workspace>/.interview-memory/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ctx.llm.stream(...) for Q&A/review โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The plugin follows the standard Cordis lifecycle โ every side effect is tied to the plugin fiber, so stopping/uninstalling removes all listeners and UI registrations cleanly.
Configuration
| Field | Where | Default | Description |
|---|---|---|---|
| Memory directory | Host | <workspace>/.interview-memory/ | Where review Markdown files are stored |
| Resume size limit | Client | 5 MB upload, 20 000 chars after parsing | Larger resumes are truncated before being sent to the model |
| LLM provider | Host | first registered provider | Selected via ctx.llm.listProviders()[0]; change in code or configure your deployment's default |
| Speech language | Client | zh-CN | Change rec.lang / SpeechSynthesisUtterance.lang in src/client.js |
Development
# Verify package metadata
npm run lint:meta
# Dry-run the npm tarball
npm run pack
To iterate inside a live DSH session, edit src/host.js / src/client.js and either:
- reload the plugin row in your DSH composition, or
- copy the function bodies into a
cordis_definecall to test instantly.
Project layout
.
โโโ package.json # plugin manifest (the `dsh` block is the DSH entry)
โโโ src/
โ โโโ host.js # Node half: LLM, PDF/DOCX parsing, memory, history
โ โโโ client.js # Browser half: React UI, speech I/O, file upload
โโโ assets/icon.svg # plugin icon
โโโ scripts/verify-package.js
โโโ docs/ # longer design notes
โโโ README.md
โโโ LICENSE
Roadmap
- Optional cloud ASR (Volcengine/Whisper) for better Chinese recognition
- JD/URL ingestion for job description alignment
- Multi-session concurrent interviews (currently one per fiber)
- Per-skill review trends across weeks/months
- English UI
Privacy
Resumes and interview transcripts are sent to whichever llm provider your DSH deployment is configured to use. They are also stored as plain Markdown under .interview-memory/ inside the workspace. Do not use this plugin with sensitive personal data unless you trust both the model provider and the workspace storage.
License
MIT ยฉ 2025
Comments
Loadingโฆ