{"id":50285607,"url":"https://github.com/easyvibecoding/vibe-resume","last_synced_at":"2026-05-30T12:01:37.154Z","repository":{"id":352679792,"uuid":"1216162792","full_name":"easyvibecoding/vibe-resume","owner":"easyvibecoding","description":"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.","archived":false,"fork":false,"pushed_at":"2026-05-28T00:34:36.000Z","size":3343,"stargazers_count":1,"open_issues_count":25,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T02:23:52.856Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://github.com/easyvibecoding/vibe-resume","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easyvibecoding.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["easyvibecoding"]}},"created_at":"2026-04-20T16:22:31.000Z","updated_at":"2026-05-28T00:34:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/easyvibecoding/vibe-resume","commit_stats":null,"previous_names":["easyvibecoding/vibe-resume"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/easyvibecoding/vibe-resume","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easyvibecoding%2Fvibe-resume","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easyvibecoding%2Fvibe-resume/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easyvibecoding%2Fvibe-resume/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easyvibecoding%2Fvibe-resume/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easyvibecoding","download_url":"https://codeload.github.com/easyvibecoding/vibe-resume/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easyvibecoding%2Fvibe-resume/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33691312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2026-05-28T02:02:49.945Z","updated_at":"2026-05-30T12:01:37.140Z","avatar_url":"https://github.com/easyvibecoding.png","language":"Python","funding_links":["https://github.com/sponsors/easyvibecoding"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo.png\" width=\"120\" alt=\"vibe-resume logo\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e ·\n  \u003ca href=\"README.zh-TW.md\"\u003e繁體中文\u003c/a\u003e ·\n  \u003ca href=\"README.zh-CN.md\"\u003e简体中文\u003c/a\u003e ·\n  \u003cstrong\u003e日本語\u003c/strong\u003e\n\u003c/p\u003e\n\n# vibe-resume\n\n\u003e AI コーディング履歴をバージョン管理された、レビュー用意の整った履歴書に変換する —— **vibe coding 時代のために**。\n\n[![CI](https://github.com/easyvibecoding/vibe-resume/actions/workflows/tests.yml/badge.svg)](https://github.com/easyvibecoding/vibe-resume/actions/workflows/tests.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![Locales](https://img.shields.io/badge/locales-10-brightgreen.svg)](docs/resume_locales.md)\n[![uv](https://img.shields.io/badge/packaged%20with-uv-261230.svg)](https://github.com/astral-sh/uv)\n\n![vibe-resume hero — AI ツールのセッションが extract→aggregate→enrich→render を経て 10 言語の履歴書になる](docs/assets/hero.png)\n\n`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 スナップショットが組み込まれているので、草稿のすべてのバージョンを差分表示・ロールバックできます。\n\n## 他ツールとの違い\n\n| | vibe-resume | Reactive Resume / OpenResume | Resume-LM / Resume Matcher | HackMyResume / JSON Resume |\n|---|---|---|---|---|\n| **主シグナル** | AI ツールセッション + git コミット(自動抽出) | ユーザーが手入力する WYSIWYG | アップロード PDF + JD | ユーザー手書きの JSON |\n| **ロケール数** | **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 依存 |\n| **JIS Z 8303 履歴書グリッド** | ✅ `render/japan.py` | ❌ | ❌ | ❌ |\n| **Europass ラベル付き個人情報** | ✅ `en_EU` テンプレート | ❌ | ❌ | ❌ |\n| **レビュー監査** | 8 項目スコアカード + トレンドスパークライン | — | ATS スコアのみ | — |\n| **JD テーラリング** | `enrich --tailor JD.txt`(LLM プロンプト注入) | — | ✅ LLM 書き直し | — |\n| **プライバシー** | 完全ローカル。デフォルトモードは LLM 作業を Claude Code セッション内に留め(サブスク枠を使用);`--mode subprocess` のみ `claude -p` を起動(2026-06-15 以降は Agent SDK 月枠を消費)。 | 状況による(OpenAI キー任意) | クラウド API 必須 | 完全ローカル |\n| **形態** | Python CLI パイプライン | Web UI | Web UI | Node CLI |\n| **Agent-Skill 対応ホスト数** | **8**(Claude Code · Gemini CLI · Copilot CLI · Cursor · Warp · OpenClaw · OpenCode · Hermes)—— 単一 canonical SKILL.md | — | — | — |\n\n## なぜ\n\n2026 年の採用は、「Claude Code」を単にスキルとして並べるのではなく、**AI 協業による生産性を定量成果で証明できる**エンジニアを重視します。レビュアーは、アーキテクチャ判断、スタック横断の幅(フロントエンド / バックエンド / DevOps / バグ修正 / デプロイ)、そして出荷スピードを見ています。あなたの AI ツールはすでにこれらを自動で記録しています。`vibe-resume` はその「使用の残滓」を証拠に変えます。\n\n## 機能\n\n### ローカル extractor(ログイン不要)\n| ソース | 場所 |\n|---|---|\n| Claude Code | `~/.claude/projects/**/*.jsonl` |\n| Claude Code Archive | `~/ClaudeCodeArchive/current`(任意の rsync バックアップ) |\n| Cursor | `~/Library/Application Support/Cursor/User/**/state.vscdb` |\n| GitHub Copilot (VS Code) | `workspaceStorage/**/chatSessions/` |\n| Cline | `globalStorage/saoudrizwan.claude-dev/` または `~/.cline/data/` |\n| Continue.dev | `~/.continue/sessions/` |\n| Aider | `$HOME/**/.aider.chat.history.md` |\n| Windsurf / Cascade | `~/.codeium/windsurf/cascade/` |\n| Zed AI | `~/.local/share/zed/threads/` |\n| Claude Desktop | MCP 設定 + extensions |\n| Git コミット | `$HOME` 配下のすべての `.git` を author email でフィルタ |\n\n### クラウドエクスポート取り込み(ZIP を `data/imports/\u003ctool\u003e/` に置く)\nChatGPT · Claude.ai · Gemini Takeout · Grok · Perplexity · Mistral Le Chat · Poe\n\n### AIGC extractor\n`image_local`(ComfyUI / A1111 PNG メタデータ)· `midjourney`(IPTC/XMP)· `elevenlabs`(history API)· `suno`(ローカル MP3 ID3)· `runway` / `heygen`(stub)\n\n### 履歴書インテリジェンス\n- **タスク分類器** —— 各セッションを frontend / backend / bug-fix / deployment / refactor / testing などにタグ付け\n- **能力の幅** —— プロジェクトごとの相異カテゴリ数を数え、マルチスキル人材を可視化\n- **30 日ローリング統計** —— アクティブ日数比、日平均、ピーク日、最長連続日(Claude Code の 30 日クリーンアップと整合)\n- **XYZ エンリッチャー** —— Claude Code CLI をヘッドレスで呼び出し、ノイジーな活動を Google 風の履歴書箇条書きに変換\n- **技術スタック正規化** —— `postgres` → `PostgreSQL`、`tailwind` → `Tailwind CSS`\n- **ハードスキル vs ドメインタグ分離** —— ATS キーワードを綺麗に保つ\n- **プライバシーフィルタ** —— regex 遮蔽 + プロジェクトブロックリスト + 任意の技術抽象化\n- **バージョン管理出力** —— `data/resume_history/` 配下の内部 git リポに `list-versions` / `diff v1 v2` / `rollback`\n\n## Agent Skill として使う(Claude Code · Gemini CLI · Copilot CLI · Cursor · Warp · OpenClaw · OpenCode · Hermes)\n\n本リポは **Agent Skill** としてもインストールできます。ユーザーの発話が `description` フロントマターと一致すると、ホストが SKILL.md 全文を読み込み、指示通りにパイプラインを実行します。\n\n| ホスト | 発見パス | 本リポでの設定 |\n|---|---|---|\n| **Claude Code** | `.claude/skills/\u003cname\u003e/SKILL.md` | Canonical —— 自動ロード |\n| **Gemini CLI**(Google) | `.gemini/skills/\u003cname\u003e/SKILL.md` | canonical への symlink |\n| **GitHub Copilot CLI** | ネイティブで `.claude/skills/` を読む(2026-04 changelog) | 設定不要 |\n| **Cursor CLI** | `AGENTS.md` + `.cursor/rules/` | `AGENTS.md` が SKILL.md を指す |\n| **Warp**(エージェント型ターミナル) | `.claude/skills/` + `.agents/skills/` + `.warp/skills/` を読む | 設定不要;防御的に `.agents/skills/` symlink も追加済み |\n| **OpenClaw**(250k⭐) | `~/.openclaw/skills/`(ユーザースコープのみ) | ユーザースコープ symlink が必要 |\n| **OpenCode**(端末 CLI エージェント) | `.opencode/skills/` + `~/.opencode/skills/` | プロジェクトスコープ symlink 同梱 |\n| **Hermes Agent**(Nous Research) | リポ `skills/\u003cname\u003e/SKILL.md` → `~/.hermes/skills/\u003ccategory\u003e/\u003cname\u003e/` にインストール | ネイティブ skill は [`skills/ai-used-resume/SKILL.md`](skills/ai-used-resume/SKILL.md);`hermes skills tap add` + `hermes skills install` で導入 |\n\n### インストール —— 3 つのエコシステム Tier\n\n2026 年の agent-skills エコシステムは**4 つのインストール経路**に収斂しました。ご自身の agent に合わせて 1 本選ぶだけ。8 個の `ln -s` を書く必要はありません。\n\n**Tier 0 —— Plugin marketplace(bundled インストール、skill は namespace 付き)**\n\n```bash\n# Claude Code(.claude-plugin/plugin.json を使用)\n/plugin marketplace add easyvibecoding/vibe-resume\n/plugin install vibe-resume@vibe-resume\n\n# OpenAI Codex ≥ 0.121(.codex-plugin/{plugin,marketplace}.json を使用)\ncodex plugin marketplace add easyvibecoding/vibe-resume\ncodex\n/plugins   # TUI 内で vibe-resume を見つけてインストール\n```\n\nCodex の plugin サポートは [codex-cli v0.121.0](https://developers.openai.com/codex/changelog)(2026-04-15)から提供されています。旧バージョンでは Tier 1(`npx skills add …`)をご利用ください。shell コマンドの代わりに `/plugins` 画面で marketplace をインタラクティブに追加することもできます。\n\nPlugin は skill と将来追加する commands / agents / hooks / MCP servers を 1 つのインストール単位として包みます。skill は `/vibe-resume:ai-used-resume`(namespace 付き)で呼び出され、素の `/ai-used-resume` ではありません。\n\n**Tier 1 —— 37 以上の `agentskills.io` 標準ホスト(一行で全部に入る)**\n```bash\nnpx skills add easyvibecoding/vibe-resume --skill ai-used-resume\n```\n`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 \u003cslug\u003e`:\n```bash\nnpx skills add easyvibecoding/vibe-resume -a claude-code -a cursor -a windsurf\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eTier-1 対応エージェント slug 一覧(\u003ccode\u003e-a\u003c/code\u003e 用)\u003c/summary\u003e\n\nSlug は 2026-04-22 の `skills@latest` に対して実機検証済み。`npx skills add … -a unknown` を実行すると最新リストが表示されます。\n\n| Agent | slug |  | Agent | slug |\n|---|---|---|---|---|\n| Amp | `amp` |  | Kilo Code | `kilo` |\n| Antigravity | `antigravity` |  | Kimi Code CLI | `kimi-cli` |\n| Augment | `augment` |  | Kiro CLI | `kiro-cli` |\n| Claude Code | `claude-code` |  | Mistral Vibe | `mistral-vibe` |\n| Cline | `cline` |  | opencode | `opencode` |\n| CodeBuddy | `codebuddy` |  | OpenHands | `openhands` |\n| Codex CLI | `codex` |  | Pi | `pi` |\n| Continue | `continue` |  | Qoder | `qoder` |\n| Cursor | `cursor` |  | Qwen Code | `qwen-code` |\n| Gemini CLI | `gemini-cli` |  | Replit | `replit` |\n| GitHub Copilot | `github-copilot` |  | Roo | `roo` |\n| Goose | `goose` |  | Trae | `trae` / `trae-cn` |\n| IBM Bob | `bob` |  | Warp | `warp` |\n| iFlow CLI | `iflow-cli` |  | Windsurf | `windsurf` |\n| Junie | `junie` |  | Zencoder | `zencoder` |\n\nUniversal 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) を参照。\n\u003c/details\u003e\n\n**Tier 2 —— OpenClaw(独自 ClawHub marketplace + 5,400+ skill registry)**\n```bash\nopenclaw skills install easyvibecoding/vibe-resume/ai-used-resume\n```\n\n**Tier 3 —— Hermes Agent(独自 `skills.sh` registry + ネイティブ 5-section body 形式)**\n```bash\nhermes skills tap add easyvibecoding/vibe-resume\nhermes skills install easyvibecoding/vibe-resume/ai-used-resume --force --yes\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e手動インストール / symlink フォールバック(Node 不要・パス自由・Windows)\u003c/summary\u003e\n\n`npx skills` を使わない、または symlink の配置を完全にコントロールしたい場合:\n\n```bash\n# Tier 1 ホスト —— リポの canonical SKILL.md から symlink\nmkdir -p ~/.claude/skills \u0026\u0026 ln -s \"$(pwd)/skills/ai-used-resume\" ~/.claude/skills/ai-used-resume\nmkdir -p ~/.gemini/skills \u0026\u0026 ln -s \"$(pwd)/skills/ai-used-resume\" ~/.gemini/skills/ai-used-resume\nmkdir -p ~/.warp/skills \u0026\u0026 ln -s \"$(pwd)/skills/ai-used-resume\" ~/.warp/skills/ai-used-resume\nmkdir -p ~/.opencode/skills \u0026\u0026 ln -s \"$(pwd)/skills/ai-used-resume\" ~/.opencode/skills/ai-used-resume\n\n# Cursor はプロジェクトルートの AGENTS.md を設定不要で読みます。横断利用は ~/.cursor/rules/ へコピー。\n```\n\nWindows(管理者 PowerShell):\n```powershell\nNew-Item -ItemType SymbolicLink -Path $HOME\\.claude\\skills\\ai-used-resume `\n  -Value (Resolve-Path .claude\\skills\\ai-used-resume)\n# .gemini / .warp / .opencode も同様に\n```\n\u003c/details\u003e\n\n### インストール後の呼び出し方\n\n**2026 年時点のすべてのホストが** `description` 一致による自動トリガーに対応しています。自然言語で十分です:**「AI 利用履歴から職務経歴書を生成して」**、**「日本語で履歴書をレンダリングして」**、**「この JD 向けにテーラリングして」**、**「履歴書を採点して」**、**「履歴書のスコア推移を見せて」**。多くのホストは明示呼び出しにも対応:\n\n| ホスト | 自動トリガー | 明示呼び出し |\n|---|---|---|\n| **Claude Code** | ✅ `description` 一致 | `/ai-used-resume` スラッシュコマンド |\n| **Gemini CLI** | ✅ `activate_skill` ツールがロード | インストール後 `/agents refresh` を一度 |\n| **GitHub Copilot CLI** | ✅ description 一致 | `gh skill install easyvibecoding/vibe-resume` |\n| **Cursor CLI** | ✅ プロジェクトルートの `AGENTS.md` が自動適用 | 内容を `.cursor/rules/` にコピー可 |\n| **Warp** | ✅ エージェントが利用可能な skill から選択 | `/ai-used-resume` または skill 検索メニュー |\n| **OpenClaw** | ✅ ロード時に description で判定 | `/ai-used-resume` または `openclaw skills install` |\n| **OpenCode** | ✅ 内蔵 `SkillTool` 経由 | `/ai-used-resume` スラッシュコマンド |\n| **Hermes Agent** | ✅ description 一致 | `hermes chat -s ai-used-resume -q \"履歴書を生成して\"` でプリロード |\n\nインストールが成功したかは、任意のホストに次を投げてください:**「実際に走らせず、AI 利用履歴から履歴書を生成する 6 つのコマンドを順に説明して」**。応答が `extract → aggregate → enrich → render → review → trend` を挙げ、`uv run vibe-resume` 構文を使えば正しくロードされています(Hermes では `hermes chat -Q -s ai-used-resume` で実機検証済み)。\n\n## クイックスタート\n\n```bash\n# 1. インストール\nuv venv \u0026\u0026 uv pip install -e \".[dev]\"\n\n# 2. プロフィール入力\ncp profile.example.yaml profile.yaml\n$EDITOR profile.yaml        # 最低でも name / target_role\n# config.yaml が無い場合は初回実行時に config.example.yaml から自動 bootstrap\n\n# 3. (任意)クラウド ZIP エクスポートを data/imports/\u003ctool\u003e/ に配置\n\n# 4. パイプライン実行\nuv run vibe-resume extract          # 4× 並列 extract + プログレスバー\nuv run vibe-resume aggregate        # プロジェクト分類 + スタック推定\nuv run vibe-resume enrich           # デフォルトは Claude Code セッション用にプロンプトを出力(XYZ bullet)\nuv run vibe-resume render -f all    # md + docx + pdf + git スナップショット\n```\n\n## コマンド\n\n| コマンド | 機能 |\n|---|---|\n| `vibe-resume extract [--only NAME]` | extractor 実行、`data/cache/*.json` にキャッシュ |\n| `vibe-resume aggregate` | プロジェクト分類、タスクカテゴリ、スタック推定 |\n| `vibe-resume enrich [-n N] [--locale L] [--tailor JD.txt]` | summary + achievements 生成(英語は XYZ、中日独仏韓は名詞句);`--tailor` で bullet を JD キーワード寄りに |\n| `vibe-resume render -f md\\|docx\\|pdf\\|all [--locale L]` | レンダリング + git スナップショット |\n| `vibe-resume render --all-locales [-f FMT]` | 登録済みロケール全てを一括レンダリング |\n| `vibe-resume render --tailor data/imports/jd.txt` | 特定 JD 用にテーラリング |\n| `vibe-resume review [-v N \\| --file PATH] [--locale L] [--jd JD.txt]` | 8 項目レビュアーチェックでスコアリング |\n| `vibe-resume trend [--locale L]` | ロケール別スコア履歴、平均、最新評価 |\n| `vibe-resume completion {bash\\|zsh\\|fish} [--install]` | シェル補完スクリプト出力/インストール |\n| `vibe-resume status` | ソース別のアクティビティ数 |\n| `vibe-resume list-versions` / `vibe-resume diff 1 2` | 履歴書バージョン履歴 |\n\n## 多言語ロケールレンダリング\n\n`vibe-resume` は各ロケール専用テンプレートを内蔵し、同じ `profile.yaml` とプロジェクトデータから、各地域のレビュアーが期待する版面を出力します。\n\n**サンプル出力は [`docs/samples/`](docs/samples/README.md) を参照**:`en_EU`(Europass)、`ja_JP`(職務経歴書)、`zh_TW`(繁中)の 3 ロケール対照例があります。\n\n```bash\nuv run vibe-resume render -f md  --locale en_US     # ATS 最適化 US デフォルト\nuv run vibe-resume render -f md  --locale ja_JP     # 職務経歴書(md/pdf)\nuv run vibe-resume render -f all --locale ja_JP     # 履歴書 DOCX グリッド + 職務経歴書\nuv run vibe-resume render -f md  --locale de_DE     # Persönliche Daten 付き Lebenslauf\n```\n\n| ロケール | スタイル | 写真 | 見出し例 | 特色 |\n|---|---|---|---|---|\n| `en_US`(デフォルト) | XYZ 動詞起点 | 禁止 | Summary / Skills / Experience / … | フラットな ATS 対応スキル行 |\n| `en_EU` | XYZ 動詞起点 | 任意 | Personal information / Work experience / Education and training / … | Europass スタイル —— ラベル付き個人情報、CEFR、GDPR 極小化(DOB はデフォルト非表示) |\n| `en_GB` | XYZ 動詞起点 | 禁止 | Personal statement / … | イギリス綴り、CEFR |\n| `zh_TW` | 名詞句 | 任意 | 自我介紹 / 技能專長 / 工作經歷 / … | 繁体、全角分隔、中英技術混在 |\n| `zh_HK` | 名詞句 | 任意 | Personal Profile 個人簡介 / Work Experience 工作經驗 / … | **バイリンガル見出し EN + 繁**、CEFR、HKID は出力しない |\n| `zh_CN` | 名詞句 | 任意 | 个人简介 / 专业技能 / … | 簡体、大企業向け(アメリカ寄り) |\n| `ja_JP` | 名詞句 | **必須** | 職務要約 / 職務経歴 / … | DOCX = JIS Z 8303 履歴書グリッド(`render/japan.py`)、md = 職務経歴書 |\n| `ko_KR` | 名詞句 | **必須** | 자기소개 / 보유 기술 / 경력 / … | 자기소개서は別ドキュメント扱い |\n| `de_DE` | 名詞句 | **必須** | Persönliche Daten / Berufserfahrung / … | `dob` / `nationality` が入力されたときのみ出力 |\n| `fr_FR` | 名詞句 | 任意 | Profil / Compétences / Expérience / … | ジュニア 1 ページ、シニア 2 ページ |\n\n### ロケール別テキスト上書き\n\n`UserProfile` は `extra=\"allow\"` なので、任意の `\u003cfield\u003e_\u003clocale\u003e` キーが英語原フィールドと並存でき、テンプレートは `localized` Jinja フィルタで正しいものを選びます:\n\n```yaml\ntitle: \"Senior Full-stack Engineer\"\ntitle_ja_JP: \"シニアフルスタックエンジニア\"\ntitle_zh_TW: \"資深全端工程師\"\n\nsummary: \"Full-stack engineer who…\"\nsummary_ja_JP: \"FastAPIとpgvectorを核にRAG検索基盤を設計し…\"\n\nexperience:\n  - title: \"Senior Full-stack Engineer\"\n    title_ja_JP: \"シニアフルスタックエンジニア\"\n    company: \"Lumen Labs\"\n    company_ja_JP: \"Lumen Labs(シード期 AI SaaS)\"\n    bullets:\n      - \"Reduced query latency from 1.8s to 620ms...\"\n    bullets_ja_JP:\n      - \"クエリ中央値レイテンシを 1.8 秒から 620 ミリ秒に短縮…\"\n```\n\n任意のロケール条件個人情報フィールド(`dob` / `gender` / `nationality` / `mil_service` / `photo_path` / `marital_status`)は `profile.example.yaml` で解説されています。(a) 現在のロケールの `personal_fields` に該当キーがあり、(b) 値が空でないときだけ出力されます。\n\n設計判断と各ロケールのフィールド対応表は `docs/resume_locales.md` に集約しています。\n\n### ロケール解決チェーン\n\nレンダラーは以下の順にロケールを決定し、最初に値がある箇所で停止します:\n\n1. CLI の `--locale`(最優先)\n2. `profile.yaml` の `profile.preferred_locale`\n3. `config.yaml` の `config.render.locale`\n4. `en_US` フォールバック\n\n```yaml\n# profile.yaml —— CLI が上書きしない限り ja_JP で出力\npreferred_locale: ja_JP\n\n# config.yaml —— チーム共通デフォルト\nrender:\n  locale: en_US\n  all_locales_formats: [\"md\", \"docx\"]   # --all-locales が各ロケール用に出す形式\n```\n\n`vibe-resume render --locale zh_TW` は常に `preferred_locale` を上書きし、省略時は `preferred_locale` が引き継ぎます。`enrich` が LLM を呼ぶ際も同じチェーンを通るため、どのノブを回しても言語ラベルが正しく注入されます。\n\n### 全ロケールの一括レンダリング\n\n市場ごとに一式を用意したい最終日:\n\n```bash\nuv run vibe-resume render --all-locales                 # config.render.all_locales_formats を使用\nuv run vibe-resume render --all-locales -f docx         # フォーマットを強制\nuv run vibe-resume render --all-locales --tailor jd.txt # 1 つの JD を全ロケールに適用\n```\n\n`--all-locales` は `LOCALES` レジストリ全体(現在 10 件)を走査します。各ロケールの出力形式は `config.render.all_locales_formats`(デフォルト `[\"md\"]`)で管理され、`[\"md\", \"docx\", \"pdf\"]` にすればフルセットを一気に生成できます。`--locale` と `--all-locales` は排他です。\n\n## レビュアーペルソナ(`--persona`)\n\nTech Lead 審査を通る履歴書は HR の初期フィルタで落ちることがあり、その逆もしかり。`--persona` はロケール(言語)と `--tailor`(特定 JD)に直交する **第 3 の軸 = 想定読者**を追加します。同じ活動データ・同じロケールでも、読者が変われば bullet の語気・強調・専門用語密度も変わります。\n\n| Key | 読者 | この読者が最初に見る点 |\n|---|---|---|\n| `tech_lead` | Staff+ エンジニア / テックリード | 具体的なシステム名、パフォーマンス数値、トレードオフ動詞(*migrated / replaced / introduced*) |\n| `hr` | HR / リクルーター | キャリア軌跡、職能横断コラボ、平易な言葉でのビジネスインパクト;頭字語の連打はスキップされる |\n| `executive` | VP / 採用決裁者 | ビジネス成果(売上、コスト、チーム規模、ユーザーリーチ);各ロールの 1 件目は「見出し」になる |\n| `startup_founder` | アーリーステージ創業者(A ラウンド前) | エンドツーエンドの所有権、出荷速度、コスト意識;大企業プロセス的な書き方は割り引かれる |\n| `academic` | 学術 / 研究職の選考委員 | 方法論の厳密さ、データセット、ベンチマーク、引用スタイルの枠組み |\n\n3 軸は自由に組み合わせ可能:\n\n```bash\n# 同一人物、3 種類の読者、日本市場\nuv run vibe-resume enrich --persona tech_lead --locale ja_JP -n 3\nuv run vibe-resume review  --persona tech_lead --locale ja_JP\n\nuv run vibe-resume enrich --persona hr        --locale ja_JP -n 3\nuv run vibe-resume review  --persona hr        --locale ja_JP\n\n# Executive レンズ + JD テーラリング + 英語\nuv run vibe-resume enrich --persona executive --tailor data/imports/jd.txt --locale en_US -n 3\nuv run vibe-resume review  --persona executive --jd data/imports/jd.txt\n```\n\nペルソナは捏造しません —— あくまで「語り直し」の指示です。元データが支持しない数値・人名・意思決定は出てきません。`review --persona` は採点表の末尾に、該当ペルソナのレビュー観点アドバイスを付加します。\n\n## 戦略的履歴書 —— ターゲット企業プロファイル(`--company`、`--level`)\n\n内蔵の 70 社プロファイル + 6 つのキャリアレベル原型により、enrich + review を特定の採用基準に合わせてチューニングできます —— locale / persona / JD tailor と直交する軸です。各プロファイルは `core/profiles/\u003ckey\u003e.yaml` にあり、ファクトチェック日時 (`last_verified_at`) を必ず保持するので、古くなったデータが黙って履歴書を汚染することはなく、適用時に明示的な警告が出ます。\n\n**バンドルされたカタログを閲覧:**\n\n```bash\n# tier 別にグループ化 —— frontier_ai / ai_unicorn / regional_ai /\n# tw_local / us_tier2 / eu / jp / kr\nuv run vibe-resume company list\nuv run vibe-resume company list --tier jp\n\n# プロファイル全文(must-haves / red flags / keyword anchors /\n# enrich_bias / review_tips / 最終検証日)\nuv run vibe-resume company show rakuten\n\n# 70 社の age テーブル —— 90 日しきい値超過をフラグ\n# (現在の AI 採用市場の四半期リフレッシュサイクルに合わせる)\nuv run vibe-resume company audit\nuv run vibe-resume company audit --only-stale --stale-days 30\n```\n\n**企業とレベルを enrich + review に適用:**\n\n```bash\n# 楽天の senior IC 向けに履歴書をチューニング\nuv run vibe-resume enrich  --company rakuten --level senior --locale ja_JP -n 3\nuv run vibe-resume render  -f all --locale ja_JP\nuv run vibe-resume review  --company rakuten --level senior --locale ja_JP\n\n# 同じ raw activity・異なる雇用主 —— review は 8 項目の基本ルーブリックに\n# 加えて企業固有の \"Company keyword coverage\" スコア (0/10) を付与\nuv run vibe-resume review  --company mercari --level senior --locale ja_JP\nuv run vibe-resume review  --company openai  --level senior --locale en_US\n```\n\n**`--company` 適用ごとに検証日を自動チェックします。** プロファイルが 90 日より古ければ、CLI は赤字警告と更新パスを表示 —— 古い調査結果が黙って履歴書に染み込むことはありません。\n\n**古いプロファイルを更新:**\n\n```bash\n# ファクトチェックを claude CLI エージェントに委譲(直近 ≤90 日 + 過去 2-3 年の\n# ダブルトラック交差検証)。レポートは data/verification_reports/\u003ckey\u003e_\u003cYYYY-MM-DD\u003e.md に保存。\nuv run vibe-resume company verify rakuten\n\n# エージェントが VERDICT: clean を返せば検証日を自動更新\nuv run vibe-resume company verify rakuten --apply\n\n# ブラウザで手動確認済みなら、日付をそのままバンプ\nuv run vibe-resume company mark-verified rakuten\nuv run vibe-resume company mark-verified rakuten --date 2027-01-15 --yes\n```\n\n`mark-verified` は YAML の日付行だけを書き換え、コメント・折り返し文字列・他のすべての手編集を保持します。新しいプロファイルを追加するのも drop-in:`core/profiles/\u003ckey\u003e.yaml` を書いて `last_verified_at: \"YYYY-MM-DD\"` を指定するだけで、loader が登録し、wheel にも同梱され、`--company` で即消費可能になります。\n\nキャリアレベル(`--level`):`new_grad` · `junior` · `mid` · `senior` · `staff_plus` · `research_scientist`。各原型はそのレベルのレビュアーが期待する lead-bullet のシグナルを内蔵しており、mid 仕事を staff では守れない scope claim に昇格させてしまうことを防ぎます。\n\n## レビュアー視点の監査(`vibe-resume review`)\n\n![8 項目の自動レビュアースコアカードとレンダリング済み履歴書、トレンドスパークライン](docs/assets/reviewer_audit.png)\n\nレンダリング後、実際のレビュアーと同じ 8 項目チェックリストでスコアリングします:\n\n```bash\nuv run vibe-resume review                    # 最新版\nuv run vibe-resume review -v 9               # 特定バージョン\nuv run vibe-resume review -v 12 --jd jd.txt  # JD キーワード一致度を追加\n```\n\n各草稿は以下の 8 項目で評価されます:\n\n1. **Top fold** —— 氏名、志望職種、1 つ以上の具体的指標が最初の 12 行以内にあるか\n2. **Numbers per bullet** —— 職務経歴 bullet の 60% 以上に定量指標があるか\n3. **Keyword echo (JD)** —— JD の主要な大文字語が草稿に現れているか(`--jd` が無ければスキップ)\n4. **Action-verb first** —— XYZ ロケールで bullet が過去形動詞で始まるか\n5. **Density (noun-phrase)** —— 名詞句ロケールで bullet が自己完結し、宙に浮いた代名詞が無いか\n6. **Red flags** —— ロケール別に写真 / DOB / \"References available upon request\" / 連続見出しなどを検査\n7. **Contact line width** —— ヘッダー行が印刷幅で折り返して崩れないか(CJK 文字は 2 倍幅)\n8. **Page count** —— 行数と折り返しから推定するページ数 vs ロケール推奨(US/UK ≤2、DE/JP/KR ≤3)\n\n`data/reviews/\u003cdraft\u003e_review.md` と `.json` を出力し、版をまたいで diff 可能です。実在のレビュアーに提出する前は B/(80%) 以上が目安。\n\n### スコアトレンド(`vibe-resume trend`)\n\n`review` を走らせるたびに `data/reviews/` に JSON が残り、`trend` はそれをロケール別にまとめて、どの市場バージョンが進歩/後退しているかを一目で示します:\n\n```bash\nuv run vibe-resume trend               # 全ロケール\nuv run vibe-resume trend --locale ja_JP\n```\n\n```\n Locale  Runs  First    Latest        Mean    Grade  Trend\n en_US   6     58/80    v16: 78/80    91.0%   A      ▂▅▆▇██\n ja_JP   3     50/80    v14: 72/80    82.5%   A      ▁▅█\n zh_TW   4     42/80    v15: 74/80    85.0%   A      ▁▃▆█\n```\n\nスパークラインは U+2581..U+2588 の Unicode ブロックで描画され、どの等幅端末でも崩れません。列は: 実行回数、初回スコア、最新スコア(バージョン番号付)、実行全体の平均 %、最新の評価、実行ごとの推移。\n\n## Claude Code 30 日クリーンアップ —— 重要\n\nClaude Code はデフォルトで 30 日以上経過したセッション JSONL を削除します。長期保存したい場合は:\n\n```bash\n# 1. 保持日数を伸ばす\npython3 -c \"import json,pathlib; p=pathlib.Path.home()/'.claude/settings.json'; \\\n  d=json.loads(p.read_text()); d['cleanupPeriodDays']=365; \\\n  p.write_text(json.dumps(d,indent=2,ensure_ascii=False))\"\n\n# 2. 定期 rsync バックアップ(スクリプト同梱)\nchmod +x scripts/backup_claude_projects.sh\n./scripts/backup_claude_projects.sh\n# launchd / cron に週次で登録\n```\n\n### Windows バックアップ(Task Scheduler)\n\n`scripts/backup_claude_projects.ps1` は PowerShell 7 版の同等スクリプトで、`robocopy /MIR /XO` により `%USERPROFILE%\\.claude\\projects` を `%USERPROFILE%\\ClaudeCodeArchive\\current` にミラーし、日付つきスナップショットも保存します:\n\n```powershell\n# 単発実行\npwsh -NoProfile -File scripts\\backup_claude_projects.ps1\n\n# ドライラン(macOS/Linux でも動くので冒煙テストに便利)\npwsh -NoProfile -File scripts\\backup_claude_projects.ps1 -WhatIf\n\n# 週次タスクとして登録(毎週日曜 03:00)\nschtasks /Create /TN \"vibe-resume backup\" /XML scripts\\vibe-resume-backup.xml\n```\n\n`scripts/vibe-resume-backup.xml` は Task Scheduler にそのまま取り込めるテンプレートです。取り込み前に `\u003cWorkingDirectory\u003e` を実際の clone 先に書き換えてください。CI は `windows-latest` で `PSScriptAnalyzer` による厳格検査と `-WhatIf` ブランチの実行を行っています。\n\n## プロジェクト構成\n\n```\nvibe-resume/\n├── profile.example.yaml   # コミット済みテンプレート —— profile.yaml にコピー\n├── config.example.yaml    # コミット済みテンプレート —— 初回実行時に config.yaml へ自動コピー\n├── profile.yaml           # 個人情報(gitignored)\n├── config.yaml            # 個人の extractor パスとプライバシー規則(gitignored)\n├── cli.py                 # エントリーポイント(`vibe-resume` としてもインストール)\n├── core/\n│   ├── schema.py          # Pydantic v2: Activity、ProjectGroup、UserProfile\n│   ├── classifier.py      # 18 タスクカテゴリ(バイリンガル regex)\n│   ├── tech_canonical.py  # ハードスキル vs ドメインタグ\n│   ├── stats.py           # ローリング統計(30d/7d)\n│   ├── privacy.py         # 遮蔽 + ブロックリスト + 技術抽象\n│   ├── aggregator.py      # 分類 + headline + 重要度ランキング\n│   ├── enricher.py        # mode dispatcher: prompt(デフォルト)/ subprocess / rule-based\n│   ├── review.py          # 8 項目スコアカード + トレンドスパークライン\n│   ├── versioning.py      # 草稿の git スナップショット\n│   └── runner.py          # ThreadPoolExecutor パイプライン + rich.progress\n├── extractors/\n│   ├── local/             # 11 個のローカル extractor\n│   ├── cloud_export/      # 7 個の ZIP インポーター\n│   └── api/               # 6 個の AIGC extractor\n├── render/\n│   ├── renderer.py        # md / docx / pdf\n│   ├── japan.py           # JIS Z 8303 履歴書グリッド(ja_JP DOCX 専用)\n│   ├── i18n.py            # LOCALES レジストリ + ロケール別ラベル辞書\n│   └── templates/resume.\u003clocale\u003e.md.j2\n├── scripts/\n│   ├── backup_claude_projects.sh       # macOS / Linux rsync\n│   ├── backup_claude_projects.ps1      # Windows PowerShell 7(robocopy)\n│   ├── vibe-resume-backup.xml          # Task Scheduler 取り込みテンプレート\n│   └── com.vibe-resume.backup.plist    # macOS launchd agent\n├── data/\n│   ├── imports/           # ダウンロードした ZIP を置く(gitignored、sample_jd.txt のみ保持)\n│   ├── cache/             # ソース別 extractor JSON(gitignored)\n│   ├── resume_history/    # レンダリング出力 + 内部 git(gitignored)\n│   └── reviews/           # レビュー結果と履歴(gitignored)\n├── docs/samples/          # ロケール別サンプル出力\n├── skills/ai-used-resume/                   # 全 8 ホスト用 canonical skill(symlink 経由)\n│   ├── SKILL.md                             # 5-section body、agentskills.io 準拠\n│   └── references/                          # strategic-resume · troubleshooting · extending\n├── .claude/skills/ai-used-resume/           → symlink → skills/ai-used-resume/\n├── .gemini/skills/ai-used-resume/           → symlink → skills/ai-used-resume/\n├── .agents/skills/ai-used-resume/           → symlink → skills/ai-used-resume/(Codex + Warp)\n├── .opencode/skills/ai-used-resume/         → symlink → skills/ai-used-resume/\n├── .claude-plugin/plugin.json               # Claude Code plugin マニフェスト(marketplace 配布)\n└── .codex-plugin/plugin.json                # OpenAI Codex plugin マニフェスト(marketplace 配布)\n```\n\n## 新しい extractor を追加する\n\n```python\n# extractors/local/mytool.py\nfrom core.schema import Activity, ActivityType, Source\nNAME = \"mytool\"\ndef extract(cfg: dict) -\u003e list[Activity]:\n    return []  # Activity オブジェクトを返す\n```\n\n`core/runner.py` の `LOCAL_EXTRACTORS` に登録し、`config.yaml` で有効化するだけです。\n\n## 既知の制約\n\n- 全 `$HOME` スキャン(`git_repos`、`aider`)は 4× 並列 extractor でも初回 1–3 分かかります —— `scan.mode: whitelist` に切り替えると範囲を絞れます。`_find_repos` には 120 秒の壁時計デッドラインがあり、FUSE マウントや壊れた symlink でも全体が止まりません。\n- Grok / Perplexity / Mistral のエクスポート schema は**緩く解析**しています(公式スキーマが未公開のため)。フィールドが合わない場合は `data/imports/` に実サンプルを置いてください。\n- Claude Desktop のチャット本文は Local Storage に暗号化されています —— MCP 設定 + extensions のみ取得可能です。\n- PDF レンダリングで CJK を出すには `pandoc` + XeLaTeX が必要です。無い場合は素の pandoc にフォールバックします。\n\n## ライセンス\n\nMIT —— [LICENSE](LICENSE) を参照。\n\n## 関連プロジェクト\n\n2026 年のエコシステムを徹底調査した結果、**直接的な競合は存在しません** ——\n(1) マルチソース AI ツール抽出、(2) 10 ロケール対応レンダリング、(3) レビュー監査、\nこの 3 点すべてを同時に満たすツールはありません。最も近い隣接プロジェクトもいずれか 1 点のみのカバー:\n\n- [whoisjayd/gitresume](https://github.com/whoisjayd/gitresume) —— 最も近い隣接ツール;ローカル / リモートの GitHub リポから抽出 → 履歴書 bullet を生成。シングルソース(git のみ)・シングル言語。`vibe-resume` は 18 種の AI ツール extractor、10 ロケール、レビュー監査を追加。\n- [AmirhosseinOlyaei/AI-Resume-Builder](https://github.com/AmirhosseinOlyaei/AI-Resume-Builder) —— PR 説明と commit メッセージから bullet を生成。同じ thesis ですがソースが狭い(Claude Code / Cursor / ChatGPT は非対応)。\n- [AndreaCadonna/resumake-mcp](https://github.com/AndreaCadonna/resumake-mcp) —— MCP 経由で LaTeX 履歴書を生成。レンダリング専門で抽出層なし。本ツールの pipeline のレンダリング段に対する補完関係。\n- [javiera-vasquez/claude-code-job-tailor](https://github.com/javiera-vasquez/claude-code-job-tailor) —— Claude Code 内で YAML 履歴書を JD-tailored PDF に整形。JD マッチング段での補完関係;本ツールの `--tailor` と同じ発想ですが、手で書いた YAML ではなく抽出済みの活動データから開始します。\n\n`vibe-resume` は本リスト中で唯一、**複数の AI ツールからの抽出 + 10 種の文化固有ロケールでのレンダリング + トレンド追跡付きレビュー監査**をすべて同時に実現するツールです。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasyvibecoding%2Fvibe-resume","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasyvibecoding%2Fvibe-resume","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasyvibecoding%2Fvibe-resume/lists"}