knowme-careerforge-skill 0.0.2 → 0.0.4

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 (37) hide show
  1. package/SKILL.md +11 -1
  2. package/agents/claude/knowme-careerforge.md +10 -9
  3. package/agents/codex/knowme-careerforge.yaml +3 -3
  4. package/agents/cursor/knowme-careerforge.mdc +12 -8
  5. package/agents/opencode/skill.yaml +1 -1
  6. package/agents/windsurf/knowme-careerforge.rules +9 -9
  7. package/dist/cli/src/commands/init.js +9 -0
  8. package/dist/cli/src/index.js +17 -0
  9. package/package.json +2 -1
  10. package/scripts/build/sync-version.py +11 -2
  11. package/scripts/template/instantiate-resume.py +8 -2
  12. package/scripts/template/search-template.py +290 -89
  13. package/skill.json +1 -1
  14. package/src/knowledge/index.json +2 -10
  15. package/src/knowledge/templates.json +1 -9
  16. package/src/references/01-evidence-mining.md +41 -0
  17. package/src/references/02-career-goal.md +38 -0
  18. package/src/references/03-jd-analysis.md +44 -0
  19. package/src/references/04-template-selection.md +43 -0
  20. package/src/references/05-html-canvas-tokens.md +51 -0
  21. package/src/references/06-qa-and-rendering.md +54 -0
  22. package/src/templates/classic/style.css +22 -51
  23. package/src/templates/common/base.css +150 -0
  24. package/src/templates/executive/style.css +30 -73
  25. package/src/templates/minimal/style.css +30 -72
  26. package/src/templates/modern/style.css +32 -72
  27. package/src/references/ats.md +0 -17
  28. package/src/references/evidence-first.md +0 -22
  29. package/src/references/pdf.md +0 -40
  30. package/src/references/resume-writing.md +0 -25
  31. package/src/references/template-design.md +0 -57
  32. package/src/workflows/analyze-job.md +0 -16
  33. package/src/workflows/define-goal.md +0 -16
  34. package/src/workflows/forge-resume.md +0 -25
  35. package/src/workflows/know-me.md +0 -21
  36. package/src/workflows/position.md +0 -19
  37. package/src/workflows/review.md +0 -31
package/SKILL.md CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knowme-careerforge
3
3
  displayName: KnowMe CareerForge
4
4
  description: An agent-native skill for self-discovery, career positioning, and tailored resume engineering. Analyzes candidate evidence, maps strengths to target JDs, crafts tailored resumes inside an HTML Intermediate Canvas, self-heals layout/ATS, and exports pixel-perfect PDFs.
5
- version: 0.0.2
5
+ version: 0.0.4
6
6
  ---
7
7
 
8
8
  # KnowMe CareerForge — Agent Reasoning Contract & Execution Specification
@@ -32,6 +32,16 @@ When this skill is activated, you are NOT a generic text generator. You act as a
32
32
  - Execute tool scripts silently in the background.
33
33
  - Final response contract: One-line Value Proposition + Top 3 Grounded Evidence Highlights + Direct Output File Paths (`workspace/resume.pdf` and `workspace/resume.html`).
34
34
 
35
+ ### Reference Manuals (L3 Domain Rules):
36
+ - **Stage 1 (Know Me)**: `references/01-evidence-mining.md`
37
+ - **Stage 2 (Define Goal)**: `references/02-career-goal.md`
38
+ - **Stage 3 (Understand JD)**: `references/03-jd-analysis.md`
39
+ - **Stage 4 (Position & Select)**: `references/04-template-selection.md`
40
+ - **Stage 5 (Forge Canvas)**: `references/05-html-canvas-tokens.md`
41
+ - **Stage 6 (Review & QA)**: `references/06-qa-and-rendering.md`
42
+
43
+ *See `AGENT.md` for strict editorial standards and `ARCHITECTURE.md` for system architecture.*
44
+
35
45
  ---
36
46
 
37
47
  ## 2. Input & Content Intelligence Layer (Repo-to-Resume Modes)
@@ -1,17 +1,18 @@
1
1
  ---
2
2
  description: An agent-native skill for self-discovery, career positioning, and tailored resume engineering.
3
- globs: ["workspace/*", "src/**/*", "scripts/**/*"]
3
+ globs: ["workspace/*", "src/**/*", "scripts/**/*", "references/*"]
4
4
  ---
5
5
 
6
6
  # KnowMe CareerForge — Claude Code Skill
7
7
 
8
- Know Yourself. Define Your Direction. Forge Your Opportunity.
8
+ > *"Know Yourself. Define Your Direction. Forge Your Opportunity."*
9
9
 
10
- When activated, follow the Evidence-First & Quiet Execution Protocol (see `scripts/Agent.md`):
11
- 1. **Evidence Mining (repo-to-resume)**: Extract codebase facts via `python3 scripts/evidence/extract-evidence.py --repo .` or run one-shot `python3 scripts/pipeline/forge.py`.
12
- 2. **Understand Target**: Analyze target JD via `python3 scripts/evidence/analyze-jd.py`.
13
- 3. **Template Search**: Match template (`python3 scripts/template/search-template.py`).
14
- 4. **Intermediate Canvas**: Instantiate `workspace/resume.html` via `python3 scripts/template/instantiate-resume.py` and calibrate CSS design tokens.
15
- 5. **Review & Dual QA**: Run `python3 scripts/validation/validate-resume.py`.
16
- 6. **PDF Delivery**: Export `workspace/resume.pdf` via `python3 scripts/rendering/render-pdf.py`.
10
+ When activated, follow the 6-Stage Deterministic Workflow and Quiet Execution Protocol (see `AGENT.md` and `ARCHITECTURE.md`):
11
+
12
+ 1. **Evidence Mining (repo-to-resume)**: Extract codebase facts via `python3 scripts/evidence/extract-evidence.py --repo .` or run one-shot `python3 scripts/pipeline/forge.py` (see `references/01-evidence-mining.md`).
13
+ 2. **Define Goal & Archetype**: Establish target seniority tier and capability matrix (see `references/02-career-goal.md`).
14
+ 3. **Understand Target**: Analyze target JD via `python3 scripts/evidence/analyze-jd.py` (see `references/03-jd-analysis.md`).
15
+ 4. **Template Search**: Match template via `python3 scripts/template/search-template.py` (see `references/04-template-selection.md`).
16
+ 5. **Intermediate Canvas**: Instantiate `workspace/resume.html` via `python3 scripts/template/instantiate-resume.py` and calibrate CSS design tokens (see `references/05-html-canvas-tokens.md`).
17
+ 6. **Review & Dual QA**: Run `python3 scripts/validation/validate-resume.py` and export `workspace/resume.pdf` via `python3 scripts/rendering/render-pdf.py` (see `references/06-qa-and-rendering.md`).
17
18
  7. **Quiet Delivery**: Execute silently in background; deliver concise executive summary and final file path (`workspace/resume.pdf`).
@@ -1,6 +1,6 @@
1
1
  name: knowme-careerforge
2
2
  description: An agent-native skill for self-discovery, career positioning, and tailored resume engineering.
3
- version: 0.0.2
3
+ version: 0.0.4
4
4
  entrypoint: SKILL.md
5
5
  tools:
6
6
  - name: forge
@@ -18,7 +18,7 @@ tools:
18
18
  - name: render-pdf
19
19
  command: python3 scripts/rendering/render-pdf.py
20
20
  rules:
21
- - "Execute tools silently in background (DO NOT print raw HTML, full CSS, or scripts in chat)."
21
+ - "Execute tools silently in background with --quiet (DO NOT print raw HTML, full CSS, or scripts in chat)."
22
22
  - "Use workspace/resume.html as the sole Intermediate Working Canvas."
23
23
  - "Deliver final concise summary and path to workspace/resume.pdf."
24
- - "Reference scripts/Agent.md for complete toolchain conventions."
24
+ - "Reference AGENT.md, ARCHITECTURE.md, and references/01~06 for complete specifications."
@@ -1,13 +1,17 @@
1
1
  ---
2
2
  description: KnowMe CareerForge — Agent-native career positioning and resume engineering
3
- globs: ["workspace/*", "src/**/*", "scripts/**/*"]
3
+ globs: ["workspace/*", "src/**/*", "scripts/**/*", "references/*"]
4
4
  ---
5
5
 
6
- # KnowMe CareerForge MDC Rules
6
+ # KnowMe CareerForge MDC Rules (Cursor)
7
7
 
8
- 1. **Evidence-First**: Never hallucinate ungrounded claims (strictly L1~L3 evidence).
9
- 2. **Repo-to-Resume**: Extract codebase facts using `python3 scripts/evidence/extract-evidence.py --repo .` or run one-shot `python3 scripts/pipeline/forge.py`.
10
- 3. **HTML Canvas**: Edit exclusively in `workspace/resume.html` Intermediate Working Canvas (`scripts/template/instantiate-resume.py`).
11
- 4. **Quiet Protocol**: Execute scripts silently in background; do not output raw HTML, CSS, or scripts into the chat.
12
- 5. **Deterministic PDF**: Validate via `python3 scripts/validation/validate-resume.py` and export via `python3 scripts/rendering/render-pdf.py`.
13
- 6. **Architecture Guide**: Refer to `scripts/Agent.md` for toolchain domain specifications.
8
+ When activated for career positioning, resume tailoring, or repo-to-resume analysis:
9
+
10
+ 1. **Evidence-First Invariant**: Enforce strict L1~L3 evidence classification (see `references/01-evidence-mining.md`). Never hallucinate ungrounded revenue metrics, fake degrees, or false tenures.
11
+ 2. **Repo-to-Resume Extraction**: Extract codebase facts using `python3 scripts/evidence/extract-evidence.py --repo .` or execute the one-shot pipeline `python3 scripts/pipeline/forge.py`.
12
+ 3. **Target Alignment & JD Parsing**: Analyze target Job Descriptions using `python3 scripts/evidence/analyze-jd.py` (see `references/03-jd-analysis.md`).
13
+ 4. **Template Search**: Match template via `python3 scripts/template/search-template.py "<Target Role>"` (see `references/04-template-selection.md`).
14
+ 5. **HTML Canvas Editing**: Edit exclusively in `workspace/resume.html` Intermediate Working Canvas (`scripts/template/instantiate-resume.py`). Calibrate CSS variables (`--resume-*`) in `:root` (see `references/05-html-canvas-tokens.md`).
15
+ 6. **Dual QA & Deterministic PDF**: Validate layout height ($297\text{mm} \le 1122.5\text{px}$) and ATS via `python3 scripts/validation/validate-resume.py`. Export final vector PDF via `python3 scripts/rendering/render-pdf.py`.
16
+ 7. **Quiet Execution Protocol**: Execute all tools silently with `--quiet`. Never output raw HTML/CSS into the chat. Deliver concise value proposition and direct output file paths.
17
+ 8. **Authoritative Guide**: Refer to root `AGENT.md` for Vercel-inspired editorial standards and `ARCHITECTURE.md` for system design.
@@ -1,7 +1,7 @@
1
1
  name: knowme-careerforge
2
2
  displayName: KnowMe CareerForge
3
3
  description: An agent-native skill for self-discovery, career positioning, and tailored resume engineering.
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  schema: 1.0
6
6
  entrypoint: SKILL.md
7
7
  tags:
@@ -2,12 +2,12 @@
2
2
  # Trigger: Career discovery, resume tailoring, JD analysis, repo-to-resume
3
3
 
4
4
  When user requests resume tailoring, project analysis, or career positioning:
5
- 1. Extract candidate facts using `python3 scripts/evidence/extract-evidence.py --repo .` or execute one-shot `python3 scripts/pipeline/forge.py`.
6
- 2. Tag all experience items with Evidence Level (L1~L3 only, strictly anti-hallucination).
7
- 3. Analyze target JD requirements using `python3 scripts/evidence/analyze-jd.py`.
8
- 4. Recommend best template using `python3 scripts/template/search-template.py`.
9
- 5. Instantiate `workspace/resume.html` using `python3 scripts/template/instantiate-resume.py` and calibrate CSS design tokens.
10
- 6. Validate DOM fit and ATS compatibility using `python3 scripts/validation/validate-resume.py`.
11
- 7. Export final deterministic PDF using `python3 scripts/rendering/render-pdf.py`.
12
- 8. Execute silently in background; deliver concise executive summary and final file path (`workspace/resume.pdf`).
13
- 9. Reference `scripts/Agent.md` for toolchain domain specifications.
5
+ 1. **Evidence Mining**: Extract candidate facts using `python3 scripts/evidence/extract-evidence.py --repo .` or execute one-shot `python3 scripts/pipeline/forge.py`.
6
+ 2. **Anti-Hallucination Gate**: Tag all experience items with Evidence Level (L1~L3 only, see `references/01-evidence-mining.md`).
7
+ 3. **JD & Signal Analysis**: Analyze target JD requirements using `python3 scripts/evidence/analyze-jd.py` (see `references/03-jd-analysis.md`).
8
+ 4. **Template Search**: Recommend best template using `python3 scripts/template/search-template.py` (see `references/04-template-selection.md`).
9
+ 5. **Canvas Instantiation**: Instantiate `workspace/resume.html` using `python3 scripts/template/instantiate-resume.py` and calibrate CSS design tokens (see `references/05-html-canvas-tokens.md`).
10
+ 6. **Dual QA Verification**: Validate DOM fit ($297\text{mm} \le 1122.5\text{px}$) and ATS compatibility using `python3 scripts/validation/validate-resume.py`.
11
+ 7. **Deterministic PDF Export**: Export final vector PDF using `python3 scripts/rendering/render-pdf.py` (see `references/06-qa-and-rendering.md`).
12
+ 8. **Quiet Delivery**: Execute silently in background (`--quiet`); deliver concise value proposition and direct output file paths (`workspace/resume.pdf`).
13
+ 9. **Authoritative Guide**: Refer to root `AGENT.md` for editorial standards and `ARCHITECTURE.md` for system architecture.
@@ -93,7 +93,10 @@ function runInit(options) {
93
93
  fs.mkdirSync(claudeDir, { recursive: true });
94
94
  copyDirRecursive(path.join(rootDir, 'scripts'), path.join(claudeDir, 'scripts'));
95
95
  copyDirRecursive(path.join(rootDir, 'src'), path.join(claudeDir, 'src'));
96
+ copyDirRecursive(path.join(rootDir, 'references'), path.join(claudeDir, 'references'));
96
97
  fs.copyFileSync(path.join(rootDir, 'SKILL.md'), path.join(claudeDir, 'SKILL.md'));
98
+ fs.copyFileSync(path.join(rootDir, 'AGENT.md'), path.join(claudeDir, 'AGENT.md'));
99
+ fs.copyFileSync(path.join(rootDir, 'ARCHITECTURE.md'), path.join(claudeDir, 'ARCHITECTURE.md'));
97
100
  fs.copyFileSync(path.join(rootDir, 'skill.json'), path.join(claudeDir, 'skill.json'));
98
101
  console.log(`[✓] Claude Code Skill fully bundled -> ${claudeDir}`);
99
102
  break;
@@ -103,7 +106,10 @@ function runInit(options) {
103
106
  fs.mkdirSync(codexDir, { recursive: true });
104
107
  copyDirRecursive(path.join(rootDir, 'scripts'), path.join(codexDir, 'scripts'));
105
108
  copyDirRecursive(path.join(rootDir, 'src'), path.join(codexDir, 'src'));
109
+ copyDirRecursive(path.join(rootDir, 'references'), path.join(codexDir, 'references'));
106
110
  fs.copyFileSync(path.join(rootDir, 'SKILL.md'), path.join(codexDir, 'SKILL.md'));
111
+ fs.copyFileSync(path.join(rootDir, 'AGENT.md'), path.join(codexDir, 'AGENT.md'));
112
+ fs.copyFileSync(path.join(rootDir, 'ARCHITECTURE.md'), path.join(codexDir, 'ARCHITECTURE.md'));
107
113
  fs.copyFileSync(path.join(rootDir, 'skill.json'), path.join(codexDir, 'skill.json'));
108
114
  if (fs.existsSync(path.join(rootDir, 'agents', 'codex', 'knowme-careerforge.yaml'))) {
109
115
  fs.copyFileSync(path.join(rootDir, 'agents', 'codex', 'knowme-careerforge.yaml'), path.join(codexDir, 'skill.yaml'));
@@ -139,7 +145,10 @@ function runInit(options) {
139
145
  fs.mkdirSync(opencodeDir, { recursive: true });
140
146
  copyDirRecursive(path.join(rootDir, 'scripts'), path.join(opencodeDir, 'scripts'));
141
147
  copyDirRecursive(path.join(rootDir, 'src'), path.join(opencodeDir, 'src'));
148
+ copyDirRecursive(path.join(rootDir, 'references'), path.join(opencodeDir, 'references'));
142
149
  fs.copyFileSync(path.join(rootDir, 'SKILL.md'), path.join(opencodeDir, 'SKILL.md'));
150
+ fs.copyFileSync(path.join(rootDir, 'AGENT.md'), path.join(opencodeDir, 'AGENT.md'));
151
+ fs.copyFileSync(path.join(rootDir, 'ARCHITECTURE.md'), path.join(opencodeDir, 'ARCHITECTURE.md'));
143
152
  fs.copyFileSync(path.join(rootDir, 'skill.json'), path.join(opencodeDir, 'skill.json'));
144
153
  console.log(`[✓] OpenCode Skill fully bundled -> ${opencodeDir}`);
145
154
  break;
@@ -53,6 +53,17 @@ function findPackageRoot(startDir) {
53
53
  }
54
54
  return path.resolve(startDir, '../../..');
55
55
  }
56
+ function getVersion(rootDir) {
57
+ try {
58
+ const pkgJson = path.join(rootDir, 'package.json');
59
+ if (require('fs').existsSync(pkgJson)) {
60
+ const data = JSON.parse(require('fs').readFileSync(pkgJson, 'utf-8'));
61
+ return data.version || '0.0.4';
62
+ }
63
+ }
64
+ catch { }
65
+ return '0.0.4';
66
+ }
56
67
  function showHelp() {
57
68
  console.log(`
58
69
  ======================================================================
@@ -179,6 +190,12 @@ function main() {
179
190
  child_process.spawnSync('python3', [scriptPath], { stdio: 'inherit' });
180
191
  break;
181
192
  }
193
+ case '--version':
194
+ case '-v':
195
+ case 'version': {
196
+ console.log(getVersion(rootDir));
197
+ break;
198
+ }
182
199
  case 'help':
183
200
  case '--help':
184
201
  case '-h':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "knowme-careerforge-skill",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "An agent-native skill for self-discovery, career positioning, and tailored resume engineering.",
5
5
  "main": "dist/cli/src/index.js",
6
6
  "bin": {
@@ -30,6 +30,7 @@
30
30
  "build:knowledge": "python3 scripts/build/build-knowledge.py",
31
31
  "build:gallery": "python3 scripts/build/build-gallery.py",
32
32
  "release": "python3 scripts/build/release.py",
33
+ "version:sync": "python3 scripts/build/sync-version.py",
33
34
  "prepublishOnly": "npm run build && npm test"
34
35
  },
35
36
  "keywords": [
@@ -79,8 +79,17 @@ def sync_version(new_version: str):
79
79
  new_text = re.sub(r'version:\s*[\d.]+', f'version: {semver}', text)
80
80
  opencode_yaml.write_text(new_text, encoding="utf-8")
81
81
  print(f"[✓] Synced agents/opencode/skill.yaml -> {semver}")
82
+ # 8. Update cli/src/index.ts fallback version
83
+ cli_ts_path = base_dir / "cli" / "src" / "index.ts"
84
+ if cli_ts_path.exists():
85
+ text = cli_ts_path.read_text(encoding="utf-8")
86
+ new_text = re.sub(r"return\s+data\.version\s*\|\|\s*'[^']+'", f"return data.version || '{semver}'", text)
87
+ new_text = re.sub(r"return\s+'[^']+'\s*;", f"return '{semver}';", new_text)
88
+ cli_ts_path.write_text(new_text, encoding="utf-8")
89
+ print(f"[✓] Synced cli/src/index.ts -> {semver}")
82
90
 
83
- # 8. Update scripts/Agent.md
91
+
92
+ # 9. Update scripts/Agent.md
84
93
  agent_md = base_dir / "scripts" / "Agent.md"
85
94
  if agent_md.exists():
86
95
  text = agent_md.read_text(encoding="utf-8")
@@ -88,7 +97,7 @@ def sync_version(new_version: str):
88
97
  agent_md.write_text(new_text, encoding="utf-8")
89
98
  print(f"[✓] Synced scripts/Agent.md -> v{semver}")
90
99
 
91
- # 9. Recompile knowledge index to update index.json version
100
+ # 10. Recompile knowledge index to update index.json version
92
101
  kb_script = base_dir / "scripts" / "build" / "build-knowledge.py"
93
102
  if kb_script.exists():
94
103
  import subprocess
@@ -129,6 +129,7 @@ def instantiate_workspace(template_id: str, profile_path: Optional[str] = None,
129
129
 
130
130
  html_file = template_dir / "template.html"
131
131
  css_file = template_dir / "style.css"
132
+ base_css_file = base_dir / "src" / "templates" / "common" / "base.css"
132
133
 
133
134
  if not html_file.exists() or not css_file.exists():
134
135
  raise FileNotFoundError(f"template.html or style.css missing in {template_dir}")
@@ -136,11 +137,16 @@ def instantiate_workspace(template_id: str, profile_path: Optional[str] = None,
136
137
  html_content = html_file.read_text(encoding="utf-8")
137
138
  css_content = css_file.read_text(encoding="utf-8")
138
139
 
140
+ combined_css = ""
141
+ if base_css_file.exists():
142
+ combined_css = base_css_file.read_text(encoding="utf-8") + "\n\n/* === TEMPLATE SPECIFIC STYLES === */\n" + css_content
143
+ else:
144
+ combined_css = css_content
145
+
139
146
  inlined_html = html_content.replace(
140
147
  '<link rel="stylesheet" href="style.css">',
141
- f'<style>\n{css_content}\n </style>'
148
+ f'<style>\n{combined_css}\n </style>'
142
149
  )
143
-
144
150
  kw_list = [k.strip() for k in keywords.split(",") if k.strip()] if keywords else []
145
151
 
146
152
  if profile_path and Path(profile_path).exists():