resumebuilder-tools 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. resumebuilder_tools-1.0.0/.agents/install-block.md +140 -0
  2. resumebuilder_tools-1.0.0/.changeset/README.md +8 -0
  3. resumebuilder_tools-1.0.0/.changeset/config.json +9 -0
  4. resumebuilder_tools-1.0.0/.claude-plugin/marketplace.json +23 -0
  5. resumebuilder_tools-1.0.0/.claude-plugin/plugin.json +27 -0
  6. resumebuilder_tools-1.0.0/.github/workflows/release.yml +65 -0
  7. resumebuilder_tools-1.0.0/.gitignore +36 -0
  8. resumebuilder_tools-1.0.0/.vscode/tasks.json +49 -0
  9. resumebuilder_tools-1.0.0/DESIGN.md +76 -0
  10. resumebuilder_tools-1.0.0/PKG-INFO +236 -0
  11. resumebuilder_tools-1.0.0/PUBLISH_TO_PYPI.md +217 -0
  12. resumebuilder_tools-1.0.0/README.md +221 -0
  13. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/.openspec.yaml +2 -0
  14. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/design.md +85 -0
  15. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/proposal.md +26 -0
  16. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/specs/profile-maintenance/spec.md +92 -0
  17. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/specs/project-updates/spec.md +117 -0
  18. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/tasks.md +24 -0
  19. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/.openspec.yaml +2 -0
  20. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/design.md +90 -0
  21. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/proposal.md +25 -0
  22. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/specs/profile-based-resume-tailoring/spec.md +126 -0
  23. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/tasks.md +36 -0
  24. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/.openspec.yaml +2 -0
  25. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/design.md +72 -0
  26. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/proposal.md +23 -0
  27. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/specs/profile-fit-analysis/spec.md +87 -0
  28. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/tasks.md +12 -0
  29. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/.openspec.yaml +2 -0
  30. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/design.md +82 -0
  31. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/proposal.md +32 -0
  32. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/specs/market-resume-mode/spec.md +93 -0
  33. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/tasks.md +36 -0
  34. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/.openspec.yaml +2 -0
  35. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/design.md +61 -0
  36. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/proposal.md +30 -0
  37. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/specs/skills-relocation/spec.md +37 -0
  38. resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/tasks.md +20 -0
  39. resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/.openspec.yaml +2 -0
  40. resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/design.md +69 -0
  41. resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/proposal.md +29 -0
  42. resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/specs/python-engine-pypi/spec.md +48 -0
  43. resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/tasks.md +36 -0
  44. resumebuilder_tools-1.0.0/openspec/config.yaml +20 -0
  45. resumebuilder_tools-1.0.0/openspec/specs/market-resume-mode/spec.md +98 -0
  46. resumebuilder_tools-1.0.0/openspec/specs/profile-based-resume-tailoring/spec.md +264 -0
  47. resumebuilder_tools-1.0.0/openspec/specs/profile-fit-analysis/spec.md +93 -0
  48. resumebuilder_tools-1.0.0/openspec/specs/profile-maintenance/spec.md +97 -0
  49. resumebuilder_tools-1.0.0/openspec/specs/project-updates/spec.md +122 -0
  50. resumebuilder_tools-1.0.0/package-lock.json +1381 -0
  51. resumebuilder_tools-1.0.0/package.json +20 -0
  52. resumebuilder_tools-1.0.0/pyproject.toml +26 -0
  53. resumebuilder_tools-1.0.0/python_engine/ResumeBuilder.py +496 -0
  54. resumebuilder_tools-1.0.0/python_engine/__init__.py +1 -0
  55. resumebuilder_tools-1.0.0/python_engine/resume_tools.py +1229 -0
  56. resumebuilder_tools-1.0.0/scripts/sync-plugin-version.mjs +41 -0
  57. resumebuilder_tools-1.0.0/security-autofix-changes.md +27 -0
  58. resumebuilder_tools-1.0.0/skills/analyze-profile-fit/SKILL.md +117 -0
  59. resumebuilder_tools-1.0.0/skills/maintain-profile/SKILL.md +87 -0
  60. resumebuilder_tools-1.0.0/skills/setup-resumebuilder-skills/SKILL.md +50 -0
  61. resumebuilder_tools-1.0.0/skills/tailor-resume/SKILL.md +52 -0
  62. resumebuilder_tools-1.0.0/skills/tailor-resume/market-mode.md +76 -0
  63. resumebuilder_tools-1.0.0/skills/tailor-resume/master-mode.md +56 -0
  64. resumebuilder_tools-1.0.0/skills/tailor-resume/rendering.md +79 -0
  65. resumebuilder_tools-1.0.0/skills/tailor-resume/tailored-mode.md +62 -0
  66. resumebuilder_tools-1.0.0/skills/tailor-resume/trust-boundaries.md +15 -0
  67. resumebuilder_tools-1.0.0/skills/update-projects/SKILL.md +85 -0
  68. resumebuilder_tools-1.0.0/tests/test_resume_tools.py +897 -0
  69. resumebuilder_tools-1.0.0/uv.lock +583 -0
@@ -0,0 +1,140 @@
1
+ # The canonical install block
2
+
3
+ One install story, one wording. `README.md`, `.changeset/*`, and every page
4
+ under `docs/` must say **this** and nothing else. Change it here first, then
5
+ propagate.
6
+
7
+ ## Managed installs first
8
+
9
+ Lead with installs that update themselves. Fall back to skills.sh, labelled
10
+ "manual updates", only for agents that have no such install. Call a route
11
+ managed only if it updates without the user running a command. Put any one-time
12
+ opt-in beside its install command. Never promise "instant".
13
+
14
+ Claude Code installs from its official marketplace. Every other managed route
15
+ installs from this repo's own marketplace, `.claude-plugin/marketplace.json`
16
+ and `.claude-plugin/plugin.json`. Those routes reinstall only when the `version`
17
+ in `plugin.json` changes. The Release workflow runs `npm run version`, which
18
+ copies that field from `package.json`, so users get a release when the "chore:
19
+ version skills" PR merges.
20
+
21
+ | Agent | Route | Updates itself? |
22
+ |-------------- |----------------------------------|------------------------------------------------------------------|
23
+ | Claude Code | `claude plugin install` | Yes, by default |
24
+ | Codex | `@resumebuilder` marketplace | Yes, at startup, by default |
25
+ | Copilot CLI | `@resumebuilder` marketplace | Yes, after a one-time `autoUpdate: true` |
26
+ | VS Code | Chat: Install Plugin From Source | Yes, daily, by default |
27
+ | Gemini CLI | `gemini skills install` (copies) | No. Re-run to update. |
28
+ | Everyone else | skills.sh | No. Run `npx skills update`, and re-run `add` for new skills |
29
+
30
+ ## Claude Code
31
+
32
+ <canonical-block name="claude-code">
33
+
34
+ ```bash
35
+ claude plugin install resumebuilder-skills
36
+ ```
37
+
38
+ Updates itself by default.
39
+
40
+ </canonical-block>
41
+
42
+ ## Codex
43
+
44
+ <canonical-block name="codex">
45
+
46
+ ```bash
47
+ codex plugin marketplace add S-Dawn/ResumeBuilder
48
+ codex plugin add resumebuilder-skills@resumebuilder
49
+ ```
50
+
51
+ Updates itself at startup.
52
+
53
+ </canonical-block>
54
+
55
+ ## GitHub Copilot (CLI and VS Code)
56
+
57
+ Use the marketplace. Copilot has deprecated direct repo installs, and they
58
+ can't auto-update. The `extraKnownMarketplaces` entry follows the documented
59
+ schema.
60
+
61
+ <canonical-block name="copilot">
62
+
63
+ ```bash
64
+ copilot plugin marketplace add S-Dawn/ResumeBuilder
65
+ copilot plugin install resumebuilder-skills@resumebuilder
66
+ ```
67
+
68
+ Then, once, add to `~/.copilot/settings.json`:
69
+
70
+ ```json
71
+ {
72
+ "extraKnownMarketplaces": {
73
+ "resumebuilder": { "source": { "source": "github", "repo": "S-Dawn/ResumeBuilder" }, "autoUpdate": true }
74
+ }
75
+ }
76
+ ```
77
+
78
+ In VS Code, run **Chat: Install Plugin From Source** and enter
79
+ `https://github.com/S-Dawn/ResumeBuilder`. It updates daily.
80
+
81
+ </canonical-block>
82
+
83
+ ## Gemini CLI
84
+
85
+ Gemini doesn't read `.claude-plugin`, and `--path` takes one folder. One install
86
+ per folder gives the promoted set.
87
+
88
+ <canonical-block name="gemini">
89
+
90
+ ```bash
91
+ gemini skills install https://github.com/S-Dawn/ResumeBuilder.git --path skills/
92
+ ```
93
+
94
+ Re-run to update.
95
+
96
+ </canonical-block>
97
+
98
+ ## Every other agent, or editable files (skills.sh)
99
+
100
+ `-a` preselects the agent. Prefer skills.sh to an agent's own repo installer.
101
+
102
+ <canonical-block name="other-agents">
103
+
104
+ ```bash
105
+ npx skills@latest add S-Dawn/ResumeBuilder -a <agent> # cursor, opencode, devin, windsurf, amp, pi; omit -a to choose
106
+ ```
107
+
108
+ When the installer asks which skills to take, include
109
+ `setup-resumebuilder-skills`. To update, run `npx skills@latest update`, and
110
+ re-run `add` to pick up new skills.
111
+
112
+ </canonical-block>
113
+
114
+ <canonical-block name="skills-sh-one-skill">
115
+
116
+ ```bash
117
+ npx skills@latest add S-Dawn/ResumeBuilder --skill=<name>
118
+ ```
119
+
120
+ ```bash
121
+ npx skills@latest update <name>
122
+ ```
123
+
124
+ </canonical-block>
125
+
126
+ `skills@latest` is the pinned spelling everywhere.
127
+
128
+ ## The two routes are exclusive
129
+
130
+ The plugin is a managed, read-only bundle you subscribe to. skills.sh writes
131
+ files you own and edit. Installing both leaves the user with every skill twice:
132
+ always say "pick one".
133
+
134
+ ## Step 2: Run /setup-resumebuilder-skills
135
+
136
+ In your agent, run it once per repo. It will:
137
+
138
+ - Ask where your canonical profile lives (`profile/`)
139
+ - Ask where resume drafts should be saved (`generated/`)
140
+ - Ask which ATS validation you want (WeasyPrint, pypdf, or both)
@@ -0,0 +1,8 @@
1
+ {
2
+ "changelog": "@changesets/changelog-github",
3
+ "repo": "https://github.com/S-Dawn/ResumeBuilder",
4
+ "access": "public",
5
+ "baseBranches": ["main"],
6
+ "updateInternalDependencies": "always",
7
+ "ignore": []
8
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
3
+ "changelog": "@changesets/changelog-github",
4
+ "repo": "https://github.com/S-Dawn/ResumeBuilder",
5
+ "access": "public",
6
+ "baseBranches": ["main"],
7
+ "updateInternalDependencies": "patch",
8
+ "ignore": []
9
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "resumebuilder",
3
+ "owner": {
4
+ "name": "Subham Dawn",
5
+ "url": "https://github.com/S-Dawn"
6
+ },
7
+ "description": "ResumeBuilder agent skills for resume generation and profile management, as an installable plugin.",
8
+ "plugins": [
9
+ {
10
+ "name": "resumebuilder-skills",
11
+ "source": "./",
12
+ "description": "ResumeBuilder agent skills (tailor resume, maintain profile, analyze profile fit, update projects).",
13
+ "category": "productivity",
14
+ "keywords": [
15
+ "resume",
16
+ "cv",
17
+ "skills",
18
+ "ats",
19
+ "profiling"
20
+ ]
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "resumebuilder-skills",
3
+ "version": "1.0.0",
4
+ "description": "ResumeBuilder agent skills for real engineering: tailor resume, maintain profile, analyze profile fit, update projects. Plug-and-play, not vibe coding.",
5
+ "author": {
6
+ "name": "Subham Dawn",
7
+ "url": "https://github.com/S-Dawn"
8
+ },
9
+ "homepage": "https://github.com/S-Dawn/ResumeBuilder",
10
+ "repository": "https://github.com/S-Dawn/ResumeBuilder",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "resume",
14
+ "cv",
15
+ "skills",
16
+ "ats",
17
+ "profiling",
18
+ "career"
19
+ ],
20
+ "skills": [
21
+ "./skills/tailor-resume",
22
+ "./skills/maintain-profile",
23
+ "./skills/analyze-profile-fit",
24
+ "./skills/update-projects",
25
+ "./skills/setup-resumebuilder-skills"
26
+ ]
27
+ }
@@ -0,0 +1,65 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ release:
8
+ types:
9
+ - published
10
+
11
+ concurrency: ${{ github.workflow }}-${{ github.ref }}
12
+
13
+ jobs:
14
+ release:
15
+ name: Version
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+ pull-requests: write
20
+ id-token: write
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Setup Node.js
26
+ uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 22
29
+
30
+ - name: Install dependencies
31
+ run: npm ci
32
+
33
+ - name: Create Version Pull Request
34
+ uses: changesets/action@v1
35
+ with:
36
+ version: npm run version
37
+ publish: npx changeset tag
38
+ commit: "chore: version skills"
39
+ title: "chore: version skills"
40
+ env:
41
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42
+
43
+ publish-python:
44
+ name: Publish Python engine to PyPI
45
+ runs-on: ubuntu-latest
46
+ if: github.event_name == 'release'
47
+ permissions:
48
+ contents: read
49
+ id-token: write
50
+ steps:
51
+ - name: Checkout
52
+ uses: actions/checkout@v4
53
+
54
+ - name: Set up Python
55
+ uses: actions/setup-python@v5
56
+ with:
57
+ python-version: "3.11"
58
+
59
+ - name: Install uv
60
+ uses: astral-sh/setup-uv@v3
61
+
62
+ - name: Build and publish to PyPI
63
+ run: |
64
+ uv build
65
+ uv publish
@@ -0,0 +1,36 @@
1
+ # Python cache and bytecode
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Virtual environments
7
+ .venv/
8
+ venv/
9
+ env/
10
+
11
+ # Tooling caches
12
+ .pytest_cache/
13
+ .mypy_cache/
14
+ .ruff_cache/
15
+
16
+ # OS/editor noise
17
+ .DS_Store
18
+ # .vscode/
19
+
20
+ # Generated resume artifacts
21
+ generated/
22
+ /profile/index.yaml
23
+ *.pdf
24
+ *.html
25
+
26
+ profile/*
27
+
28
+ # ResumeBuilder skills local config
29
+ resumebuilder-skills.config.json
30
+
31
+ # OpenSpec-generated agent integrations
32
+ .codex/skills/openspec-*/
33
+ .github/prompts/opsx-*.prompt.md
34
+ .github/skills/openspec-*/
35
+ .opencode/commands/opsx-*.md
36
+ .opencode/skills/openspec-*/
@@ -0,0 +1,49 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "Install Dependencies",
6
+ "type": "shell",
7
+ "command": "poetry",
8
+ "args": [
9
+ "install",
10
+ "--compile"
11
+ ]
12
+ },
13
+ {
14
+ "label": "Update OpenSpec Libraries",
15
+ "type": "shell",
16
+ "command": "npx",
17
+ "args": [
18
+ "--yes",
19
+ "@fission-ai/openspec@latest",
20
+ "update"
21
+ ]
22
+ },
23
+ {
24
+ "label": "Build Resume",
25
+ "type": "shell",
26
+ "command": "poetry",
27
+ "args": [
28
+ "run",
29
+ "python",
30
+ "ResumeBuilder.py"
31
+ ],
32
+ "group": {
33
+ "kind": "build",
34
+ "isDefault": true
35
+ }
36
+ },
37
+ {
38
+ "label": "Run Resume Builder",
39
+ "type": "shell",
40
+ "command": "poetry",
41
+ "args": [
42
+ "run",
43
+ "python",
44
+ "ResumeBuilder.py"
45
+ ],
46
+ "group": "none"
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,76 @@
1
+ # ResumeBuilder Skills Distribution Design
2
+
3
+ ## Goal
4
+
5
+ Enable users to install ResumeBuilder agent skills into their machine/agent runtime via an install command (e.g. `npx skills@latest add S-Dawn/ResumeBuilder`, `claude plugin install resumebuilder-skills`, etc.), with automatic updates for managed routes.
6
+
7
+ ## Distributable skills (non-openspec only)
8
+
9
+ The openspec skills (`openspec-*`) are local tooling for this repo's spec-driven workflow and are **excluded** from distribution.
10
+
11
+ Promoted (shipped) skills:
12
+
13
+ | Skill | Purpose |
14
+ |-------|---------|
15
+ | `tailor-resume` | Create a job-tailored/master/market resume from the canonical profile |
16
+ | `maintain-profile` | Update the canonical career profile from user-provided facts/resume |
17
+ | `analyze-profile-fit` | Compare profile against a job description; report fit, gaps, improvements |
18
+ | `update-projects` | Refine or add a project in the canonical career profile |
19
+
20
+ Plus a setup skill:
21
+
22
+ | Skill | Purpose |
23
+ |-------|---------|
24
+ | `setup-resumebuilder-skills` | One-time per-repo configuration (profile path, output dir, ATS settings) |
25
+
26
+ ## Distribution model (mirrors mattpocock/skills)
27
+
28
+ The repo does **not** publish an npm package containing the skill code. Instead:
29
+
30
+ 1. Skills live as `SKILL.md` files with YAML frontmatter under `skills/`.
31
+ 2. A `.claude-plugin/plugin.json` manifest lists the promoted skill directories (single source of truth, curated subset).
32
+ 3. A `.claude-plugin/marketplace.json` makes the repo its own marketplace for Codex, Copilot, and VS Code.
33
+ 4. A root `package.json` holds the version used by managed routes to detect updates.
34
+ 5. A `scripts/sync-plugin-version.mjs` keeps `plugin.json` version in sync with `package.json`.
35
+ 6. `@changesets/cli` drives version bumps and git tags via a GitHub Actions release workflow.
36
+ 7. `.agents/install-block.md` is the single source of truth for per-agent install wording, copied verbatim into `README.md`.
37
+ 8. `npx skills@latest add S-Dawn/ResumeBuilder -a <agent>` is the universal fallback (skills.sh) for agents without a native plugin system.
38
+
39
+ ## Install routes
40
+
41
+ | Agent | Command | Auto-updates? |
42
+ |-------|---------|---------------|
43
+ | Claude Code | `claude plugin install resumebuilder-skills` | Yes (official marketplace) |
44
+ | Codex | `codex plugin marketplace add S-Dawn/ResumeBuilder` then `codex plugin add resumebuilder-skills@S-Dawn` | Yes (at startup) |
45
+ | Copilot CLI / VS Code | `copilot plugin marketplace add S-Dawn/ResumeBuilder` then `copilot plugin install resumebuilder-skills@S-Dawn` (+ `autoUpdate: true` in settings) | Yes |
46
+ | Gemini CLI | `gemini skills install https://github.com/S-Dawn/ResumeBuilder.git --path skills/` | No (re-run to update) |
47
+ | Any other agent | `npx skills@latest add S-Dawn/ResumeBuilder -a <agent>` | No (`npx skills update` + re-run `add`) |
48
+
49
+ ## Files to create / modify
50
+
51
+ | File | Purpose |
52
+ |------|---------|
53
+ | `package.json` | Root package; name `resumebuilder-skills`, version, devDeps (`@changesets/cli`) |
54
+ | `.claude-plugin/plugin.json` | Claude Code plugin manifest; lists promoted skill paths + version |
55
+ | `.claude-plugin/marketplace.json` | Repo-owned marketplace for Codex/Copilot/VS Code |
56
+ | `.agents/install-block.md` | Canonical per-agent install wording (single source of truth) |
57
+ | `scripts/sync-plugin-version.mjs` | Syncs `plugin.json` version from `package.json` |
58
+ | `.changeset/config.json` | Changeset configuration |
59
+ | `.github/workflows/release.yml` | Release workflow: version PR + tag on push to main |
60
+ | `README.md` | Install section (copied from `.agents/install-block.md`) |
61
+ | `skills/setup-resumebuilder-skills/SKILL.md` | New setup skill (one-time per-repo config) |
62
+ | `DESIGN.md` | This document |
63
+
64
+ ## Invocation model
65
+
66
+ Each skill is either:
67
+ - **User-invoked**: reachable only by the human (`disable-model-invocation: true` in frontmatter; `policy.allow_implicit_invocation: false` in `agents/openai.yaml`).
68
+ - **Model-invoked**: default; reachable by model or user.
69
+
70
+ All ResumeBuilder distributable skills are user-invoked (the human chooses when to tailor, maintain, analyze, or update).
71
+
72
+ ## Update mechanism
73
+
74
+ - Managed routes (Claude Code, Codex, Copilot, VS Code) use the `version` field in `plugin.json` to decide when installed users receive an update.
75
+ - `npm run version` runs `changeset version` then `sync-plugin-version.mjs` to keep versions aligned.
76
+ - The universal fallback (`npx skills@latest`) requires the user to re-run `npx skills update` and `add` to pick up new/changed skills.
@@ -0,0 +1,236 @@
1
+ Metadata-Version: 2.5
2
+ Name: resumebuilder-tools
3
+ Version: 1.0.0
4
+ Summary: Profile-driven ATS-friendly resume generator engine for ResumeBuilder agent skills.
5
+ Author-email: Subham Dawn <coder.sdawn@gmail.com>
6
+ License: MIT
7
+ Keywords: ats,cv,pdf,resume,weasyprint,yaml
8
+ Requires-Python: >=3.11
9
+ Requires-Dist: pillow<14.0,>=13.0
10
+ Requires-Dist: pydyf<0.12,>=0.10
11
+ Requires-Dist: pypdf<7.0,>=6.21.3
12
+ Requires-Dist: pyyaml<7.0,>=6.0.2
13
+ Requires-Dist: weasyprint<71.0,>=70.0
14
+ Description-Content-Type: text/markdown
15
+
16
+ # ResumeBuilder
17
+
18
+ A Python/WeasyPrint resume generator with a reusable career evidence profile and GitHub Copilot skill for creating role-specific resume drafts.
19
+
20
+ ## Features
21
+
22
+ - Keep complete career evidence in `profile/` Markdown records with YAML frontmatter and stable claim IDs.
23
+ - Generate a compact index from profile metadata on demand; the Copilot skill reads only relevant profile details.
24
+ - Tailor a draft from a pasted or file-based job description with a source map and fit report, or create a consolidated master resume when no job description is supplied.
25
+ - Keep each draft's YAML, source map, HTML, and PDF in an isolated directory under `generated/`; tailored drafts include a fit report and master resumes include a conflict report.
26
+ - Check generated YAML, source references, PDF text, conventional section order, and strict one-page fit for tailored drafts. Master resumes retain all profile evidence and may span multiple pages.
27
+ - Preserve the original `resume.yaml` renderer workflow.
28
+
29
+ ## Requirements
30
+
31
+ - Python `>=3.11`
32
+ - [Poetry](https://python-poetry.org/) for dependency management
33
+
34
+ ## Installation
35
+
36
+ ### Install the skills in your agent
37
+
38
+ [![skills.sh](https://skills.sh/b/S-Dawn/ResumeBuilder)](https://skills.sh/S-Dawn/ResumeBuilder)
39
+
40
+ ResumeBuilder agent skills you can install once and use across your agent
41
+ runtime: tailor resume, maintain profile, analyze profile fit, and update
42
+ projects.
43
+
44
+ <details>
45
+ <summary><strong>Claude Code</strong></summary>
46
+
47
+ ```bash
48
+ claude plugin install resumebuilder-skills
49
+ ```
50
+
51
+ Updates itself by default.
52
+
53
+ </details>
54
+
55
+ <details>
56
+ <summary><strong>Codex</strong></summary>
57
+
58
+ ```bash
59
+ codex plugin marketplace add S-Dawn/ResumeBuilder
60
+ codex plugin add resumebuilder-skills@resumebuilder
61
+ ```
62
+
63
+ Updates itself at startup.
64
+
65
+ </details>
66
+
67
+ <details>
68
+ <summary><strong>GitHub Copilot</strong> (CLI and VS Code)</summary>
69
+
70
+ ```bash
71
+ copilot plugin marketplace add S-Dawn/ResumeBuilder
72
+ copilot plugin install resumebuilder-skills@resumebuilder
73
+ ```
74
+
75
+ Then, once, add to `~/.copilot/settings.json`:
76
+
77
+ ```json
78
+ {
79
+ "extraKnownMarketplaces": {
80
+ "resumebuilder": { "source": { "source": "github", "repo": "S-Dawn/ResumeBuilder" }, "autoUpdate": true }
81
+ }
82
+ }
83
+ ```
84
+
85
+ In VS Code, run **Chat: Install Plugin From Source** and enter
86
+ `https://github.com/S-Dawn/ResumeBuilder`. It updates daily.
87
+
88
+ </details>
89
+
90
+ <details>
91
+ <summary><strong>Gemini CLI</strong> (manual updates)</summary>
92
+
93
+ ```bash
94
+ gemini skills install https://github.com/S-Dawn/ResumeBuilder.git --path skills/
95
+ ```
96
+
97
+ Re-run to update.
98
+
99
+ </details>
100
+
101
+ <details>
102
+ <summary><strong>Any other agent</strong> (manual updates)</summary>
103
+
104
+ ```bash
105
+ npx skills@latest add S-Dawn/ResumeBuilder -a <agent> # cursor, opencode, devin, windsurf, amp, pi; omit -a to choose
106
+ ```
107
+
108
+ When the installer asks which skills to take, include
109
+ `setup-resumebuilder-skills`. To update, run `npx skills@latest update`, and
110
+ re-run `add` to pick up new skills.
111
+
112
+ </details>
113
+
114
+ ### Then run setup once per repo
115
+
116
+ In your agent, run `/setup-resumebuilder-skills`. It configures your profile
117
+ path, draft output directory, and ATS validation tools.
118
+
119
+ ### Install the repo itself (for local development)
120
+
121
+ ```bash
122
+ git clone https://github.com/S-Dawn/ResumeBuilder.git
123
+ cd ResumeBuilder
124
+ poetry install
125
+ ```
126
+
127
+ ## Generate from the legacy YAML
128
+
129
+ ```bash
130
+ # Reads resume.yaml and writes HTML/PDF to generated/
131
+ poetry run python ResumeBuilder.py
132
+
133
+ # Use a custom YAML configuration and output directory
134
+ poetry run python ResumeBuilder.py --config path/to/myresume.yaml --output-dir output/
135
+
136
+ # Enforce a one-page PDF and extracted-text checks
137
+ poetry run python ResumeBuilder.py --strict-one-page
138
+ ```
139
+
140
+ ## Analyze profile fit with GitHub Copilot
141
+
142
+ Use the **Analyze Profile Fit** skill with a pasted job description or a path to a job-description file to assess a role before deciding whether to apply. It compares relevant job qualifications with evidence in the canonical profile and reports supported, partially supported, and undocumented requirements with profile evidence IDs.
143
+
144
+ The report includes a qualitative assessment and a transparent weighted evidence-coverage score: supported qualifications receive full credit, partial matches half credit, unsupported qualifications no credit, and explicitly required qualifications count twice as much as preferred or other requirements. The score describes only what the profile documents; it is not a hiring or ATS prediction. The analysis distinguishes information to verify in the profile, positioning ideas based on existing evidence, and conditional skill-development areas.
145
+
146
+ This diagnostic does not create a resume, application draft, profile update, or retained report. For file-based job descriptions, the skill discloses that relevant job-description and profile contents are sent as context to the configured Copilot model and asks for confirmation before reading the file. The full job description is not retained. Profile silence is not treated as proof that the user lacks a qualification.
147
+
148
+ ## Tailor a resume with GitHub Copilot
149
+
150
+ Use the **Tailor Resume** skill in GitHub Copilot in VS Code and provide either a pasted job description or a path to a job-description file to create a tailored draft. If you provide no job description, the skill creates a consolidated master resume from all profile records and evidence.
151
+
152
+ For a master resume, the skill:
153
+
154
+ 1. Reads every indexed profile record and includes all distinct supported details.
155
+ 2. Produces `resume.yaml` and a `source-map.json` that trace every content field and cover every non-conflicting profile evidence ID.
156
+ 3. Creates `master-report.md` to disclose conflicting claims excluded for clarification.
157
+ 4. Creates an isolated `master-resume` draft, renders it, and validates its extracted text and single-column structure without a page or word-count limit.
158
+
159
+ For a job-tailored draft, the skill:
160
+
161
+ 1. Rebuilds and reads `profile/index.yaml`, then fetches relevant profile records as needed.
162
+ 2. Produces a tailored `resume.yaml`, `source-map.json`, and `fit-report.md`.
163
+ 3. Creates an isolated application draft under `generated/`, renders it, and checks the actual PDF.
164
+ 4. Uses the extracted PDF word count to guide content revisions toward a soft 900-word target without screenshots; strict one-page validation and readability remain authoritative.
165
+ 5. Presents the draft for human review; it does not submit applications.
166
+
167
+ For a market resume (no job description, market-oriented curation), the skill:
168
+
169
+ 1. Infers a candidate target role from the profile's title, domains, skills, and experience evidence.
170
+ 2. Presents the inferred role to the user for confirmation; the user may confirm, correct, or exit.
171
+ 3. Invokes web search per skill call for current MNC hiring expectations, required skills, and trends for the confirmed role.
172
+ 4. Curates profile evidence aligned to those trends under the same word-limit constraint as tailored mode: ~900 words, strict one-page fit, up to eight sequential render attempts.
173
+ 5. Produces `market-report.md` documenting the confirmed role, trend sources, omitted-evidence rationale, and conflicting claims.
174
+ 6. If web search is unavailable, prompts the user to proceed with the LLM knowledge base or exit; never fabricates trend data.
175
+
176
+ The skill may substantially rewrite claims, but it must not invent or alter factual claims. It flags conflicting source evidence and, for tailored drafts, identifies unsupported job requirements instead of inventing qualifications. ATS-oriented checks cover text extraction, conventional headings/order, and single-column layout; tailored drafts are also checked for one-page fit. These checks do not guarantee compatibility with every ATS vendor.
177
+
178
+ Tailored fit reports use `Evidence-backed matches` and `Unsupported or weakly supported requirements` sections. Supported requirements cite profile evidence IDs, and validation rejects unknown IDs or missing sections. Master resumes have no fit report because no target role is assessed.
179
+
180
+ If an application output already exists, choose a numbered draft, explicitly authorize replacement, or cancel. The default when interaction is unavailable is cancellation. Failed drafts are retained and marked failed for diagnosis.
181
+
182
+ ### Copilot data handling
183
+
184
+ Selected profile records and the job description are sent as context to the user's configured Copilot model. Do not store secrets in profile records. The full job description is not copied into retained generated artifacts.
185
+
186
+ ## Maintain the profile
187
+
188
+ See [profile/README.md](profile/README.md) for the Markdown/frontmatter format, stable evidence IDs, validation, and index behavior. Validate and rebuild the compact index with:
189
+
190
+ ```bash
191
+ poetry run python resume_tools.py validate-profile
192
+ poetry run python resume_tools.py profile-index
193
+ ```
194
+
195
+ Use the **Maintain Profile** Copilot skill for full-resume or career-fact consolidation, and **Update Projects** for focused changes to project records. Both preview and validate the complete update before requesting explicit approval; neither treats a tailored application resume as a canonical source. File and selected project-repository content is sent to the configured Copilot model only after disclosure and confirmation.
196
+
197
+ ## Renderer YAML structure
198
+
199
+ The renderer uses `highlights` for experience and project bullets:
200
+
201
+ ```yaml
202
+ profile:
203
+ name: Your Name
204
+ title: Your Job Title
205
+ phone: "+1 234 567 8900"
206
+ email: you@example.com
207
+ location: City, Country
208
+ links:
209
+ - label: LinkedIn
210
+ url: "https://linkedin.com/in/yourprofile"
211
+ summary: A concise professional summary.
212
+ skills:
213
+ - category: Languages
214
+ items: [Python, Java]
215
+ experience:
216
+ - role: Senior Software Engineer
217
+ company: Acme Corp
218
+ location: Remote
219
+ duration: Jan 2022 - Present
220
+ highlights:
221
+ - Built scalable microservices handling 10k requests per second.
222
+ projects:
223
+ - name: Example Project
224
+ highlights:
225
+ - Reduced processing time by 30%.
226
+ education:
227
+ - degree: B.Tech in Computer Science
228
+ institution: Example University
229
+ date: 2019
230
+ score: "GPA: 3.8"
231
+ certifications_and_achievements:
232
+ - "Achievements: Example Award"
233
+ - "Certifications: Example Certificate"
234
+ ```
235
+
236
+ Empty optional sections are omitted from the rendered output.