diff --git a/README.md b/README.md index 7aa162b..4ee4f05 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,11 @@ careercoach-plugin/ - **HTML → PDF, not LaTeX.** The upstream project's biggest tax is LaTeX page-break firefighting. We render via the **artifact plugin** (HTML → PDF) by default — the agent can *see* the rendered result — and keep `.tex`/moderncv as an option (with the upstream gotchas preserved, credited). +- **Native `.docx` too (`render_format: docx`).** Set it and the CV + cover letter are produced as + real, editable **Word files** via [cowork](https://github.com/protoLabsAI/cowork-plugin)'s `docx` + skill, then saved with `save_file_artifact` as **versioned, downloadable** artifacts (ADR 0092, + protoAgent v0.107.0+) — what most ATS forms actually want. Needs cowork + `execute_code` + a + v0.107.0 host; falls back to HTML→PDF otherwise. A soft pairing: no hard dependency. - **A coach, not an autopilot.** `career-strategy` + `interview-coach` are human-in-the-loop by design; the `apply` workflow is the opt-in "do it for me" path. - **Gated vs. autonomous, on purpose.** The full application exists in two shapes: the `apply` diff --git a/protoagent.plugin.yaml b/protoagent.plugin.yaml index 99b65a7..1b9a644 100644 --- a/protoagent.plugin.yaml +++ b/protoagent.plugin.yaml @@ -1,6 +1,6 @@ id: careercoach name: Career Coach -version: 0.3.2 +version: 0.4.0 description: >- Your career coach and job-hunt copilot. Talk through strategy and positioning, run mock interviews with honest feedback, get a straight critique of your CV, @@ -30,7 +30,7 @@ config: full_name: "" location: "" target_roles: "" - render_format: "html" # how CVs / cover letters are produced: html (artifact → PDF) | latex + render_format: "html" # how CVs / cover letters are produced: html (artifact → PDF) | docx (real Word file → save_file_artifact) | latex packet_root: "" # workspace for the gated role-packet flow (Companies//Roles/…); blank → ~/CareerCoach jobs_api_key: "" jobs_provider: "auto" # job source: auto (jsearch when a key is set, else remotive) | jsearch | remotive @@ -42,7 +42,7 @@ settings: - { key: full_name, label: "Your name", type: string, group: "Career Coach", description: "Used on generated CVs and cover letters, and to greet you on the dashboard." } - { key: location, label: "Location", type: string, group: "Career Coach", description: "City / country and any commute constraints — feeds the location pass/fail gate in job evaluation." } - { key: target_roles, label: "Target roles", type: string, group: "Career Coach", description: "The role types you're aiming for (comma-separated), e.g. 'ML engineer, data scientist'. Seeds strategy + search." } - - { key: render_format, label: "Document format", type: string, group: "Career Coach", description: "How CVs / cover letters are produced: 'html' renders via the artifact plugin (HTML to PDF, no LaTeX toolchain) or 'latex' for the classic moderncv .tex export." } + - { key: render_format, label: "Document format", type: string, group: "Career Coach", description: "How CVs / cover letters are produced: 'html' renders via the artifact plugin (HTML to PDF, no LaTeX toolchain); 'docx' produces a real editable Word file via the cowork docx skill and saves it as a versioned download-artifact (needs cowork + execute_code + a protoAgent v0.107.0+ host; falls back to html otherwise); 'latex' for the classic moderncv .tex export." } - { key: packet_root, label: "Role-packet workspace", type: string, group: "Career Coach", description: "Folder where the gated role-packet flow files a folder per role (Companies//Roles//) plus your Experience source-of-truth and story bank. Blank defaults to ~/CareerCoach. Point it at wherever you keep your job hunt so you can open and edit the artifacts directly." } - { key: jobs_api_key, label: "Job-source API key", type: secret, group: "Career Coach", description: "Optional. A RapidAPI key for JSearch (Google-for-Jobs). With it, live job search + the watch use JSearch; without it they fall back to the keyless Remotive remote-jobs board. Stored in secrets.yaml." } - { key: jobs_provider, label: "Job source", type: string, group: "Career Coach", description: "Which job API to use: 'auto' (JSearch when a key is set, else Remotive), 'jsearch', or 'remotive'." } diff --git a/skills/job-application-assistant/SKILL.md b/skills/job-application-assistant/SKILL.md index 15afee7..67178ee 100644 --- a/skills/job-application-assistant/SKILL.md +++ b/skills/job-application-assistant/SKILL.md @@ -44,7 +44,8 @@ that step (progressive disclosure), don't inline them all up front: - Start from the user's existing CV/profile; reframe *emphasis*, never fabricate (see the honesty test in `writing-style.md`). - Render per the operator's `render_format` (default `html` → the artifact plugin → PDF; - `latex` → moderncv `.tex`). Inspect the rendered result; iterate until it's clean. + `docx` → a real Word file via cowork's `docx` skill → `save_file_artifact`; `latex` → moderncv + `.tex`). See `cv-guide.md` for each path. Inspect the rendered result; iterate until it's clean. ### Step 3 — Write the cover letter (on request) - Read `cover-letter-guide.md` and `writing-style.md`. diff --git a/skills/job-application-assistant/cover-letter-guide.md b/skills/job-application-assistant/cover-letter-guide.md index 29bd046..bef8751 100644 --- a/skills/job-application-assistant/cover-letter-guide.md +++ b/skills/job-application-assistant/cover-letter-guide.md @@ -9,6 +9,11 @@ - **`html`** (default) — one self-contained HTML letter with print CSS, rendered by the artifact plugin and exported to PDF. Match the CV's font + accent so the pair looks like a set. +- **`docx`** — a real editable **Word letter** to match a docx CV. Build it with cowork's + **`docx`** skill (`load_skill('docx')`, `python-docx`), save to disk, then + **`save_file_artifact(path, title=" — Cover Letter — ")`** for a versioned, + downloadable file. Same requirements + fallback as the CV (`cv-guide.md`): needs cowork + + `execute_code` + a v0.107.0+ host, else fall back to `html`. - **`latex`** — the custom `cover.cls` (Lato/Raleway, XeLaTeX); see the appendix. ### HTML letter — house style diff --git a/skills/job-application-assistant/cv-guide.md b/skills/job-application-assistant/cv-guide.md index ec45451..a87e5b0 100644 --- a/skills/job-application-assistant/cv-guide.md +++ b/skills/job-application-assistant/cv-guide.md @@ -13,6 +13,14 @@ Follow `writing-style.md` for tone and the honesty test **before** writing any b - **`html`** (default) — build a clean, semantic one-file HTML CV with print CSS, hand it to the **artifact plugin** to render, then export/print to PDF. The agent can *see* the rendered result (it's a real page), so the "render → inspect → fix" loop needs no LaTeX knowledge. +- **`docx`** — a real, editable **Word file** (what many ATS forms and recruiters expect). Build + it with cowork's **`docx`** skill: `load_skill('docx')`, author the CV with `python-docx` + following the content discipline in this guide + `writing-style.md`, save it to disk, then + register it with **`save_file_artifact(path, title=" — CV — ")`** so it lands in the + Artifact panel as a **versioned, downloadable** file with a text preview. Needs the cowork plugin + + `execute_code` + a protoAgent **v0.107.0+** host (which bundles the doc stack). If any is + missing, **fall back to `html` and tell the user** — never silently skip. Save a revised CV as a + new version by passing the same `artifact_id`. - **`latex`** — produce a moderncv `.tex` (see the appendix). Use only if the user asks for it. ### HTML CV — house style diff --git a/skills/role-packet/SKILL.md b/skills/role-packet/SKILL.md index 3e01857..810c9b1 100644 --- a/skills/role-packet/SKILL.md +++ b/skills/role-packet/SKILL.md @@ -71,7 +71,9 @@ Read `evidence-map.md`, then `job-application-assistant`'s `cv-guide.md` and **` (read before writing any bullet). First build the **`evidence-map`**: every JD requirement mapped to your proof from `Experience.md` / the story bank, with gaps and stretches flagged honestly. *Then* write the **`tailored-resume`**, drawing only on what the evidence map supports. Surface any stretch -line for the user to keep, soften, or drop. Render per `render_format` if the user wants a PDF. +line for the user to keep, soften, or drop. Render per `render_format` if the user wants a file — +`html` → PDF, or `docx` → a real Word file saved as a versioned download-artifact (see `cv-guide.md`); +the `.docx` is what most ATS forms want. ### Phase 4 — Application skills / ATS entry · *gate: confirm* Read `ats-skills-entry.md`. Produce the **`skills-entry`** list — the discrete skills an ATS form asks