Resume Assistant
Assist job seekers by polishing, customizing, scoring, and exporting resumes with detailed checklist reviews and multi-format support.
Assist job seekers by polishing, customizing, scoring, and exporting resumes with detailed checklist reviews and multi-format support.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
AI-powered clawbot skill for resume & CV polishing, job customization, multi-format export, and professional scoring. Version: 1.0.0 Β· License: MIT Β· Repository: github.com/Wscats/resume-assistant
Resume / CV Assistant is a clawbot skill that helps job seekers create, refine, and optimize their resumes and CVs, while adding comprehensive checklist review, scoring, and multi-format export that neither project offers alone.
Resume / CV Assistant is a standard clawbot skill that can be loaded and invoked by any compatible AI Agent. Here are different integration approaches.
You don't need to memorize any commands β simply describe what you need:
π¬ "Create a resume for a software engineer position" π¬ "Polish my resume and fix any issues" π¬ "Optimize my resume for ATS" π¬ "Tailor my resume for this job description: [paste JD]" π¬ "Convert my resume to PDF" π¬ "Score my resume and tell me how to improve" π¬ "What's wrong with my resume?" π¬ "Here's my resume, can you help?"
The assistant understands your intent and automatically routes to the right workflow:
| You say | Assistant does |
|---|---|
| "Create a resume for [role]" | Asks for your background β builds a tailored resume |
| "Polish / Fix / Improve my resume" | Runs 40+ checklist review β returns polished version |
| "Optimize for ATS" | Checks ATS compatibility β optimizes keywords & format |
| "Tailor for this JD: ..." | Analyzes JD β gap analysis β customized resume |
| "Convert to PDF / Word / ..." | Exports to chosen format with professional template |
| "Score / Rate / Evaluate my resume" | 100-point scoring β strengths & improvement plan |
| "Here's my resume, help?" | Scores first β suggests next steps |
Creating a new resume:
You: Create a resume for a frontend engineer position at a startupBot: I'd be happy to help! To get started, could you share: 1. Your work experience (companies, roles, dates, key achievements) 2. Education background 3. Technical skills 4. Any specific job posting you're targeting? (optional)
You: I have 3 years at Shopify working on React...
Bot: Here's your tailored resume: [generates complete resume]
Would you like me to score, polish, or export it?
Quick improvement:
You: Here's my resume, what do you think? [pastes resume]Bot: π Resume Score: 68/100 (Grade: C) Top 3 Issues: 1. β No quantified achievements 2. β οΈ Weak action verbs 3. β οΈ Missing keywords for target role
Would you like me to polish it now?You: Yes, polish it
Bot: [runs full polish with 40+ checklist items]
Job-specific tailoring:
You: Tailor my resume for this job description: Senior Backend Engineer at Stripe Requirements: Go, distributed systems, payment APIs...Bot: π― Job Analysis Complete π Current Match: 62% β After Optimization: 89% [generates tailored version]
For more precise control, use slash commands directly in a clawbot conversation:
/resume polish Please polish my resume:John Doe Senior Frontend Engineer | 5 years experience Skills: JavaScript, React, Vue, Node.js ...
Register this project as a skill in your AI Agent:
{ "skills": [ { "name": "resume-assistant", "path": "./skills/resume-assistant", "manifest": "skill.json" } ] }
When handling resume-related requests, prompt files are loaded in this order:
1. prompts/system.md β Persona & quality standards (loaded first) 2. prompts/<command>.md β Load per command: specific instructions 3. templates/<style>.md β Load on demand (export command only)
Example for
/resume polish β here's how an AI Agent should construct the prompt:
# Python pseudocode ROLE_SYS = "system" # LLM message role constant ROLE_USR = "user" # LLM message role constantdef build_prompt(command, args): # Step 1: Load the skill persona prompt persona_prompt = load_file("prompts/system.md")
# Step 2: Load command-specific prompt command_prompt = load_file(f"prompts/{command}.md") # Step 3: Combine prompts into LLM messages combined = persona_prompt + "\n\n" + command_prompt messages = [ {"role": ROLE_SYS, "content": combined}, {"role": ROLE_USR, "content": args["resume_content"]} ] # Step 4: Add optional parameters to user message if args.get("language"): messages[1]["content"] += f"\n\nLanguage: {args['language']}" return messages
// JavaScript pseudocode const ROLE_SYS = 'system'; // LLM message role constant const ROLE_USR = 'user'; // LLM message role constant async function buildPrompt(command, args) { // Step 1: Load the skill persona prompt const personaPrompt = await loadFile('prompts/system.md'); // Step 2: Load command-specific prompt const commandPrompt = await loadFile(`prompts/${command}.md`); // Step 3: Combine prompts into LLM messages const combined = `${personaPrompt}\n\n${commandPrompt}`; const messages = [ { role: ROLE_SYS, content: combined }, { role: ROLE_USR, content: args.resume_content } ]; // Step 4: Add optional parameters if (args.language) { messages[1].content += `\n\nLanguage: ${args.language}`; } return messages; }
If your AI Agent exposes an HTTP API, invoke via RESTful endpoints:
# Polish a resume curl -X POST https://your-agent-api.com/skills/resume-assistant/polish \ -H "Content-Type: application/json" \ -d '{ "resume_content": "Your resume content...", "language": "en" }'Score a resume
curl -X POST https://your-agent-api.com/skills/resume-assistant/score
-H "Content-Type: application/json"
-d '{ "resume_content": "Your resume content...", "target_role": "Senior Frontend Engineer", "language": "en" }'Customize for a job
curl -X POST https://your-agent-api.com/skills/resume-assistant/customize
-H "Content-Type: application/json"
-d '{ "resume_content": "Your resume content...", "job_description": "Job description...", "language": "en" }'Export to a format
curl -X POST https://your-agent-api.com/skills/resume-assistant/export
-H "Content-Type: application/json"
-d '{ "resume_content": "Your resume content...", "format": "html", "template": "modern" }'
from langchain.tools import ToolDefine tools based on skill.json commands
resume_tools = [ Tool( name="resume_polish", description="Polish and improve resume with 40+ checklist items", func=lambda input: agent.run_skill( "resume-assistant", "polish", {"resume_content": input, "language": "en"} ) ), Tool( name="resume_score", description="Score a resume on 100-point scale with improvement suggestions", func=lambda input: agent.run_skill( "resume-assistant", "score", {"resume_content": input, "language": "en"} ) ), Tool( name="resume_customize", description="Customize resume for a specific job position", func=lambda input: agent.run_skill( "resume-assistant", "customize", {"resume_content": input.split("---JD---")[0], "job_description": input.split("---JD---")[1], "language": "en"} ) ), Tool( name="resume_export", description="Export resume to Word/Markdown/HTML/LaTeX/PDF", func=lambda input: agent.run_skill( "resume-assistant", "export", {"resume_content": input, "format": "html", "template": "modern"} ) ), ]
The AI Agent should route user requests to the correct command:
graph TD A["User Input"] --> B{"Contains<br/>slash command?"} B -- "Yes" --> C{"Parse command"} C -- "/resume polish" --> D["Load polish.md"] C -- "/resume customize" --> E["Load customize.md"] C -- "/resume export" --> F["Load export.md"] C -- "/resume score" --> G["Load score.md"] B -- "No" --> H{"Intent detection"} H -- "polish/improve/fix" --> D H -- "job/apply/match" --> E H -- "export/download/convert" --> F H -- "score/rate/evaluate" --> G D --> I["Build Prompt<br/>Call LLM"] E --> I F --> I G --> I I --> J["Return Result"]
The AI Agent should validate arguments before invocation, referencing
skill.json:
def validate_args(command, args): """Validate arguments against skill.json schema.""" schema = load_skill_json() cmd_schema = next(c for c in schema["commands"] if c["name"] == command)for arg in cmd_schema["arguments"]: # Check required fields if arg["required"] and arg["name"] not in args: raise ValueError(f"Missing required argument: {arg['name']}") # Check enum constraints if "enum" in arg and arg["name"] in args: if args[arg["name"]] not in arg["enum"]: raise ValueError( f"Invalid value for {arg['name']}: {args[arg['name']]}. " f"Must be one of: {arg['enum']}" ) # Apply defaults if arg["name"] not in args and "default" in arg: args[arg["name"]] = arg["default"] # Check max resume length max_len = schema["config"]["max_resume_length"] if len(args.get("resume_content", "")) > max_len: raise ValueError(f"Resume exceeds {max_len} character limit") return args
/resume polishRun a 40+ item checklist across 8 categories and get a fully improved resume.
Arguments:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| string | β | β | Resume text (plain text or Markdown) |
| string | β | | for English, for Chinese |
What you get:
/resume customizeTailor your resume for a specific job posting with gap analysis and keyword optimization.
Arguments:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| string | β | β | Resume text |
| string | β | β | Target job description or job title |
| string | β | | for English, for Chinese |
What you get:
/resume exportConvert your resume to Word, Markdown, HTML, LaTeX, or PDF with professional templates.
Arguments:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| string | β | β | Resume text (Markdown preferred) |
| string | β | β | | | | | |
| string | β | | | | | |
Templates:
| Template | Style | Best For |
|---|---|---|
| Navy, serif headings, classic borders | Finance, consulting, law, healthcare |
| Teal accents, creative layout, emoji icons | Tech, startups, product, marketing |
| Monochrome, ultra-clean, content-dense | Senior professionals, engineering |
| Formal serif, multi-page, publications | Faculty, research, PhD applications |
Export details:
@media print optimized.tex with XeLaTeX + CJK support/resume scoreGet a 100-point professional evaluation with specific improvement suggestions.
Arguments:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| string | β | β | Resume text |
| string | β | β | Target role for fit assessment |
| string | β | | for English, for Chinese |
Scoring dimensions (100 points):
| Dimension | Points | Evaluates |
|---|---|---|
| Content Quality | 30 | Achievements, action verbs, relevance, completeness |
| Structure & Formatting | 25 | Layout, consistency, length, section order |
| Language & Grammar | 20 | Grammar, spelling, tone, clarity |
| ATS Optimization | 15 | Keywords, standard headings, format compatibility |
| Impact & Impression | 10 | 6-second test, career story, professionalism |
Grade scale: A+ (95-100) β A (90-94) β B+ (85-89) β B (80-84) β C+ (75-79) β C (70-74) β D (60-69) β F (<60)
What you get:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Recommended Workflow β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β β 1. /resume score β Know where you stand β β π¬ "Score my resume" β β β β β βΌ β β 2. /resume polish β Fix all issues β β π¬ "Polish my resume" β β β β β βΌ β β 3. /resume customize β Tailor per application β β π¬ "Tailor for this JD: ..." β β β β β βΌ β β 4. /resume export β Generate final files β β π¬ "Convert to PDF" β β β β β βΌ β β 5. /resume score β Verify improvement β β π¬ "Score my resume again" β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tips:
resume-assistant/ βββ skill.json # Skill manifest (JSON) βββ skill.yaml # Skill manifest (YAML) βββ SKILL.md # This documentation βββ prompts/ β βββ system.md # Persona definition & quality standards β βββ polish.md # Polish prompt: 40+ item checklist β βββ customize.md # Customize prompt: gap analysis & keywords β βββ export.md # Export prompt: 5 formats Γ 4 templates β βββ score.md # Score prompt: 100-point rubric βββ templates/ β βββ professional.md # Classic corporate template β βββ modern.md # Contemporary tech/startup template β βββ minimal.md # Ultra-clean senior template β βββ academic.md # Formal academic CV template β βββ export/ β βββ resume.html # HTML template (4 CSS themes) β βββ resume.tex # LaTeX template (XeLaTeX + CJK) βββ examples/ βββ sample-resume-en.md # English sample (high quality) βββ sample-resume-zh.md # Chinese sample (high quality) βββ sample-resume-weak.md # Weak sample (for scoring demo) βββ usage.md # Usage examples & workflow guide
| Language | Code | Features |
|---|---|---|
| English | | Full support, US/UK conventions |
| Chinese | | Full support, δΈθ±ζζ··ζθ§θ, CJK export |
| Key | Value | Description |
|---|---|---|
| 10,000 chars | Maximum input length |
| , | Available languages |
| word, markdown, html, latex, pdf | Available export formats |
| scats |
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
Β© 2026 Torly.ai. All rights reserved.