https://github.com/easyvibecoding/vibe-resume
Turn your AI coding history (Claude Code, Cursor, Copilot, ChatGPT exports, git commits) into a versioned, reviewer-ready résumé — 9 locales, JIS履歴書 grid, Europass, reviewer audit. For the vibe coding era.
https://github.com/easyvibecoding/vibe-resume
ai-agent ai-coding-assistant ats-friendly career claude-code cli cv-builder developer-portfolio docx europass hermes-agent i18n japanese-resume markdown pandoc python resume-builder resume-generator resume-tailoring self-hosted
Last synced: 22 days ago
JSON representation
Turn your AI coding history (Claude Code, Cursor, Copilot, ChatGPT exports, git commits) into a versioned, reviewer-ready résumé — 9 locales, JIS履歴書 grid, Europass, reviewer audit. For the vibe coding era.
- Host: GitHub
- URL: https://github.com/easyvibecoding/vibe-resume
- Owner: easyvibecoding
- License: mit
- Created: 2026-04-20T16:22:31.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-28T00:34:36.000Z (25 days ago)
- Last Synced: 2026-05-28T02:23:52.856Z (25 days ago)
- Topics: ai-agent, ai-coding-assistant, ats-friendly, career, claude-code, cli, cv-builder, developer-portfolio, docx, europass, hermes-agent, i18n, japanese-resume, markdown, pandoc, python, resume-builder, resume-generator, resume-tailoring, self-hosted
- Language: Python
- Homepage: https://github.com/easyvibecoding/vibe-resume
- Size: 3.19 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 25
-
Metadata Files:
- Readme: README.ja.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Security: SECURITY.md
- Roadmap: ROADMAP.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# vibe-resume
> AI コーディング履歴をバージョン管理された、レビュー用意の整った履歴書に変換する —— **vibe coding 時代のために**。
[](https://github.com/easyvibecoding/vibe-resume/actions/workflows/tests.yml)
[](LICENSE)
[](https://www.python.org/downloads/)
[](docs/resume_locales.md)
[](https://github.com/astral-sh/uv)

`vibe-resume` は、macOS 上で使用したあらゆる AI アシスタント(Claude Code、Cursor、GitHub Copilot、Cline、Continue、Aider、Windsurf、Zed AI、ChatGPT / Claude.ai / Gemini / Grok / Perplexity / Mistral のクラウドエクスポート、さらに ComfyUI、Midjourney、Suno、ElevenLabs、そして `git` コミット)をスキャンし、その利用履歴を **Markdown / DOCX / PDF の履歴書**にまとめます。git スナップショットが組み込まれているので、草稿のすべてのバージョンを差分表示・ロールバックできます。
## 他ツールとの違い
| | vibe-resume | Reactive Resume / OpenResume | Resume-LM / Resume Matcher | HackMyResume / JSON Resume |
|---|---|---|---|---|
| **主シグナル** | AI ツールセッション + git コミット(自動抽出) | ユーザーが手入力する WYSIWYG | アップロード PDF + JD | ユーザー手書きの JSON |
| **ロケール数** | **10** (en_US/en_EU/en_GB/zh_TW/zh_HK/zh_CN/ja_JP/ko_KR/de_DE/fr_FR) 各文化対応レイアウト | 1–2 | 1 | theme 依存 |
| **JIS Z 8303 履歴書グリッド** | ✅ `render/japan.py` | ❌ | ❌ | ❌ |
| **Europass ラベル付き個人情報** | ✅ `en_EU` テンプレート | ❌ | ❌ | ❌ |
| **レビュー監査** | 8 項目スコアカード + トレンドスパークライン | — | ATS スコアのみ | — |
| **JD テーラリング** | `enrich --tailor JD.txt`(LLM プロンプト注入) | — | ✅ LLM 書き直し | — |
| **プライバシー** | 完全ローカル。デフォルトモードは LLM 作業を Claude Code セッション内に留め(サブスク枠を使用);`--mode subprocess` のみ `claude -p` を起動(2026-06-15 以降は Agent SDK 月枠を消費)。 | 状況による(OpenAI キー任意) | クラウド API 必須 | 完全ローカル |
| **形態** | Python CLI パイプライン | Web UI | Web UI | Node CLI |
| **Agent-Skill 対応ホスト数** | **8**(Claude Code · Gemini CLI · Copilot CLI · Cursor · Warp · OpenClaw · OpenCode · Hermes)—— 単一 canonical SKILL.md | — | — | — |
## なぜ
2026 年の採用は、「Claude Code」を単にスキルとして並べるのではなく、**AI 協業による生産性を定量成果で証明できる**エンジニアを重視します。レビュアーは、アーキテクチャ判断、スタック横断の幅(フロントエンド / バックエンド / DevOps / バグ修正 / デプロイ)、そして出荷スピードを見ています。あなたの AI ツールはすでにこれらを自動で記録しています。`vibe-resume` はその「使用の残滓」を証拠に変えます。
## 機能
### ローカル extractor(ログイン不要)
| ソース | 場所 |
|---|---|
| Claude Code | `~/.claude/projects/**/*.jsonl` |
| Claude Code Archive | `~/ClaudeCodeArchive/current`(任意の rsync バックアップ) |
| Cursor | `~/Library/Application Support/Cursor/User/**/state.vscdb` |
| GitHub Copilot (VS Code) | `workspaceStorage/**/chatSessions/` |
| Cline | `globalStorage/saoudrizwan.claude-dev/` または `~/.cline/data/` |
| Continue.dev | `~/.continue/sessions/` |
| Aider | `$HOME/**/.aider.chat.history.md` |
| Windsurf / Cascade | `~/.codeium/windsurf/cascade/` |
| Zed AI | `~/.local/share/zed/threads/` |
| Claude Desktop | MCP 設定 + extensions |
| Git コミット | `$HOME` 配下のすべての `.git` を author email でフィルタ |
### クラウドエクスポート取り込み(ZIP を `data/imports//` に置く)
ChatGPT · Claude.ai · Gemini Takeout · Grok · Perplexity · Mistral Le Chat · Poe
### AIGC extractor
`image_local`(ComfyUI / A1111 PNG メタデータ)· `midjourney`(IPTC/XMP)· `elevenlabs`(history API)· `suno`(ローカル MP3 ID3)· `runway` / `heygen`(stub)
### 履歴書インテリジェンス
- **タスク分類器** —— 各セッションを frontend / backend / bug-fix / deployment / refactor / testing などにタグ付け
- **能力の幅** —— プロジェクトごとの相異カテゴリ数を数え、マルチスキル人材を可視化
- **30 日ローリング統計** —— アクティブ日数比、日平均、ピーク日、最長連続日(Claude Code の 30 日クリーンアップと整合)
- **XYZ エンリッチャー** —— Claude Code CLI をヘッドレスで呼び出し、ノイジーな活動を Google 風の履歴書箇条書きに変換
- **技術スタック正規化** —— `postgres` → `PostgreSQL`、`tailwind` → `Tailwind CSS`
- **ハードスキル vs ドメインタグ分離** —— ATS キーワードを綺麗に保つ
- **プライバシーフィルタ** —— regex 遮蔽 + プロジェクトブロックリスト + 任意の技術抽象化
- **バージョン管理出力** —— `data/resume_history/` 配下の内部 git リポに `list-versions` / `diff v1 v2` / `rollback`
## Agent Skill として使う(Claude Code · Gemini CLI · Copilot CLI · Cursor · Warp · OpenClaw · OpenCode · Hermes)
本リポは **Agent Skill** としてもインストールできます。ユーザーの発話が `description` フロントマターと一致すると、ホストが SKILL.md 全文を読み込み、指示通りにパイプラインを実行します。
| ホスト | 発見パス | 本リポでの設定 |
|---|---|---|
| **Claude Code** | `.claude/skills//SKILL.md` | Canonical —— 自動ロード |
| **Gemini CLI**(Google) | `.gemini/skills//SKILL.md` | canonical への symlink |
| **GitHub Copilot CLI** | ネイティブで `.claude/skills/` を読む(2026-04 changelog) | 設定不要 |
| **Cursor CLI** | `AGENTS.md` + `.cursor/rules/` | `AGENTS.md` が SKILL.md を指す |
| **Warp**(エージェント型ターミナル) | `.claude/skills/` + `.agents/skills/` + `.warp/skills/` を読む | 設定不要;防御的に `.agents/skills/` symlink も追加済み |
| **OpenClaw**(250k⭐) | `~/.openclaw/skills/`(ユーザースコープのみ) | ユーザースコープ symlink が必要 |
| **OpenCode**(端末 CLI エージェント) | `.opencode/skills/` + `~/.opencode/skills/` | プロジェクトスコープ symlink 同梱 |
| **Hermes Agent**(Nous Research) | リポ `skills//SKILL.md` → `~/.hermes/skills///` にインストール | ネイティブ skill は [`skills/ai-used-resume/SKILL.md`](skills/ai-used-resume/SKILL.md);`hermes skills tap add` + `hermes skills install` で導入 |
### インストール —— 3 つのエコシステム Tier
2026 年の agent-skills エコシステムは**4 つのインストール経路**に収斂しました。ご自身の agent に合わせて 1 本選ぶだけ。8 個の `ln -s` を書く必要はありません。
**Tier 0 —— Plugin marketplace(bundled インストール、skill は namespace 付き)**
```bash
# Claude Code(.claude-plugin/plugin.json を使用)
/plugin marketplace add easyvibecoding/vibe-resume
/plugin install vibe-resume@vibe-resume
# OpenAI Codex ≥ 0.121(.codex-plugin/{plugin,marketplace}.json を使用)
codex plugin marketplace add easyvibecoding/vibe-resume
codex
/plugins # TUI 内で vibe-resume を見つけてインストール
```
Codex の plugin サポートは [codex-cli v0.121.0](https://developers.openai.com/codex/changelog)(2026-04-15)から提供されています。旧バージョンでは Tier 1(`npx skills add …`)をご利用ください。shell コマンドの代わりに `/plugins` 画面で marketplace をインタラクティブに追加することもできます。
Plugin は skill と将来追加する commands / agents / hooks / MCP servers を 1 つのインストール単位として包みます。skill は `/vibe-resume:ai-used-resume`(namespace 付き)で呼び出され、素の `/ai-used-resume` ではありません。
**Tier 1 —— 37 以上の `agentskills.io` 標準ホスト(一行で全部に入る)**
```bash
npx skills add easyvibecoding/vibe-resume --skill ai-used-resume
```
`npx skills` はインストール済みの CLI / IDE エージェントを自動検出し、対応ディレクトリに振り分けます。この一行で Claude Code、Cursor、Windsurf、Gemini CLI、GitHub Copilot、Codex、Qwen Code、Kimi Code、Roo Code、Kilo Code、Goose、Trae、OpenCode、Amp、Antigravity、Kiro、Factory、Junie などを一括カバー。特定のエージェントに限定する場合は `-a `:
```bash
npx skills add easyvibecoding/vibe-resume -a claude-code -a cursor -a windsurf
```
Tier-1 対応エージェント slug 一覧(-a 用)
Slug は 2026-04-22 の `skills@latest` に対して実機検証済み。`npx skills add … -a unknown` を実行すると最新リストが表示されます。
| Agent | slug | | Agent | slug |
|---|---|---|---|---|
| Amp | `amp` | | Kilo Code | `kilo` |
| Antigravity | `antigravity` | | Kimi Code CLI | `kimi-cli` |
| Augment | `augment` | | Kiro CLI | `kiro-cli` |
| Claude Code | `claude-code` | | Mistral Vibe | `mistral-vibe` |
| Cline | `cline` | | opencode | `opencode` |
| CodeBuddy | `codebuddy` | | OpenHands | `openhands` |
| Codex CLI | `codex` | | Pi | `pi` |
| Continue | `continue` | | Qoder | `qoder` |
| Cursor | `cursor` | | Qwen Code | `qwen-code` |
| Gemini CLI | `gemini-cli` | | Replit | `replit` |
| GitHub Copilot | `github-copilot` | | Roo | `roo` |
| Goose | `goose` | | Trae | `trae` / `trae-cn` |
| IBM Bob | `bob` | | Warp | `warp` |
| iFlow CLI | `iflow-cli` | | Windsurf | `windsurf` |
| Junie | `junie` | | Zencoder | `zencoder` |
Universal fallback:`-a universal` を指定すると skill は `.agents/skills/` 配下に置かれ、Claude Code / Codex / Gemini CLI / Cursor / Warp / Amp / Cline / OpenCode / Antigravity がネイティブでこのパスを読むため、1 回のインストールで全対応。最新の slug 一覧は [vercel-labs/skills](https://github.com/vercel-labs/skills) を参照。
**Tier 2 —— OpenClaw(独自 ClawHub marketplace + 5,400+ skill registry)**
```bash
openclaw skills install easyvibecoding/vibe-resume/ai-used-resume
```
**Tier 3 —— Hermes Agent(独自 `skills.sh` registry + ネイティブ 5-section body 形式)**
```bash
hermes skills tap add easyvibecoding/vibe-resume
hermes skills install easyvibecoding/vibe-resume/ai-used-resume --force --yes
```
手動インストール / symlink フォールバック(Node 不要・パス自由・Windows)
`npx skills` を使わない、または symlink の配置を完全にコントロールしたい場合:
```bash
# Tier 1 ホスト —— リポの canonical SKILL.md から symlink
mkdir -p ~/.claude/skills && ln -s "$(pwd)/skills/ai-used-resume" ~/.claude/skills/ai-used-resume
mkdir -p ~/.gemini/skills && ln -s "$(pwd)/skills/ai-used-resume" ~/.gemini/skills/ai-used-resume
mkdir -p ~/.warp/skills && ln -s "$(pwd)/skills/ai-used-resume" ~/.warp/skills/ai-used-resume
mkdir -p ~/.opencode/skills && ln -s "$(pwd)/skills/ai-used-resume" ~/.opencode/skills/ai-used-resume
# Cursor はプロジェクトルートの AGENTS.md を設定不要で読みます。横断利用は ~/.cursor/rules/ へコピー。
```
Windows(管理者 PowerShell):
```powershell
New-Item -ItemType SymbolicLink -Path $HOME\.claude\skills\ai-used-resume `
-Value (Resolve-Path .claude\skills\ai-used-resume)
# .gemini / .warp / .opencode も同様に
```
### インストール後の呼び出し方
**2026 年時点のすべてのホストが** `description` 一致による自動トリガーに対応しています。自然言語で十分です:**「AI 利用履歴から職務経歴書を生成して」**、**「日本語で履歴書をレンダリングして」**、**「この JD 向けにテーラリングして」**、**「履歴書を採点して」**、**「履歴書のスコア推移を見せて」**。多くのホストは明示呼び出しにも対応:
| ホスト | 自動トリガー | 明示呼び出し |
|---|---|---|
| **Claude Code** | ✅ `description` 一致 | `/ai-used-resume` スラッシュコマンド |
| **Gemini CLI** | ✅ `activate_skill` ツールがロード | インストール後 `/agents refresh` を一度 |
| **GitHub Copilot CLI** | ✅ description 一致 | `gh skill install easyvibecoding/vibe-resume` |
| **Cursor CLI** | ✅ プロジェクトルートの `AGENTS.md` が自動適用 | 内容を `.cursor/rules/` にコピー可 |
| **Warp** | ✅ エージェントが利用可能な skill から選択 | `/ai-used-resume` または skill 検索メニュー |
| **OpenClaw** | ✅ ロード時に description で判定 | `/ai-used-resume` または `openclaw skills install` |
| **OpenCode** | ✅ 内蔵 `SkillTool` 経由 | `/ai-used-resume` スラッシュコマンド |
| **Hermes Agent** | ✅ description 一致 | `hermes chat -s ai-used-resume -q "履歴書を生成して"` でプリロード |
インストールが成功したかは、任意のホストに次を投げてください:**「実際に走らせず、AI 利用履歴から履歴書を生成する 6 つのコマンドを順に説明して」**。応答が `extract → aggregate → enrich → render → review → trend` を挙げ、`uv run vibe-resume` 構文を使えば正しくロードされています(Hermes では `hermes chat -Q -s ai-used-resume` で実機検証済み)。
## クイックスタート
```bash
# 1. インストール
uv venv && uv pip install -e ".[dev]"
# 2. プロフィール入力
cp profile.example.yaml profile.yaml
$EDITOR profile.yaml # 最低でも name / target_role
# config.yaml が無い場合は初回実行時に config.example.yaml から自動 bootstrap
# 3. (任意)クラウド ZIP エクスポートを data/imports// に配置
# 4. パイプライン実行
uv run vibe-resume extract # 4× 並列 extract + プログレスバー
uv run vibe-resume aggregate # プロジェクト分類 + スタック推定
uv run vibe-resume enrich # デフォルトは Claude Code セッション用にプロンプトを出力(XYZ bullet)
uv run vibe-resume render -f all # md + docx + pdf + git スナップショット
```
## コマンド
| コマンド | 機能 |
|---|---|
| `vibe-resume extract [--only NAME]` | extractor 実行、`data/cache/*.json` にキャッシュ |
| `vibe-resume aggregate` | プロジェクト分類、タスクカテゴリ、スタック推定 |
| `vibe-resume enrich [-n N] [--locale L] [--tailor JD.txt]` | summary + achievements 生成(英語は XYZ、中日独仏韓は名詞句);`--tailor` で bullet を JD キーワード寄りに |
| `vibe-resume render -f md\|docx\|pdf\|all [--locale L]` | レンダリング + git スナップショット |
| `vibe-resume render --all-locales [-f FMT]` | 登録済みロケール全てを一括レンダリング |
| `vibe-resume render --tailor data/imports/jd.txt` | 特定 JD 用にテーラリング |
| `vibe-resume review [-v N \| --file PATH] [--locale L] [--jd JD.txt]` | 8 項目レビュアーチェックでスコアリング |
| `vibe-resume trend [--locale L]` | ロケール別スコア履歴、平均、最新評価 |
| `vibe-resume completion {bash\|zsh\|fish} [--install]` | シェル補完スクリプト出力/インストール |
| `vibe-resume status` | ソース別のアクティビティ数 |
| `vibe-resume list-versions` / `vibe-resume diff 1 2` | 履歴書バージョン履歴 |
## 多言語ロケールレンダリング
`vibe-resume` は各ロケール専用テンプレートを内蔵し、同じ `profile.yaml` とプロジェクトデータから、各地域のレビュアーが期待する版面を出力します。
**サンプル出力は [`docs/samples/`](docs/samples/README.md) を参照**:`en_EU`(Europass)、`ja_JP`(職務経歴書)、`zh_TW`(繁中)の 3 ロケール対照例があります。
```bash
uv run vibe-resume render -f md --locale en_US # ATS 最適化 US デフォルト
uv run vibe-resume render -f md --locale ja_JP # 職務経歴書(md/pdf)
uv run vibe-resume render -f all --locale ja_JP # 履歴書 DOCX グリッド + 職務経歴書
uv run vibe-resume render -f md --locale de_DE # Persönliche Daten 付き Lebenslauf
```
| ロケール | スタイル | 写真 | 見出し例 | 特色 |
|---|---|---|---|---|
| `en_US`(デフォルト) | XYZ 動詞起点 | 禁止 | Summary / Skills / Experience / … | フラットな ATS 対応スキル行 |
| `en_EU` | XYZ 動詞起点 | 任意 | Personal information / Work experience / Education and training / … | Europass スタイル —— ラベル付き個人情報、CEFR、GDPR 極小化(DOB はデフォルト非表示) |
| `en_GB` | XYZ 動詞起点 | 禁止 | Personal statement / … | イギリス綴り、CEFR |
| `zh_TW` | 名詞句 | 任意 | 自我介紹 / 技能專長 / 工作經歷 / … | 繁体、全角分隔、中英技術混在 |
| `zh_HK` | 名詞句 | 任意 | Personal Profile 個人簡介 / Work Experience 工作經驗 / … | **バイリンガル見出し EN + 繁**、CEFR、HKID は出力しない |
| `zh_CN` | 名詞句 | 任意 | 个人简介 / 专业技能 / … | 簡体、大企業向け(アメリカ寄り) |
| `ja_JP` | 名詞句 | **必須** | 職務要約 / 職務経歴 / … | DOCX = JIS Z 8303 履歴書グリッド(`render/japan.py`)、md = 職務経歴書 |
| `ko_KR` | 名詞句 | **必須** | 자기소개 / 보유 기술 / 경력 / … | 자기소개서は別ドキュメント扱い |
| `de_DE` | 名詞句 | **必須** | Persönliche Daten / Berufserfahrung / … | `dob` / `nationality` が入力されたときのみ出力 |
| `fr_FR` | 名詞句 | 任意 | Profil / Compétences / Expérience / … | ジュニア 1 ページ、シニア 2 ページ |
### ロケール別テキスト上書き
`UserProfile` は `extra="allow"` なので、任意の `_` キーが英語原フィールドと並存でき、テンプレートは `localized` Jinja フィルタで正しいものを選びます:
```yaml
title: "Senior Full-stack Engineer"
title_ja_JP: "シニアフルスタックエンジニア"
title_zh_TW: "資深全端工程師"
summary: "Full-stack engineer who…"
summary_ja_JP: "FastAPIとpgvectorを核にRAG検索基盤を設計し…"
experience:
- title: "Senior Full-stack Engineer"
title_ja_JP: "シニアフルスタックエンジニア"
company: "Lumen Labs"
company_ja_JP: "Lumen Labs(シード期 AI SaaS)"
bullets:
- "Reduced query latency from 1.8s to 620ms..."
bullets_ja_JP:
- "クエリ中央値レイテンシを 1.8 秒から 620 ミリ秒に短縮…"
```
任意のロケール条件個人情報フィールド(`dob` / `gender` / `nationality` / `mil_service` / `photo_path` / `marital_status`)は `profile.example.yaml` で解説されています。(a) 現在のロケールの `personal_fields` に該当キーがあり、(b) 値が空でないときだけ出力されます。
設計判断と各ロケールのフィールド対応表は `docs/resume_locales.md` に集約しています。
### ロケール解決チェーン
レンダラーは以下の順にロケールを決定し、最初に値がある箇所で停止します:
1. CLI の `--locale`(最優先)
2. `profile.yaml` の `profile.preferred_locale`
3. `config.yaml` の `config.render.locale`
4. `en_US` フォールバック
```yaml
# profile.yaml —— CLI が上書きしない限り ja_JP で出力
preferred_locale: ja_JP
# config.yaml —— チーム共通デフォルト
render:
locale: en_US
all_locales_formats: ["md", "docx"] # --all-locales が各ロケール用に出す形式
```
`vibe-resume render --locale zh_TW` は常に `preferred_locale` を上書きし、省略時は `preferred_locale` が引き継ぎます。`enrich` が LLM を呼ぶ際も同じチェーンを通るため、どのノブを回しても言語ラベルが正しく注入されます。
### 全ロケールの一括レンダリング
市場ごとに一式を用意したい最終日:
```bash
uv run vibe-resume render --all-locales # config.render.all_locales_formats を使用
uv run vibe-resume render --all-locales -f docx # フォーマットを強制
uv run vibe-resume render --all-locales --tailor jd.txt # 1 つの JD を全ロケールに適用
```
`--all-locales` は `LOCALES` レジストリ全体(現在 10 件)を走査します。各ロケールの出力形式は `config.render.all_locales_formats`(デフォルト `["md"]`)で管理され、`["md", "docx", "pdf"]` にすればフルセットを一気に生成できます。`--locale` と `--all-locales` は排他です。
## レビュアーペルソナ(`--persona`)
Tech Lead 審査を通る履歴書は HR の初期フィルタで落ちることがあり、その逆もしかり。`--persona` はロケール(言語)と `--tailor`(特定 JD)に直交する **第 3 の軸 = 想定読者**を追加します。同じ活動データ・同じロケールでも、読者が変われば bullet の語気・強調・専門用語密度も変わります。
| Key | 読者 | この読者が最初に見る点 |
|---|---|---|
| `tech_lead` | Staff+ エンジニア / テックリード | 具体的なシステム名、パフォーマンス数値、トレードオフ動詞(*migrated / replaced / introduced*) |
| `hr` | HR / リクルーター | キャリア軌跡、職能横断コラボ、平易な言葉でのビジネスインパクト;頭字語の連打はスキップされる |
| `executive` | VP / 採用決裁者 | ビジネス成果(売上、コスト、チーム規模、ユーザーリーチ);各ロールの 1 件目は「見出し」になる |
| `startup_founder` | アーリーステージ創業者(A ラウンド前) | エンドツーエンドの所有権、出荷速度、コスト意識;大企業プロセス的な書き方は割り引かれる |
| `academic` | 学術 / 研究職の選考委員 | 方法論の厳密さ、データセット、ベンチマーク、引用スタイルの枠組み |
3 軸は自由に組み合わせ可能:
```bash
# 同一人物、3 種類の読者、日本市場
uv run vibe-resume enrich --persona tech_lead --locale ja_JP -n 3
uv run vibe-resume review --persona tech_lead --locale ja_JP
uv run vibe-resume enrich --persona hr --locale ja_JP -n 3
uv run vibe-resume review --persona hr --locale ja_JP
# Executive レンズ + JD テーラリング + 英語
uv run vibe-resume enrich --persona executive --tailor data/imports/jd.txt --locale en_US -n 3
uv run vibe-resume review --persona executive --jd data/imports/jd.txt
```
ペルソナは捏造しません —— あくまで「語り直し」の指示です。元データが支持しない数値・人名・意思決定は出てきません。`review --persona` は採点表の末尾に、該当ペルソナのレビュー観点アドバイスを付加します。
## 戦略的履歴書 —— ターゲット企業プロファイル(`--company`、`--level`)
内蔵の 70 社プロファイル + 6 つのキャリアレベル原型により、enrich + review を特定の採用基準に合わせてチューニングできます —— locale / persona / JD tailor と直交する軸です。各プロファイルは `core/profiles/.yaml` にあり、ファクトチェック日時 (`last_verified_at`) を必ず保持するので、古くなったデータが黙って履歴書を汚染することはなく、適用時に明示的な警告が出ます。
**バンドルされたカタログを閲覧:**
```bash
# tier 別にグループ化 —— frontier_ai / ai_unicorn / regional_ai /
# tw_local / us_tier2 / eu / jp / kr
uv run vibe-resume company list
uv run vibe-resume company list --tier jp
# プロファイル全文(must-haves / red flags / keyword anchors /
# enrich_bias / review_tips / 最終検証日)
uv run vibe-resume company show rakuten
# 70 社の age テーブル —— 90 日しきい値超過をフラグ
# (現在の AI 採用市場の四半期リフレッシュサイクルに合わせる)
uv run vibe-resume company audit
uv run vibe-resume company audit --only-stale --stale-days 30
```
**企業とレベルを enrich + review に適用:**
```bash
# 楽天の senior IC 向けに履歴書をチューニング
uv run vibe-resume enrich --company rakuten --level senior --locale ja_JP -n 3
uv run vibe-resume render -f all --locale ja_JP
uv run vibe-resume review --company rakuten --level senior --locale ja_JP
# 同じ raw activity・異なる雇用主 —— review は 8 項目の基本ルーブリックに
# 加えて企業固有の "Company keyword coverage" スコア (0/10) を付与
uv run vibe-resume review --company mercari --level senior --locale ja_JP
uv run vibe-resume review --company openai --level senior --locale en_US
```
**`--company` 適用ごとに検証日を自動チェックします。** プロファイルが 90 日より古ければ、CLI は赤字警告と更新パスを表示 —— 古い調査結果が黙って履歴書に染み込むことはありません。
**古いプロファイルを更新:**
```bash
# ファクトチェックを claude CLI エージェントに委譲(直近 ≤90 日 + 過去 2-3 年の
# ダブルトラック交差検証)。レポートは data/verification_reports/_.md に保存。
uv run vibe-resume company verify rakuten
# エージェントが VERDICT: clean を返せば検証日を自動更新
uv run vibe-resume company verify rakuten --apply
# ブラウザで手動確認済みなら、日付をそのままバンプ
uv run vibe-resume company mark-verified rakuten
uv run vibe-resume company mark-verified rakuten --date 2027-01-15 --yes
```
`mark-verified` は YAML の日付行だけを書き換え、コメント・折り返し文字列・他のすべての手編集を保持します。新しいプロファイルを追加するのも drop-in:`core/profiles/.yaml` を書いて `last_verified_at: "YYYY-MM-DD"` を指定するだけで、loader が登録し、wheel にも同梱され、`--company` で即消費可能になります。
キャリアレベル(`--level`):`new_grad` · `junior` · `mid` · `senior` · `staff_plus` · `research_scientist`。各原型はそのレベルのレビュアーが期待する lead-bullet のシグナルを内蔵しており、mid 仕事を staff では守れない scope claim に昇格させてしまうことを防ぎます。
## レビュアー視点の監査(`vibe-resume review`)

レンダリング後、実際のレビュアーと同じ 8 項目チェックリストでスコアリングします:
```bash
uv run vibe-resume review # 最新版
uv run vibe-resume review -v 9 # 特定バージョン
uv run vibe-resume review -v 12 --jd jd.txt # JD キーワード一致度を追加
```
各草稿は以下の 8 項目で評価されます:
1. **Top fold** —— 氏名、志望職種、1 つ以上の具体的指標が最初の 12 行以内にあるか
2. **Numbers per bullet** —— 職務経歴 bullet の 60% 以上に定量指標があるか
3. **Keyword echo (JD)** —— JD の主要な大文字語が草稿に現れているか(`--jd` が無ければスキップ)
4. **Action-verb first** —— XYZ ロケールで bullet が過去形動詞で始まるか
5. **Density (noun-phrase)** —— 名詞句ロケールで bullet が自己完結し、宙に浮いた代名詞が無いか
6. **Red flags** —— ロケール別に写真 / DOB / "References available upon request" / 連続見出しなどを検査
7. **Contact line width** —— ヘッダー行が印刷幅で折り返して崩れないか(CJK 文字は 2 倍幅)
8. **Page count** —— 行数と折り返しから推定するページ数 vs ロケール推奨(US/UK ≤2、DE/JP/KR ≤3)
`data/reviews/_review.md` と `.json` を出力し、版をまたいで diff 可能です。実在のレビュアーに提出する前は B/(80%) 以上が目安。
### スコアトレンド(`vibe-resume trend`)
`review` を走らせるたびに `data/reviews/` に JSON が残り、`trend` はそれをロケール別にまとめて、どの市場バージョンが進歩/後退しているかを一目で示します:
```bash
uv run vibe-resume trend # 全ロケール
uv run vibe-resume trend --locale ja_JP
```
```
Locale Runs First Latest Mean Grade Trend
en_US 6 58/80 v16: 78/80 91.0% A ▂▅▆▇██
ja_JP 3 50/80 v14: 72/80 82.5% A ▁▅█
zh_TW 4 42/80 v15: 74/80 85.0% A ▁▃▆█
```
スパークラインは U+2581..U+2588 の Unicode ブロックで描画され、どの等幅端末でも崩れません。列は: 実行回数、初回スコア、最新スコア(バージョン番号付)、実行全体の平均 %、最新の評価、実行ごとの推移。
## Claude Code 30 日クリーンアップ —— 重要
Claude Code はデフォルトで 30 日以上経過したセッション JSONL を削除します。長期保存したい場合は:
```bash
# 1. 保持日数を伸ばす
python3 -c "import json,pathlib; p=pathlib.Path.home()/'.claude/settings.json'; \
d=json.loads(p.read_text()); d['cleanupPeriodDays']=365; \
p.write_text(json.dumps(d,indent=2,ensure_ascii=False))"
# 2. 定期 rsync バックアップ(スクリプト同梱)
chmod +x scripts/backup_claude_projects.sh
./scripts/backup_claude_projects.sh
# launchd / cron に週次で登録
```
### Windows バックアップ(Task Scheduler)
`scripts/backup_claude_projects.ps1` は PowerShell 7 版の同等スクリプトで、`robocopy /MIR /XO` により `%USERPROFILE%\.claude\projects` を `%USERPROFILE%\ClaudeCodeArchive\current` にミラーし、日付つきスナップショットも保存します:
```powershell
# 単発実行
pwsh -NoProfile -File scripts\backup_claude_projects.ps1
# ドライラン(macOS/Linux でも動くので冒煙テストに便利)
pwsh -NoProfile -File scripts\backup_claude_projects.ps1 -WhatIf
# 週次タスクとして登録(毎週日曜 03:00)
schtasks /Create /TN "vibe-resume backup" /XML scripts\vibe-resume-backup.xml
```
`scripts/vibe-resume-backup.xml` は Task Scheduler にそのまま取り込めるテンプレートです。取り込み前に `` を実際の clone 先に書き換えてください。CI は `windows-latest` で `PSScriptAnalyzer` による厳格検査と `-WhatIf` ブランチの実行を行っています。
## プロジェクト構成
```
vibe-resume/
├── profile.example.yaml # コミット済みテンプレート —— profile.yaml にコピー
├── config.example.yaml # コミット済みテンプレート —— 初回実行時に config.yaml へ自動コピー
├── profile.yaml # 個人情報(gitignored)
├── config.yaml # 個人の extractor パスとプライバシー規則(gitignored)
├── cli.py # エントリーポイント(`vibe-resume` としてもインストール)
├── core/
│ ├── schema.py # Pydantic v2: Activity、ProjectGroup、UserProfile
│ ├── classifier.py # 18 タスクカテゴリ(バイリンガル regex)
│ ├── tech_canonical.py # ハードスキル vs ドメインタグ
│ ├── stats.py # ローリング統計(30d/7d)
│ ├── privacy.py # 遮蔽 + ブロックリスト + 技術抽象
│ ├── aggregator.py # 分類 + headline + 重要度ランキング
│ ├── enricher.py # mode dispatcher: prompt(デフォルト)/ subprocess / rule-based
│ ├── review.py # 8 項目スコアカード + トレンドスパークライン
│ ├── versioning.py # 草稿の git スナップショット
│ └── runner.py # ThreadPoolExecutor パイプライン + rich.progress
├── extractors/
│ ├── local/ # 11 個のローカル extractor
│ ├── cloud_export/ # 7 個の ZIP インポーター
│ └── api/ # 6 個の AIGC extractor
├── render/
│ ├── renderer.py # md / docx / pdf
│ ├── japan.py # JIS Z 8303 履歴書グリッド(ja_JP DOCX 専用)
│ ├── i18n.py # LOCALES レジストリ + ロケール別ラベル辞書
│ └── templates/resume..md.j2
├── scripts/
│ ├── backup_claude_projects.sh # macOS / Linux rsync
│ ├── backup_claude_projects.ps1 # Windows PowerShell 7(robocopy)
│ ├── vibe-resume-backup.xml # Task Scheduler 取り込みテンプレート
│ └── com.vibe-resume.backup.plist # macOS launchd agent
├── data/
│ ├── imports/ # ダウンロードした ZIP を置く(gitignored、sample_jd.txt のみ保持)
│ ├── cache/ # ソース別 extractor JSON(gitignored)
│ ├── resume_history/ # レンダリング出力 + 内部 git(gitignored)
│ └── reviews/ # レビュー結果と履歴(gitignored)
├── docs/samples/ # ロケール別サンプル出力
├── skills/ai-used-resume/ # 全 8 ホスト用 canonical skill(symlink 経由)
│ ├── SKILL.md # 5-section body、agentskills.io 準拠
│ └── references/ # strategic-resume · troubleshooting · extending
├── .claude/skills/ai-used-resume/ → symlink → skills/ai-used-resume/
├── .gemini/skills/ai-used-resume/ → symlink → skills/ai-used-resume/
├── .agents/skills/ai-used-resume/ → symlink → skills/ai-used-resume/(Codex + Warp)
├── .opencode/skills/ai-used-resume/ → symlink → skills/ai-used-resume/
├── .claude-plugin/plugin.json # Claude Code plugin マニフェスト(marketplace 配布)
└── .codex-plugin/plugin.json # OpenAI Codex plugin マニフェスト(marketplace 配布)
```
## 新しい extractor を追加する
```python
# extractors/local/mytool.py
from core.schema import Activity, ActivityType, Source
NAME = "mytool"
def extract(cfg: dict) -> list[Activity]:
return [] # Activity オブジェクトを返す
```
`core/runner.py` の `LOCAL_EXTRACTORS` に登録し、`config.yaml` で有効化するだけです。
## 既知の制約
- 全 `$HOME` スキャン(`git_repos`、`aider`)は 4× 並列 extractor でも初回 1–3 分かかります —— `scan.mode: whitelist` に切り替えると範囲を絞れます。`_find_repos` には 120 秒の壁時計デッドラインがあり、FUSE マウントや壊れた symlink でも全体が止まりません。
- Grok / Perplexity / Mistral のエクスポート schema は**緩く解析**しています(公式スキーマが未公開のため)。フィールドが合わない場合は `data/imports/` に実サンプルを置いてください。
- Claude Desktop のチャット本文は Local Storage に暗号化されています —— MCP 設定 + extensions のみ取得可能です。
- PDF レンダリングで CJK を出すには `pandoc` + XeLaTeX が必要です。無い場合は素の pandoc にフォールバックします。
## ライセンス
MIT —— [LICENSE](LICENSE) を参照。
## 関連プロジェクト
2026 年のエコシステムを徹底調査した結果、**直接的な競合は存在しません** ——
(1) マルチソース AI ツール抽出、(2) 10 ロケール対応レンダリング、(3) レビュー監査、
この 3 点すべてを同時に満たすツールはありません。最も近い隣接プロジェクトもいずれか 1 点のみのカバー:
- [whoisjayd/gitresume](https://github.com/whoisjayd/gitresume) —— 最も近い隣接ツール;ローカル / リモートの GitHub リポから抽出 → 履歴書 bullet を生成。シングルソース(git のみ)・シングル言語。`vibe-resume` は 18 種の AI ツール extractor、10 ロケール、レビュー監査を追加。
- [AmirhosseinOlyaei/AI-Resume-Builder](https://github.com/AmirhosseinOlyaei/AI-Resume-Builder) —— PR 説明と commit メッセージから bullet を生成。同じ thesis ですがソースが狭い(Claude Code / Cursor / ChatGPT は非対応)。
- [AndreaCadonna/resumake-mcp](https://github.com/AndreaCadonna/resumake-mcp) —— MCP 経由で LaTeX 履歴書を生成。レンダリング専門で抽出層なし。本ツールの pipeline のレンダリング段に対する補完関係。
- [javiera-vasquez/claude-code-job-tailor](https://github.com/javiera-vasquez/claude-code-job-tailor) —— Claude Code 内で YAML 履歴書を JD-tailored PDF に整形。JD マッチング段での補完関係;本ツールの `--tailor` と同じ発想ですが、手で書いた YAML ではなく抽出済みの活動データから開始します。
`vibe-resume` は本リスト中で唯一、**複数の AI ツールからの抽出 + 10 種の文化固有ロケールでのレンダリング + トレンド追跡付きレビュー監査**をすべて同時に実現するツールです。