{"skill":{"slug":"resume-assistant","displayName":"Resume Assistant","summary":"Assist job seekers by polishing, customizing, scoring, and exporting resumes with detailed checklist reviews and multi-format support.","description":"# 📝 Resume / CV Assistant\n\n> AI-powered clawbot skill for resume & CV polishing, job customization, multi-format export, and professional scoring.\n**Version:** 1.0.0 · **License:** MIT · **Repository:** [github.com/Wscats/resume-assistant](https://github.com/Wscats/resume-assistant)\n\n---\n\n## Overview\n\nResume / 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.\n\n---\n\n## Usage in AI Agent\n\n### Quick Start\n\nResume / CV Assistant is a standard clawbot skill that can be loaded and invoked by any compatible AI Agent. Here are different integration approaches.\n\n### 💬 Natural Language (Recommended)\n\nYou don't need to memorize any commands — simply describe what you need:\n\n```\n💬 \"Create a resume for a software engineer position\"\n💬 \"Polish my resume and fix any issues\"\n💬 \"Optimize my resume for ATS\"\n💬 \"Tailor my resume for this job description: [paste JD]\"\n💬 \"Convert my resume to PDF\"\n💬 \"Score my resume and tell me how to improve\"\n💬 \"What's wrong with my resume?\"\n💬 \"Here's my resume, can you help?\"\n```\n\nThe assistant understands your intent and automatically routes to the right workflow:\n\n| You say | Assistant does |\n|---------|---------------|\n| \"Create a resume for [role]\" | Asks for your background → builds a tailored resume |\n| \"Polish / Fix / Improve my resume\" | Runs 40+ checklist review → returns polished version |\n| \"Optimize for ATS\" | Checks ATS compatibility → optimizes keywords & format |\n| \"Tailor for this JD: ...\" | Analyzes JD → gap analysis → customized resume |\n| \"Convert to PDF / Word / ...\" | Exports to chosen format with professional template |\n| \"Score / Rate / Evaluate my resume\" | 100-point scoring → strengths & improvement plan |\n| \"Here's my resume, help?\" | Scores first → suggests next steps |\n\n#### Example Conversations\n\n**Creating a new resume:**\n```\nYou:   Create a resume for a frontend engineer position at a startup\n\nBot:   I'd be happy to help! To get started, could you share:\n       1. Your work experience (companies, roles, dates, key achievements)\n       2. Education background\n       3. Technical skills\n       4. Any specific job posting you're targeting? (optional)\n\nYou:   I have 3 years at Shopify working on React...\n\nBot:   Here's your tailored resume:\n       [generates complete resume]\n       \n       Would you like me to score, polish, or export it?\n```\n\n**Quick improvement:**\n```\nYou:   Here's my resume, what do you think?\n       [pastes resume]\n\nBot:   📊 Resume Score: 68/100 (Grade: C)\n       Top 3 Issues:\n       1. ❌ No quantified achievements\n       2. ⚠️ Weak action verbs\n       3. ⚠️ Missing keywords for target role\n       \n       Would you like me to polish it now?\n\nYou:   Yes, polish it\n\nBot:   [runs full polish with 40+ checklist items]\n```\n\n**Job-specific tailoring:**\n```\nYou:   Tailor my resume for this job description:\n       Senior Backend Engineer at Stripe\n       Requirements: Go, distributed systems, payment APIs...\n\nBot:   🎯 Job Analysis Complete\n       📊 Current Match: 62% → After Optimization: 89%\n       [generates tailored version]\n```\n\n### Option 1: Slash Commands via clawbot\n\nFor more precise control, use slash commands directly in a clawbot conversation:\n\n```\n/resume polish\nPlease polish my resume:\n\nJohn Doe\nSenior Frontend Engineer | 5 years experience\nSkills: JavaScript, React, Vue, Node.js\n...\n```\n\n### Option 2: Integration in AI Agent Frameworks\n\n#### 1. Register the Skill\n\nRegister this project as a skill in your AI Agent:\n\n```json\n{\n  \"skills\": [\n    {\n      \"name\": \"resume-assistant\",\n      \"path\": \"./skills/resume-assistant\",\n      \"manifest\": \"skill.json\"\n    }\n  ]\n}\n```\n\n#### 2. Load Prompts\n\nWhen handling resume-related requests, prompt files are loaded in this order:\n\n```\n1. prompts/system.md      ← Persona & quality standards (loaded first)\n2. prompts/<command>.md    ← Load per command: specific instructions\n3. templates/<style>.md    ← Load on demand (export command only)\n```\n\n#### 3. Build the Complete Prompt\n\nExample for `/resume polish` — here's how an AI Agent should construct the prompt:\n\n```python\n# Python pseudocode\nROLE_SYS = \"system\"    # LLM message role constant\nROLE_USR = \"user\"      # LLM message role constant\n\ndef build_prompt(command, args):\n    # Step 1: Load the skill persona prompt\n    persona_prompt = load_file(\"prompts/system.md\")\n\n    # Step 2: Load command-specific prompt\n    command_prompt = load_file(f\"prompts/{command}.md\")\n\n    # Step 3: Combine prompts into LLM messages\n    combined = persona_prompt + \"\\n\\n\" + command_prompt\n    messages = [\n        {\"role\": ROLE_SYS, \"content\": combined},\n        {\"role\": ROLE_USR, \"content\": args[\"resume_content\"]}\n    ]\n\n    # Step 4: Add optional parameters to user message\n    if args.get(\"language\"):\n        messages[1][\"content\"] += f\"\\n\\nLanguage: {args['language']}\"\n\n    return messages\n```\n\n```javascript\n// JavaScript pseudocode\nconst ROLE_SYS = 'system';  // LLM message role constant\nconst ROLE_USR = 'user';    // LLM message role constant\n\nasync function buildPrompt(command, args) {\n  // Step 1: Load the skill persona prompt\n  const personaPrompt = await loadFile('prompts/system.md');\n\n  // Step 2: Load command-specific prompt\n  const commandPrompt = await loadFile(`prompts/${command}.md`);\n\n  // Step 3: Combine prompts into LLM messages\n  const combined = `${personaPrompt}\\n\\n${commandPrompt}`;\n  const messages = [\n    { role: ROLE_SYS, content: combined },\n    { role: ROLE_USR, content: args.resume_content }\n  ];\n\n  // Step 4: Add optional parameters\n  if (args.language) {\n    messages[1].content += `\\n\\nLanguage: ${args.language}`;\n  }\n\n  return messages;\n}\n```\n\n### Option 3: REST API\n\nIf your AI Agent exposes an HTTP API, invoke via RESTful endpoints:\n\n```bash\n# Polish a resume\ncurl -X POST https://your-agent-api.com/skills/resume-assistant/polish \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"resume_content\": \"Your resume content...\",\n    \"language\": \"en\"\n  }'\n\n# Score a resume\ncurl -X POST https://your-agent-api.com/skills/resume-assistant/score \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"resume_content\": \"Your resume content...\",\n    \"target_role\": \"Senior Frontend Engineer\",\n    \"language\": \"en\"\n  }'\n\n# Customize for a job\ncurl -X POST https://your-agent-api.com/skills/resume-assistant/customize \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"resume_content\": \"Your resume content...\",\n    \"job_description\": \"Job description...\",\n    \"language\": \"en\"\n  }'\n\n# Export to a format\ncurl -X POST https://your-agent-api.com/skills/resume-assistant/export \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"resume_content\": \"Your resume content...\",\n    \"format\": \"html\",\n    \"template\": \"modern\"\n  }'\n```\n\n### Option 4: LangChain / LlamaIndex Integration\n\n```python\nfrom langchain.tools import Tool\n\n# Define tools based on skill.json commands\nresume_tools = [\n    Tool(\n        name=\"resume_polish\",\n        description=\"Polish and improve resume with 40+ checklist items\",\n        func=lambda input: agent.run_skill(\n            \"resume-assistant\", \"polish\",\n            {\"resume_content\": input, \"language\": \"en\"}\n        )\n    ),\n    Tool(\n        name=\"resume_score\",\n        description=\"Score a resume on 100-point scale with improvement suggestions\",\n        func=lambda input: agent.run_skill(\n            \"resume-assistant\", \"score\",\n            {\"resume_content\": input, \"language\": \"en\"}\n        )\n    ),\n    Tool(\n        name=\"resume_customize\",\n        description=\"Customize resume for a specific job position\",\n        func=lambda input: agent.run_skill(\n            \"resume-assistant\", \"customize\",\n            {\"resume_content\": input.split(\"---JD---\")[0],\n             \"job_description\": input.split(\"---JD---\")[1],\n             \"language\": \"en\"}\n        )\n    ),\n    Tool(\n        name=\"resume_export\",\n        description=\"Export resume to Word/Markdown/HTML/LaTeX/PDF\",\n        func=lambda input: agent.run_skill(\n            \"resume-assistant\", \"export\",\n            {\"resume_content\": input, \"format\": \"html\", \"template\": \"modern\"}\n        )\n    ),\n]\n```\n\n### Command Routing\n\nThe AI Agent should route user requests to the correct command:\n\n```mermaid\ngraph TD\n    A[\"User Input\"] --> B{\"Contains<br/>slash command?\"}\n    B -- \"Yes\" --> C{\"Parse command\"}\n    C -- \"/resume polish\" --> D[\"Load polish.md\"]\n    C -- \"/resume customize\" --> E[\"Load customize.md\"]\n    C -- \"/resume export\" --> F[\"Load export.md\"]\n    C -- \"/resume score\" --> G[\"Load score.md\"]\n    B -- \"No\" --> H{\"Intent detection\"}\n    H -- \"polish/improve/fix\" --> D\n    H -- \"job/apply/match\" --> E\n    H -- \"export/download/convert\" --> F\n    H -- \"score/rate/evaluate\" --> G\n    D --> I[\"Build Prompt<br/>Call LLM\"]\n    E --> I\n    F --> I\n    G --> I\n    I --> J[\"Return Result\"]\n```\n\n### Argument Validation\n\nThe AI Agent should validate arguments before invocation, referencing `skill.json`:\n\n```python\ndef validate_args(command, args):\n    \"\"\"Validate arguments against skill.json schema.\"\"\"\n    schema = load_skill_json()\n    cmd_schema = next(c for c in schema[\"commands\"] if c[\"name\"] == command)\n\n    for arg in cmd_schema[\"arguments\"]:\n        # Check required fields\n        if arg[\"required\"] and arg[\"name\"] not in args:\n            raise ValueError(f\"Missing required argument: {arg['name']}\")\n\n        # Check enum constraints\n        if \"enum\" in arg and arg[\"name\"] in args:\n            if args[arg[\"name\"]] not in arg[\"enum\"]:\n                raise ValueError(\n                    f\"Invalid value for {arg['name']}: {args[arg['name']]}. \"\n                    f\"Must be one of: {arg['enum']}\"\n                )\n\n        # Apply defaults\n        if arg[\"name\"] not in args and \"default\" in arg:\n            args[arg[\"name\"]] = arg[\"default\"]\n\n    # Check max resume length\n    max_len = schema[\"config\"][\"max_resume_length\"]\n    if len(args.get(\"resume_content\", \"\")) > max_len:\n        raise ValueError(f\"Resume exceeds {max_len} character limit\")\n\n    return args\n```\n\n---\n\n## Commands\n\n### `/resume polish`\n\nRun a **40+ item checklist** across 8 categories and get a fully improved resume.\n\n**Arguments:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `resume_content` | string | ✅ | — | Resume text (plain text or Markdown) |\n| `language` | string | — | `en` | `en` for English, `zh` for Chinese |\n\n**What you get:**\n- ✅/❌/⚠️ checklist results for every item (contact, summary, experience, education, skills, grammar, formatting, ATS)\n- Fully polished resume with strong action verbs and quantified results\n- Change summary categorized by priority: 🔴 Critical → 🟡 Major → 🟢 Minor → 💡 Suggestion\n- Action verb reference table and quantification guide\n\n---\n\n### `/resume customize`\n\nTailor your resume for a **specific job posting** with gap analysis and keyword optimization.\n\n**Arguments:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `resume_content` | string | ✅ | — | Resume text |\n| `job_description` | string | ✅ | — | Target job description or job title |\n| `language` | string | — | `en` | `en` for English, `zh` for Chinese |\n\n**What you get:**\n- Job description breakdown (required skills, preferred skills, responsibilities, keywords)\n- Gap analysis matrix mapping every requirement to your resume\n- Customized resume with keywords naturally integrated\n- Keyword coverage report: before vs. after\n- Bonus: cover letter talking points + interview prep notes\n\n---\n\n### `/resume export`\n\nConvert your resume to **Word, Markdown, HTML, LaTeX, or PDF** with professional templates.\n\n**Arguments:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `resume_content` | string | ✅ | — | Resume text (Markdown preferred) |\n| `format` | string | ✅ | — | `word` \\| `markdown` \\| `html` \\| `latex` \\| `pdf` |\n| `template` | string | — | `professional` | `professional` \\| `modern` \\| `minimal` \\| `academic` |\n\n**Templates:**\n\n| Template | Style | Best For |\n|----------|-------|----------|\n| `professional` | Navy, serif headings, classic borders | Finance, consulting, law, healthcare |\n| `modern` | Teal accents, creative layout, emoji icons | Tech, startups, product, marketing |\n| `minimal` | Monochrome, ultra-clean, content-dense | Senior professionals, engineering |\n| `academic` | Formal serif, multi-page, publications | Faculty, research, PhD applications |\n\n**Export details:**\n- **HTML**: Self-contained file with embedded CSS, 4 color themes, `@media print` optimized\n- **LaTeX**: Complete compilable `.tex` with XeLaTeX + CJK support\n- **Word**: Pandoc-optimized Markdown with YAML front matter + conversion command\n- **PDF**: Print-optimized HTML with A4 page dimensions + multiple conversion methods\n- **Markdown**: Clean, structured, version-control friendly\n\n---\n\n### `/resume score`\n\nGet a **100-point professional evaluation** with specific improvement suggestions.\n\n**Arguments:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `resume_content` | string | ✅ | — | Resume text |\n| `target_role` | string | — | — | Target role for fit assessment |\n| `language` | string | — | `en` | `en` for English, `zh` for Chinese |\n\n**Scoring dimensions (100 points):**\n\n| Dimension | Points | Evaluates |\n|-----------|--------|-----------|\n| Content Quality | 30 | Achievements, action verbs, relevance, completeness |\n| Structure & Formatting | 25 | Layout, consistency, length, section order |\n| Language & Grammar | 20 | Grammar, spelling, tone, clarity |\n| ATS Optimization | 15 | Keywords, standard headings, format compatibility |\n| Impact & Impression | 10 | 6-second test, career story, professionalism |\n\n**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)\n\n**What you get:**\n- Score breakdown with per-dimension justification\n- Top 3 strengths with specific examples from your resume\n- Priority-ranked improvements with **Before → After** rewrites\n- Role fit assessment (if target_role provided): fit score, competitive percentile, strengths, gaps\n- 5-step action plan with effort estimates\n\n---\n\n## Recommended Workflow\n\n```\n┌──────────────────────────────────────────────────────┐\n│                  Recommended Workflow                 │\n├──────────────────────────────────────────────────────┤\n│                                                      │\n│  1. /resume score     ← Know where you stand         │\n│     💬 \"Score my resume\"                             │\n│          │                                           │\n│          ▼                                           │\n│  2. /resume polish    ← Fix all issues               │\n│     💬 \"Polish my resume\"                            │\n│          │                                           │\n│          ▼                                           │\n│  3. /resume customize ← Tailor per application       │\n│     💬 \"Tailor for this JD: ...\"                     │\n│          │                                           │\n│          ▼                                           │\n│  4. /resume export    ← Generate final files         │\n│     💬 \"Convert to PDF\"                              │\n│          │                                           │\n│          ▼                                           │\n│  5. /resume score     ← Verify improvement           │\n│     💬 \"Score my resume again\"                       │\n│                                                      │\n└──────────────────────────────────────────────────────┘\n```\n\n**Tips:**\n1. Start with **score** if you have an existing resume — understand your baseline\n2. **Polish** to fix all fundamentals before customizing for a job\n3. **Customize** separately for each application — one-size-fits-all doesn't work\n4. **Export** last — get content perfect, then format\n5. Use **Markdown** as your working format — it converts cleanly to all others\n6. **Score again** after polish + customize to measure improvement\n\n---\n\n## Project Structure\n\n```\nresume-assistant/\n├── skill.json                    # Skill manifest (JSON)\n├── skill.yaml                    # Skill manifest (YAML)\n├── SKILL.md                      # This documentation\n├── prompts/\n│   ├── system.md                 # Persona definition & quality standards\n│   ├── polish.md                 # Polish prompt: 40+ item checklist\n│   ├── customize.md              # Customize prompt: gap analysis & keywords\n│   ├── export.md                 # Export prompt: 5 formats × 4 templates\n│   └── score.md                  # Score prompt: 100-point rubric\n├── templates/\n│   ├── professional.md           # Classic corporate template\n│   ├── modern.md                 # Contemporary tech/startup template\n│   ├── minimal.md                # Ultra-clean senior template\n│   ├── academic.md               # Formal academic CV template\n│   └── export/\n│       ├── resume.html           # HTML template (4 CSS themes)\n│       └── resume.tex            # LaTeX template (XeLaTeX + CJK)\n└── examples/\n    ├── sample-resume-en.md       # English sample (high quality)\n    ├── sample-resume-zh.md       # Chinese sample (high quality)\n    ├── sample-resume-weak.md     # Weak sample (for scoring demo)\n    └── usage.md                  # Usage examples & workflow guide\n```\n\n---\n\n## Language Support\n\n| Language | Code | Features |\n|----------|------|----------|\n| English | `en` | Full support, US/UK conventions |\n| Chinese | `zh` | Full support, 中英文混排规范, CJK export |\n\n---\n\n## Configuration\n\n| Key | Value | Description |\n|-----|-------|-------------|\n| `max_resume_length` | 10,000 chars | Maximum input length |\n| `supported_languages` | `en`, `zh` | Available languages |\n| `supported_export_formats` | word, markdown, html, latex, pdf | Available export formats |\nscats","topics":["GitHub","Repository"],"tags":{"latest":"1.0.6"},"stats":{"comments":0,"downloads":20876,"installsAllTime":788,"installsCurrent":7,"stars":17,"versions":7},"createdAt":1773454459402,"updatedAt":1778491894093},"latestVersion":{"version":"1.0.6","createdAt":1773461889571,"changelog":"## resume-assistant 1.0.6 Changelog\n\n- Added repository link to documentation header.\n- Updated SKILL.md and SKILL_ZH.md for improved clarity and completeness.\n- No functional or API changes; documentation only.","license":"MIT-0"},"metadata":null,"owner":{"handle":"wscats","userId":"s17bw1sf2hsjw09jmyh7nhzshn83h2gf","displayName":"enoyao","image":"https://avatars.githubusercontent.com/u/17243165?v=4"},"moderation":null}