← Back to Skills Marketplace
jerronl

Jobautopilot Tailor

by jerronl · GitHub ↗ · v1.3.0 · MIT-0
cross-platform ✓ Security Clean
221
Downloads
0
Stars
0
Active Installs
18
Versions
Install in OpenClaw
/install jobautopilot-tailor
Description
Tailors your resume and cover letter to a specific job description. Fetches the JD, rewrites bullet points to match keywords, and exports polished .docx file...
README (SKILL.md)

Job Autopilot — Resume Tailor

Produces a tailored resume and cover letter for each shortlist job in the tracker. Delivers .docx files ready to attach and send.

Core principles

  1. 100% truthful — never invent experience, inflate metrics, or fabricate credentials.
  2. Resume content comes from the user's original files first — always read $RESUME_DIR before writing anything.
  3. md before docx — complete markdown drafts for ALL shortlisted jobs first, then convert to docx in batch. Do not interleave md writing and docx conversion.
  4. One job at a time for reporting — finish and report each job's result before moving to the next.
  5. No silent spinning — if a job cannot be reliably completed within 30 minutes, mark it error with a clear reason and move on.

Setup

Add to ~/.openclaw/workspace/job_search/config.sh:

export RESUME_DIR="$HOME/Documents/jobs/"           # your original resume files live here
export RESUME_OUTPUT_DIR="$HOME/Documents/jobs/tailored/"  # where tailored files are saved
export RESUME_TEMPLATE="$HOME/.openclaw/workspace/job_sub_agent/scripts/sample_placeholders.docx"
# Download template: https://github.com/jerronl/jobautopilot/raw/main/jobautopilot-tailor/scripts/sample_placeholders.docx
export MD_TO_DOCX_SCRIPT="$HOME/.openclaw/workspace/job_sub_agent/scripts/md_to_docx.py"
export JOB_SEARCH_TRACKER="$HOME/.openclaw/workspace/job_search/job_application_tracker.md"
export USER_FIRST_NAME="Your"
export USER_LAST_NAME="Name"
export USER_EMAIL="[email protected]"
export USER_PHONE="+1-555-000-0000"
export USER_LINKEDIN="https://linkedin.com/in/yourprofile"
mkdir -p "$RESUME_OUTPUT_DIR"

Session start

Read in order:

  1. $RESUME_DIR — understand the user's full experience and skills
  2. $JOB_SEARCH_TRACKER — find all shortlist entries to process

JD fetch order

For each shortlist job:

  1. Use the exact URL from the tracker
  2. Try web_search first to extract job responsibilities, skills, keywords, asset classes
  3. If web_search returns no useful JD, use browser to open the URL directly
  4. If the URL is broken, a generic careers page, or wrong role → mark tracker error and explain why

Content production order

For each job, strictly in this sequence:

Step 1 — Read source material

Read all files in $RESUME_DIR. The pool may contain:

File type What to extract
Master resume (.docx / .pdf) Full work history, bullet points, metrics, dates. PDF text is extracted by the agent's built-in tools; the conversion script handles .docx and .md only.
Older tailored versions Phrasing that worked well for similar roles
Cover letter drafts Preferred voice, opening formulas, recurring themes
Skills list / bio (.md / .txt) Certifications, tools, side projects, publications

Extract everything factual — every bullet, every metric, every tool name. This is your raw material. Do not invent anything not present in these files.

Resume markdown format specification

The markdown file must follow this exact format. md_to_docx.py parses it structurally — any deviation will produce wrong or missing output.

Full Name
Email | Phone | LinkedIn | Location

SUMMARY
Two to three sentences summarizing the candidate.

CORE SKILLS
List of skills, tools, and technologies relevant to this role.

EXPERIENCE
Job Title — Company Name | City, ST | Jan 2022 – Present
• Accomplished X by doing Y, resulting in Z
• Another bullet point with a metric

Job Title — Company Name | City, ST | Jun 2019 – Dec 2021
• Bullet point
• Bullet point

EARLIER EXPERIENCE
Earlier Role — Company, Year–Year
Another Earlier Role — Company, Year–Year

EDUCATION
University Name — Degree, Major (Year)

Parsing rules the script enforces — follow these exactly:

Element Rule
Line 1 Full name, plain text, no # heading marker
Line 2 Contact info, pipe-separated
Section headers ALL CAPS, no ## — exactly SUMMARY, CORE SKILLS, EXPERIENCE, EARLIER EXPERIENCE, EDUCATION
Job header Title — Company | Location | Date range — separator is (em dash with spaces), fields separated by |
Bullets Start with or -, one per line
Earlier experience One line per entry: Role — Company, Years
Education One line per entry: University — Degree

What the script handles automatically:

  • More jobs than template slots → clones the last job's formatting
  • Fewer jobs than template slots → removes unused placeholders
  • Same logic for bullets, earlier experience, and education entries

Step 2 — Write resume markdown

Tailor bullet points to match the JD keywords. Prioritize:

  • Skills explicitly mentioned in JD
  • Quantified achievements relevant to the role
  • Asset classes, systems, or methodologies named in JD

Save to: $RESUME_OUTPUT_DIR/${USER_FIRST_NAME}_\x3CCompany>_\x3CTitle>_Resume_2026.md

Self-check before converting to docx

Before running md_to_docx.py, verify the markdown against these rules:

# Line 1 must be plain name (no # prefix)
head -1 resume.md

# Line 2 must contain pipes (contact info)
sed -n '2p' resume.md | grep '|'

# Section headers must be ALL CAPS with no ## prefix
grep -E '^[A-Z ]+$' resume.md

# Job headers must match: Title — Company | Location | Date
grep -E '^.+ — .+ \| .+ \| .+$' resume.md

# Bullets must start with • or -
grep -E '^[•\-]' resume.md

If any check fails, fix the markdown before proceeding — a malformed file will silently produce an incomplete docx.

Step 3 — Write cover letter markdown

Three paragraphs max:

  1. Why this role + company
  2. Most relevant experience match (2–3 specific points)
  3. Brief close

Save to: $RESUME_OUTPUT_DIR/${USER_FIRST_NAME}_\x3CCompany>_\x3CTitle>_Cover_Letter_2026.md

Step 4 — Update tracker

Change status to md_ready. Record md file paths.

Step 5 — Generate docx files

Resume — use md_to_docx.py with the template:

python3 "$MD_TO_DOCX_SCRIPT" \
  --input "$RESUME_OUTPUT_DIR/${USER_FIRST_NAME}_\x3CCompany>_\x3CTitle>_Resume_2026.md" \
  --template "$RESUME_TEMPLATE" \
  --output "$RESUME_OUTPUT_DIR/${USER_FIRST_NAME}_\x3CCompany>_\x3CTitle>_Resume_2026.docx"

Cover letter — use python-docx directly (plain text, no template):

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

doc = Document()
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(11)

# Add paragraphs from cover letter md content
for para in cover_letter_paragraphs:
    p = doc.add_paragraph(para)

doc.save(f"{output_dir}/{os.environ['USER_FIRST_NAME']}_\x3CCompany>_\x3CTitle>_Cover_Letter_2026.docx")

Step 6 — Verify docx

"Text looks right" is not the same as "file is deliverable." Both conditions must pass:

  1. Content check — open the docx and compare section by section against the md:
    • No missing sections
    • No leftover {{PLACEHOLDER}} strings anywhere in the document
    • Company name and job title are correct throughout
  2. File check — the docx must open without errors, have non-zero file size, and be saved to $RESUME_OUTPUT_DIR
  3. URL check — validate the job URL from the tracker is still reachable

Do not call partial verification "good enough." If any check fails, fix and re-verify before updating the tracker.

Step 7 — Update tracker

  • Success → resume_ready, record docx paths
  • Cannot reliably complete → error, write reason

Step 8 — Report

After each job, report: company, title, files produced, any issues.

File naming convention

${USER_FIRST_NAME}_\x3CCompanyName>_\x3CJobTitle>_Resume_2026.docx
${USER_FIRST_NAME}_\x3CCompanyName>_\x3CJobTitle>_Cover_Letter_2026.docx

Spaces → underscores. Keep company and title short (≤ 20 chars each if possible).

Tracker status flow

shortlist → md_ready → resume_ready
                    ↘ error

Known failure modes to avoid

  • Do not call partial verification "good enough"
  • Do not treat "text looks right" as equivalent to "docx is deliverable"
  • Do not spend more than 30 minutes on a single job without reporting status
  • Do not write a generic script to handle all cases; get the md layer working first

Scope

Resume tailoring only. Do not submit applications. Hand off resume_ready entries to the jobautopilot-submitter skill.

Support

If Job Autopilot saved you time: paypal.me/ZLiu308

Usage Guidance
This skill appears to do what it claims, but it will read everything in the configured RESUME_DIR and the job tracker and will use web_search/browser tools to fetch job descriptions — make sure RESUME_DIR contains only files you want processed. Confirm the RESUME_TEMPLATE download URL (GitHub raw link) before fetching, and set MD_TO_DOCX_SCRIPT to the included script path or to your trusted copy. As with any skill that processes personal data, review sample outputs before sending them to employers.
Capability Analysis
Type: OpenClaw Skill Name: jobautopilot-tailor Version: 1.3.0 The jobautopilot-tailor skill bundle is a legitimate tool designed to automate the tailoring of resumes and cover letters. It uses a Python script (md_to_docx.py) to parse Markdown content and populate a DOCX template using the python-docx library. While the skill requires access to sensitive personal information (contact details and work history) and uses web browsing to fetch job descriptions, its operations are local and strictly aligned with its stated purpose. No evidence of data exfiltration, malicious execution, or prompt injection was found.
Capability Assessment
Purpose & Capability
Name and description match what is requested: paths for resumes, output directory, template, a markdown-to-docx script, and contact info are reasonable for producing tailored .docx resumes and cover letters.
Instruction Scope
SKILL.md instructs the agent to read $RESUME_DIR and JOB_SEARCH_TRACKER, fetch JDs via declared web_search/browser tools, produce markdown, then convert with md_to_docx.py. All referenced files, tools, and flows are within the skill's stated purpose; there are no instructions to read unrelated system config or external credentials.
Install Mechanism
No install spec (instruction-only) and one included Python script (md_to_docx.py). Declared Python packages (python-docx, lxml) match the script's imports. No external binary downloads or obscure URLs are embedded in installation steps (the template is suggested to be downloaded from a public GitHub raw URL, which is expected behavior).
Credentials
Requested env vars are primarily paths (RESUME_DIR, RESUME_OUTPUT_DIR, RESUME_TEMPLATE, MD_TO_DOCX_SCRIPT, JOB_SEARCH_TRACKER) and basic contact fields (USER_FIRST_NAME, etc.), which are proportionate to producing personalized resumes. No unrelated secrets, cloud keys, or tokens are requested.
Persistence & Privilege
always:false and no special privileges are requested. The skill does not attempt to modify other skills or system-wide settings.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install jobautopilot-tailor
  3. After installation, invoke the skill by name or use /jobautopilot-tailor
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.3.0
## jobautopilot-tailor 1.3.0 - Version bumped from 1.2.9 to 1.3.0 in SKILL.md. - No other functional or documentation changes detected.
v1.2.9
jobautopilot-tailor v1.2.9 - Updated version number in SKILL.md to 1.2.9. - No functional or behavioral changes; documentation only.
v1.2.8
- Version bump to 1.2.8. - Updated SKILL.md to reflect latest version and metadata. - No functionality changes; documentation and version metadata only.
v1.2.7
- Bumped skill version to 1.2.7 in SKILL.md. - No functional or logic changes—metadata update only.
v1.2.6
- Version bump from 1.2.5 to 1.2.6 in SKILL.md. - No functional or behavioral changes; only the version number was updated in documentation.
v1.2.5
jobautopilot-tailor 1.2.5 - Updated version metadata from 1.2.4 to 1.2.5 in SKILL.md. - No functional or behavioral changes; documentation only.
v1.2.4
- Version updated to 1.2.4. - Documentation (SKILL.md) updated; no functional or code changes indicated. - Version metadata incremented from 1.2.3 to 1.2.4 for consistency.
v1.2.3
jobautopilot-tailor v1.2.3 - Updated version number in SKILL.md from 1.2.2 to 1.2.3. - No functional or logic changes; documentation updated only.
v1.2.2
- Added required environment variables: USER_FIRST_NAME and USER_LAST_NAME (previously only USER_FULL_NAME). - Updated setup instructions and template/script paths for better clarity and consistency. - Clarified field usage in SKILL.md to reflect the new variable structure. - Incremented version to 1.2.2.
v1.2.0
Version 1.2.0 - Funding link removed from skill metadata. - No changes to logic, features, or usage—documentation only. - All configuration, workflow, and formatting instructions remain unchanged.
v1.1.0
Version 1.1.0 - Added lxml as a required Python package (alongside python-docx) for improved document processing. - Updated description and metadata for compatibility with jobautopilot-search and jobautopilot-submitter. - Clarified file extraction: PDF text is handled by built-in tools; conversion script works with .docx and .md. - Updated dependency lists in both SKILL.md and the clawdbot metadata section for consistency.
v1.0.9
Version 1.0.9 - Updated version metadata from 1.0.8 to 1.0.9 in SKILL.md. - No functional or behavioral changes; documentation only.
v1.0.8
Version 1.0.8 - Bumped version from 1.0.5 to 1.0.8 in SKILL.md. - No other functional, documentation, or logic changes; all other content remains unchanged.
v1.0.5
- Updated to version 1.0.5. - Moved environment variable and binary requirements to top-level `requires` block for better compatibility and clarity. - No code or behavior changes—metadata structure only.
v1.0.3
- Version bump from 1.0.2 to 1.0.3 in SKILL.md - No content or functionality changes—version update only
v1.0.2
- Version bumped to 1.0.2 in SKILL.md. - No functional or behavioral changes; all logic, instructions, and requirements are unchanged. - Documentation now correctly reflects the new version number for clarity and consistency.
v1.0.1
- Added explicit listing of required environment variables in the metadata for improved configuration clarity. - Updated metadata structure from 'clawdbot: requires: bins/pip' to include 'env' section. - No changes to core logic, usage, or documentation outside of environment variable requirements. - Version bump to 1.0.1.
v1.0.0
Initial release of jobautopilot-tailor — a tool to generate truthful, job-targeted resume and cover letter files. - Fetches job descriptions for all shortlisted jobs, either via `web_search` or direct browsing. - Reads all user resume materials from `$RESUME_DIR` without inventing details. - Tailors markdown drafts of resume and cover letter to match job description keywords. - Batch converts validated markdown files into `.docx` using a template for resumes and direct formatting for cover letters. - Marks tracker entries as `md_ready` or `error` with detailed reasons; ensures files are saved and verified before moving to the next job.
Metadata
Slug jobautopilot-tailor
Version 1.3.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 18
Frequently Asked Questions

What is Jobautopilot Tailor?

Tailors your resume and cover letter to a specific job description. Fetches the JD, rewrites bullet points to match keywords, and exports polished .docx file... It is an AI Agent Skill for Claude Code / OpenClaw, with 221 downloads so far.

How do I install Jobautopilot Tailor?

Run "/install jobautopilot-tailor" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Jobautopilot Tailor free?

Yes, Jobautopilot Tailor is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Jobautopilot Tailor support?

Jobautopilot Tailor is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Jobautopilot Tailor?

It is built and maintained by jerronl (@jerronl); the current version is v1.3.0.

💬 Comments