en un clic
coverletter
Generate a strategic cover letter with requirements-matching table from Step 3 resume
Menu
Generate a strategic cover letter with requirements-matching table from Step 3 resume
Build a complete resume through all 3 steps (draft, provenance check, final)
Initialize JobOps workspace - configure output directories, install templates, and optionally migrate legacy files
Assess candidate against job posting using pre-created scoring rubric
Compare assessment files across application folders under applications_root
Interview-driven generation of three market-validated ideal-role archetypes (Anchor, Stretch, Pivot) from career history, elicited preferences, and high-scoring assessment patterns
Render an application statusboard from a reconciled YAML tracker and (on Claude Code) drive an interactive navigate-and-act loop over the application pipeline
| name | coverletter |
| description | Generate a strategic cover letter with requirements-matching table from Step 3 resume |
| disable-model-invocation | true |
Read .jobops/config.json. If missing, stop with:
JOBOPS NOT CONFIGURED Run /jobops:setup to initialize your workspace.
Use config.directories.<key> for all file paths in this skill.
Use config.preferences.cultural_profile if this skill generates resume-style content.
Use config.preferences.default_jurisdiction if this skill has jurisdiction-sensitive logic (crisis/legal skills accept --jurisdiction=<ISO-3166-2> to override).
Resolve the effective mode: the --mode= flag if present and valid, else config.preferences.cover_letter_mode, else retrospective (a config written before this key existed has no cover_letter_mode; treat the absence as retrospective). Reject an invalid --mode= value with: Invalid --mode value. Use retrospective or forward.
step4-cover-letter agent (Step 3 below), unchanged.step4-cover-letter-forward agent.Forward mode never drafts without this interview, because the agent runs non-interactively and cannot ask the candidate anything mid-run. Before dispatch:
{config.directories.company_intelligence}/{Company}/ (corporate.md, legal.md, leadership.md, market.md). Do not run web searches here — the agent's Step 3a pipeline does the deep verification. Summarize the candidate-facing problem set in 2–4 bullets so the candidate reacts to evidence rather than inventing problems.--mode=retrospective) produces a letter without one.step4-cover-letter-forward agent in its dispatch prompt.For each template used by this skill, resolve the full path as:
{config.templates.base_dir}/{config.templates.active.<template_name>}/
This skill writes to a per-application folder. Before writing any output:
{Company}_{Role}_{YYYYMMDD} from the job-posting filename, or honor --app=<slug> if supplied. The slug MUST be canonical: a leading PascalCase {Company} token (matching the Company_Intelligence/{Company}/ folder so OSINT links), a PascalCase {Role} (underscores between words allowed), and a trailing compact 8-digit date (20260519 — no hyphens, no time). Reject leading date/time prefixes such as 2026-04-15_214414_...; if the source filename carries one, recompose it into canonical form ({Company}_{Role}_{YYYYMMDD}) before composing the folder path.{config.directories.applications_root}/{app_slug}/.resume/cover-letter/assessment/interview/mkdir -p it, then copy
{config.directories.job_postings}/{filename} → {app_slug}/job_posting.md
so the pinned JD cannot silently change under completed work. Ensure the pinned copy
begins with YAML front matter carrying output_type: job_posting: if the source JD
already has a front-matter block, add the key to it; otherwise wrap a new block
(--- / output_type: job_posting / source_jd: {filename} / ---) above the JD body.--app=<distinct-slug>.cover-letter/cover_letter.md.$1: Step 3 final resume file path (required)$2: Job description file path (required)$3: Hiring manager name (optional, defaults to "Hiring Manager")--mode=retrospective|forward (optional): overrides config.preferences.cover_letter_mode for this invocation. Invalid values are rejected with a message listing the two valid values; the skill does not silently fall back.Produces a compelling cover letter based on the validated Step 3 resume. In the default retrospective mode it features a strategic requirements-matching table that directly demonstrates fit for the role; in forward mode (--mode=forward) it produces a dual-anchored first-90-days plan instead (see Configuration). The retrospective process:
First, let me read your Step 3 final resume:
@$1
Now loading the job description to extract critical requirements:
@$2
Running Step 4 Agent...
If the effective mode is forward, run the intake interview (see Configuration → "Forward intake interview") before dispatching. Retrospective mode requires no interview; proceed directly to dispatch.
I dispatch the agent that matches the effective mode resolved in Configuration:
step4-cover-letter agent: a contact header followed by seven body elements (fit-led opening, context/role reframe, Requirements Alignment table, "On X:" evidence paragraphs, honest-limitation, forward-looking close, signature), every claim traced to the Step 3 resume and verified primary sources.step4-cover-letter-forward agent, with the intake-interview answers and primed problem set passed in. It proposes a dual-anchored first-90-days plan: a First-90-Days Plan table (problem → action → proof) and "How I'd approach X:" paragraphs, where every proposed action sits on a real evidenced problem and a concrete past proof point. The fit-led opening, context paragraph, honest-limitation, voice discipline, primary-source verification, and Step 6a sub-agent review are shared with retrospective mode.The letter opens with a contact block sourced from config.candidate (set during /jobops:setup), rendered as two lines:
{name}, {credentials}
{location} | {phone} | {email} | LinkedIn: {linkedin} | GitHub: {github}
Phone is a distinct field joined with |; it is never concatenated onto the email. Empty fields are omitted cleanly with no orphan separators (a blank github drops the GitHub: … segment and its separator). Contact values are never hand-typed into the letter; they come from config so they stay consistent and never get fused.
Applies to retrospective mode. Everything from here to the end of this skill (the seven-element structure, the requirements-matching table, and the gold-standard exemplar) specifies the retrospective letter. In forward mode the
step4-cover-letter-forwardagent is authoritative instead: it produces a dual-anchored first-90-days plan with a First-90-Days Plan table and "How I'd approach X:" paragraphs. The contact header (above), voice discipline, and provenance rules are shared across both modes; the seven-element structure and Requirements Alignment table below do not apply to a forward letter.
The agent writes the body in this order. Each element is mandatory unless explicitly marked optional in the agent.
verb + quantity + result.Sincerely, / signature image / {Candidate Name}, {post-nominals}.primary_sources YAML block (see Output below) is the audit ledger; status: verified sources are the only ones that may appear in the letter prose.primary_sources block is reconciled so it stays accurate.Imitate this letter for structure and voice, not for content. All names, firms, contact values, and product references below are placeholders (John Smith / ABC Inc. / XYZ Corp / (555) 555-0123 etc.) — the real letter substitutes the actual hiring manager, target firm, prior employers, named systems from the candidate's record, and the contact values from config.candidate. Notice the contact header with a distinct phone field, how the fit-led opening leads with the candidate's own record (not a diagnosis of the employer), how company insight is demoted to the context paragraph, and how the honest-limitation paragraph uses the explicit AI-authorship split.
John Smith, CFA, FRICS Toronto, ON | (555) 555-0123 | john.smith@example.com | LinkedIn: /in/johnsmith | GitHub: /johnsmith
May 28, 2026
ABC Inc.
Dear John:
I'm applying for the Associate Director, Customer Success and Innovation role. I have spent my career taking technical requirements all the way to running software that non-technical colleagues actually use: internal-facing systems, plain-language query tools, and the workshops that turn leaders into hands-on operators. Enterprise AI governance at this scale is new to me; the translation work between business demand and delivery is not.
By design, ABC Inc. has front-loaded the hard parts. The demand, the governance, and the delivery capacity already exist, and oversight of AI now sits at the Board-committee level against a policy that draws a hard line between Custom and Public AI. What does not arrive with capacity is translation. The binding constraint is no longer capability but the customer-facing function inside the technology group that turns business-unit demand into governed, delivered tools. That is this role: triaging internal AI requests, framing build-vs-buy against Custom-versus-Public obligations, taking POCs to production, and running the workshops that turn leaders into builders. That intersection is the center of my experience.
[Requirements Alignment table maps each requirement to one evidence cell with metrics: enterprise SaaS rollout 90% adoption month 1; 25 production systems / 3,000+ commits; production SQLite schema design with FTS5 + sqlite-vec; XYZ Corp to DEF Inc. to GHI Holdings VP plus CFA/FRICS; CEO/executive quarterly reporting over a nine-year VP tenure.]
On POC-to-production: I have already built the kind of system this role describes, an internal-facing tool that sits next to a non-technical user and answers their questions on demand. My relationship-intelligence system lets me query a database in plain language and get structured answers back, the same pattern ABC Inc. would use to seat AI beside a property asset manager or an investment analyst. A second system took a piece of my own consulting methodology and turned it into a tool a colleague can actually run. The through-line is that I take ideas to working software people use, not slideware, which is exactly where most internal AI programs stall.
On the workshop side: at JKL Corp. (2022 to 2024) I designed and delivered an AI-powered property-acquisitions onboarding program (600+ pages of training content and twenty fifteen-minute audio episodes, built in two months). The program cut new-hire ramp-up time by 50%, validated with new hires. I have since formalized the underlying methodology into a CRE AI training curriculum for commercial real estate professionals. The methodology is portable. The same architecture would convert ABC Inc. analysts and managers from prompt-readers into agent-builders inside their respective customer domains.
What I do not bring is enterprise-scale data-warehouse experience; I own the specification, schema, and query architecture, and pair-program the build with Claude Code and Codex. What I do bring is rarer: institutional CRE fluency at platform depth, plus a track record of taking requirements all the way to running systems. That is the exact intersection where the AI Governance Policy now needs translating into customer-facing work.
The first 12 months of the Customer Success and Innovation function will define how that translation actually happens. I would like to be inside the room when those decisions are made.
Sincerely, [signature image] John Smith, CFA, FRICS
The exemplar is a model for form, not for content. The agent will not copy its institutional facts into a letter for a different firm, and will not reuse this exemplar's primary_sources: block.
Your strategic cover letter will be saved as:
{applications_root}/{app_slug}/cover-letter/cover_letter.md
Before the letter content, write this YAML metadata block with actual values. The primary_sources ledger is mandatory whenever the context paragraph (element 2) uses verified primary sources; it is the audit trail that lets the hiring panel confirm the candidate did the work.
---
job_file: $2
role: <role title>
company: <company name>
candidate: <full candidate name>
generated_by: /coverletter
generated_on: <ISO8601 timestamp>
output_type: cover_letter
status: final
version: 1.0
primary_sources:
- title: <document title>
date: <YYYY-MM-DD>
url: <public URL fetched during verification>
status: verified | unverified
verified_on: <ISO8601 timestamp when WebFetch confirmed the document; null if unverified>
used_in: <context-paragraph | body-paragraph-2 | table-row-3 | not-used>
notes: <optional context, e.g. "paywalled", "retrieved from web archive", "OSINT corporate.md said 2025; primary source confirms December 2024">
---
Rules for the primary_sources block (enforced by the agent):
status: verified sources may appear in the letter prose. Unverified candidates may be listed for reference but never cited.primary_sources block is updated so it stays accurate.primary_sources block appears verbatim across letters to different firms, the letter is not firm-specific and must be rewritten from a fresh acquisition.primary_sources: [] and have the agent write the leaner fallback context paragraph (the fit-led opening is unchanged). Valid skip conditions: private_firm_no_public_record, generic_role_any_firm, ats_screened_pipeline, insufficient_verified_primary_sources.Update timestamps and increment version on subsequent iterations.
The cover letter will:
After generation, you'll have:
The cover letter and resume work together as a cohesive application package, with every claim defensible and every achievement traceable to your comprehensive work history.