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.
- resumebuilder_tools-1.0.0/.agents/install-block.md +140 -0
- resumebuilder_tools-1.0.0/.changeset/README.md +8 -0
- resumebuilder_tools-1.0.0/.changeset/config.json +9 -0
- resumebuilder_tools-1.0.0/.claude-plugin/marketplace.json +23 -0
- resumebuilder_tools-1.0.0/.claude-plugin/plugin.json +27 -0
- resumebuilder_tools-1.0.0/.github/workflows/release.yml +65 -0
- resumebuilder_tools-1.0.0/.gitignore +36 -0
- resumebuilder_tools-1.0.0/.vscode/tasks.json +49 -0
- resumebuilder_tools-1.0.0/DESIGN.md +76 -0
- resumebuilder_tools-1.0.0/PKG-INFO +236 -0
- resumebuilder_tools-1.0.0/PUBLISH_TO_PYPI.md +217 -0
- resumebuilder_tools-1.0.0/README.md +221 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/design.md +85 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/proposal.md +26 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/specs/profile-maintenance/spec.md +92 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/specs/project-updates/spec.md +117 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-add-profile-project-management-skills/tasks.md +24 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/design.md +90 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/proposal.md +25 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/specs/profile-based-resume-tailoring/spec.md +126 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-20-tailor-resume-from-profile/tasks.md +36 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/design.md +72 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/proposal.md +23 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/specs/profile-fit-analysis/spec.md +87 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-10-21-analyze-profile-fit/tasks.md +12 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/design.md +82 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/proposal.md +32 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/specs/market-resume-mode/spec.md +93 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-add-market-resume-mode/tasks.md +36 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/design.md +61 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/proposal.md +30 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/specs/skills-relocation/spec.md +37 -0
- resumebuilder_tools-1.0.0/openspec/changes/archive/2026-11-03-move-skills-to-skills-directory/tasks.md +20 -0
- resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/.openspec.yaml +2 -0
- resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/design.md +69 -0
- resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/proposal.md +29 -0
- resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/specs/python-engine-pypi/spec.md +48 -0
- resumebuilder_tools-1.0.0/openspec/changes/publish-python-engine-to-pypi/tasks.md +36 -0
- resumebuilder_tools-1.0.0/openspec/config.yaml +20 -0
- resumebuilder_tools-1.0.0/openspec/specs/market-resume-mode/spec.md +98 -0
- resumebuilder_tools-1.0.0/openspec/specs/profile-based-resume-tailoring/spec.md +264 -0
- resumebuilder_tools-1.0.0/openspec/specs/profile-fit-analysis/spec.md +93 -0
- resumebuilder_tools-1.0.0/openspec/specs/profile-maintenance/spec.md +97 -0
- resumebuilder_tools-1.0.0/openspec/specs/project-updates/spec.md +122 -0
- resumebuilder_tools-1.0.0/package-lock.json +1381 -0
- resumebuilder_tools-1.0.0/package.json +20 -0
- resumebuilder_tools-1.0.0/pyproject.toml +26 -0
- resumebuilder_tools-1.0.0/python_engine/ResumeBuilder.py +496 -0
- resumebuilder_tools-1.0.0/python_engine/__init__.py +1 -0
- resumebuilder_tools-1.0.0/python_engine/resume_tools.py +1229 -0
- resumebuilder_tools-1.0.0/scripts/sync-plugin-version.mjs +41 -0
- resumebuilder_tools-1.0.0/security-autofix-changes.md +27 -0
- resumebuilder_tools-1.0.0/skills/analyze-profile-fit/SKILL.md +117 -0
- resumebuilder_tools-1.0.0/skills/maintain-profile/SKILL.md +87 -0
- resumebuilder_tools-1.0.0/skills/setup-resumebuilder-skills/SKILL.md +50 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/SKILL.md +52 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/market-mode.md +76 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/master-mode.md +56 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/rendering.md +79 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/tailored-mode.md +62 -0
- resumebuilder_tools-1.0.0/skills/tailor-resume/trust-boundaries.md +15 -0
- resumebuilder_tools-1.0.0/skills/update-projects/SKILL.md +85 -0
- resumebuilder_tools-1.0.0/tests/test_resume_tools.py +897 -0
- 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,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
|
+
[](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.
|