init
This commit is contained in:
commit
d295c7f139
1527 files changed
+270726
No files matched your search
@@ -0,0 +1,114 @@
|
||||
# career-ops -- 日本語モード (`modes/ja/`)
|
||||
|
||||
このフォルダには、日本市場または日本語で運営される企業での求職活動を行う候補者向けに、career-ops の主要モードを日本語に翻訳したファイルが含まれています。
|
||||
|
||||
## いつこれらのモードを使うか?
|
||||
|
||||
以下のいずれかに該当する場合は `modes/ja/` を使用してください:
|
||||
|
||||
- 主に**日本語の求人**(Wantedly、Green、doda、リクナビNEXT、ビズリーチ、LinkedIn JP、Indeed JP、Findy など)に応募している
|
||||
- **履歴書・職務経歴書の言語**が日本語、または求人に応じて日本語と英語を使い分けている
|
||||
- 機械翻訳ではない、**自然な日本語のテック系表現**で書かれた回答やカバーレターが必要
|
||||
- **日本市場特有の事項**に対応する必要がある:正社員 vs 業務委託、賞与(ボーナス)、退職金、有給休暇、試用期間、36協定、通勤手当、住宅手当、みなし残業、年俸制など
|
||||
|
||||
ほとんどの求人が英語の場合は、デフォルトの `modes/` を使ってください。英語モードでも Claude が日本語の求人を検出すれば自動的に対応しますが、日本市場の細かい慣習までは同じレベルで把握していません。
|
||||
|
||||
## どうやって有効化する?
|
||||
|
||||
career-ops にはコード上の「言語スイッチ」フラグはありません。代わりに 2 つの方法があります:
|
||||
|
||||
### 方法 1 -- セッション単位で指示
|
||||
|
||||
セッションの冒頭で Claude にこう伝えます:
|
||||
|
||||
> 「`modes/ja/` の日本語モードを使って。」
|
||||
|
||||
または
|
||||
|
||||
> 「評価と応募を日本語で。`modes/ja/_shared.md` と `modes/ja/kyujin.md` を読んで。」
|
||||
|
||||
Claude は `modes/` の代わりにこのフォルダのファイルを読み込みます。
|
||||
|
||||
### 方法 2 -- プロファイルで恒久設定
|
||||
|
||||
`config/profile.yml` に言語設定を追加します:
|
||||
|
||||
```yaml
|
||||
language:
|
||||
primary: ja
|
||||
modes_dir: modes/ja
|
||||
```
|
||||
|
||||
最初のセッションで Claude にこのフィールドを尊重するよう伝えてください(「`profile.yml` を見て、`language.modes_dir` を設定してある」)。以降、Claude は自動的に日本語モードを使用します。
|
||||
|
||||
> 注:`language.modes_dir` は慣習であり厳密なスキーマではありません。メンテナが別の構造にしたい場合、このフィールド名はいつでも変更される可能性があります。
|
||||
|
||||
## 何が翻訳されているか?
|
||||
|
||||
この最初のイテレーションでは、インパクトの大きい 4 つのモードをカバーしています:
|
||||
|
||||
| ファイル | 翻訳元 | 用途 |
|
||||
|---------|-------|------|
|
||||
| `_shared.md` | `modes/_shared.md` (EN) | 共通コンテキスト、アーキタイプ、グローバルルール、日本市場の特記事項 |
|
||||
| `kyujin.md` | `modes/oferta.md` (EN) | 求人の完全評価(A-F + G legitimacy ブロック) |
|
||||
| `oubo.md` | `modes/apply.md` (EN) | 応募フォーム記入のライブアシスタント |
|
||||
| `pipeline.md` | `modes/pipeline.md` (EN) | URL のインボックス / 求人の Second Brain |
|
||||
|
||||
残りのモード(`scan`、`batch`、`pdf`、`tracker`、`auto-pipeline`、`deep`、`contacto`、`ofertas`、`project`、`training`)は意図的にこの PR に含めていません。これらは主にツール配管、パス、設定コマンドで構成されており、言語非依存であるべきだからです。
|
||||
|
||||
コミュニティが日本語モードを採用すれば、今後の PR でさらにモードを翻訳します。
|
||||
|
||||
## 英語のまま残しているもの
|
||||
|
||||
これらは意図的に翻訳していません。標準的なテック用語だからです:
|
||||
|
||||
- `cv.md`、`pipeline`、`tracker`、`report`、`score`、`archetype`、`proof point`
|
||||
- ツール名(`Playwright`、`WebSearch`、`WebFetch`、`Read`、`Write`、`Edit`、`Bash`)
|
||||
- tracker のステータス値(`Evaluated`、`Applied`、`Interview`、`Offer`、`Rejected`)
|
||||
- コードスニペット、ファイルパス、コマンド
|
||||
|
||||
モードは、東京・大阪・福岡の実際のエンジニアリングチームで使われているような自然な日本語テック表現を使います:地の文は日本語、定着しているテック用語は英語のままです。「pipeline」を「配管」と訳したり、「cv.md」を「履歴書.md」にしたりはしません。
|
||||
|
||||
## 参考用語集
|
||||
|
||||
モードを拡張・改変する際は、トーンの一貫性を保つためこの用語を参考にしてください:
|
||||
|
||||
| 英語 | 日本語(このコードベース) |
|
||||
|-----|--------------------------|
|
||||
| Job posting | 求人 / 求人票 / 職務記述書 |
|
||||
| Application | 応募 |
|
||||
| Cover letter | カバーレター / 志望動機書 |
|
||||
| Resume / CV | 履歴書 / 職務経歴書 |
|
||||
| Salary | 給与 / 年収 |
|
||||
| Compensation | 報酬 / 待遇 |
|
||||
| Skills | スキル |
|
||||
| Interview | 面接 |
|
||||
| Hiring manager | 採用責任者 / Hiring manager |
|
||||
| Recruiter | 採用担当 / リクルーター |
|
||||
| AI | AI(人工知能) |
|
||||
| Requirements | 必須要件 / 歓迎要件 |
|
||||
| Career history | 職務経歴 |
|
||||
| Notice period | 退職予告期間 |
|
||||
| Probation | 試用期間 |
|
||||
| Vacation | 有給休暇 |
|
||||
| Bonus | 賞与 / ボーナス |
|
||||
| Full-time employment | 正社員 |
|
||||
| Contractor | 業務委託 / フリーランス |
|
||||
| Annual salary | 年俸制 |
|
||||
| Health insurance | 健康保険 |
|
||||
| Overtime allowance | 残業代 / 時間外手当 |
|
||||
| Fixed overtime | みなし残業 |
|
||||
| Commuting allowance | 通勤手当 |
|
||||
| Housing allowance | 住宅手当 |
|
||||
| Stock options | ストックオプション(そのまま使用) |
|
||||
| Severance | 退職金 |
|
||||
|
||||
## 貢献方法
|
||||
|
||||
翻訳を改善したり、追加のモードを翻訳したりしたい場合:
|
||||
|
||||
1. `CONTRIBUTING.md` に沿って issue を立てて提案する
|
||||
2. トーンの一貫性のため上記の用語集に従う
|
||||
3. 自然で慣用的な翻訳を行う — 一語一語の直訳はしない
|
||||
4. 構造要素(A-F + G ブロック、テーブル、コードブロック、ツール指示)は原文と完全に一致させる
|
||||
5. PR を出す前に実際の日本の求人(Wantedly や LinkedIn JP など)でテストする
|
||||
@@ -0,0 +1,284 @@
|
||||
# 共通コンテキスト -- career-ops(日本語)
|
||||
|
||||
<!-- ============================================================
|
||||
THIS FILE IS AUTO-UPDATABLE. Don't put personal data here.
|
||||
|
||||
Your customizations go in modes/_profile.md (never auto-updated).
|
||||
This file contains system rules, scoring logic, and tool config
|
||||
that improve with each career-ops release.
|
||||
============================================================ -->
|
||||
|
||||
## 真実のソース(EXCLUSIVE)
|
||||
|
||||
以下のファイルだけが、ユーザー向けコンテンツ(CV、カバーレター、フォーム回答、リクルーター向けメッセージ)の情報源です。Auto-memory、親ディレクトリの repo、セッションをまたいだ推測は対象外です。完全なルールは `AGENTS.md` / `CLAUDE.md` の "Source-of-Truth Boundary" を参照してください。
|
||||
|
||||
| ファイル | パス | いつ |
|
||||
|---------|------|------|
|
||||
| cv.md | `cv.md`(プロジェクトルート) | 常に |
|
||||
| article-digest.md | `article-digest.md`(存在する場合) | 常に(詳細な proof points) |
|
||||
| profile.yml | `config/profile.yml` | 常に(候補者の identity と target) |
|
||||
| _profile.md | `modes/_profile.md` | 常に(ユーザー固有のアーキタイプ、ナラティブ、交渉) |
|
||||
| writing-samples/ | `writing-samples/` | 候補者が外部に出す文章を生成する場合。まず `_profile.md` のキャッシュ済み `## Writing Style` を確認し、存在しない場合だけファイルを読む |
|
||||
| voice-dna.md | `voice-dna.md`(プロジェクトルート、存在する場合) | 候補者が外部に出す文章を生成する場合。AI っぽさを避ける guardrail + voice。下の Voice DNA precedence を参照 |
|
||||
| interview-prep | `interview-prep/story-bank.md`, `interview-prep/{company}-{role}.md` | ATS フォーム回答 / 面接コンテンツを生成する場合。ユーザー自身の STAR stories と prep notes(`cv.md` と同じ信頼レベル)。`apply` / `match-star` と interview modes が使用 |
|
||||
|
||||
**ルール:proof point のメトリクスを絶対にハードコードしない。** 評価時に `cv.md` と `article-digest.md` から読み取ること。
|
||||
**ルール:記事・プロジェクトのメトリクスは、`article-digest.md` が `cv.md` より優先される。**
|
||||
**ルール:このファイルの後に `_profile.md` を読む。`_profile.md` のユーザーカスタマイズはここのデフォルト値を上書きする。**
|
||||
**ルール:`cv.md` または `article-digest.md` で明示されていない限り、ユーザーが project、repo、library、tool、framework、open-source artifact を authored したと主張してはならない。** 「使ったツール」を「作ったもの」と混同するのが最も多い捏造パターンであり、禁止。
|
||||
**ルール:Keywords get reformulated, never fabricated.** 並べ替える、言い換える、強調するのはよい。ただし発明しない。根拠が in-scope file にない claim はユーザーに確認する。答えがない場合は省く。沈黙は捏造よりよい。
|
||||
|
||||
---
|
||||
|
||||
## スコアリングシステム
|
||||
|
||||
評価は 6 ブロック(A-F)と 1-5 の global score で行う:
|
||||
|
||||
| Dimension | 測定する内容 |
|
||||
|-----------|-------------|
|
||||
| Match con CV | スキル、経験、proof point の整合 |
|
||||
| North Star alignment | 求人がユーザーの target archetypes(`_profile.md` より)にどれだけ合うか |
|
||||
| Comp | 給与 vs 市場(5=上位四分位、1=大幅に下回る) |
|
||||
| Cultural signals | 企業文化、成長性、安定性、remote policy |
|
||||
| Red flags | ブロッカー、警告(negative adjustments) |
|
||||
| **Global** | 上記の weighted average |
|
||||
|
||||
**Score interpretation:**
|
||||
- 4.5+ → 強いマッチ、今すぐ応募を推奨
|
||||
- 4.0-4.4 → 良好なマッチ、応募する価値あり
|
||||
- 3.5-3.9 → まずまずだが理想ではない、特別な理由がある場合のみ応募
|
||||
- Below 3.5 → 応募非推奨(AGENTS.md の Ethical Use を参照)
|
||||
|
||||
## Posting Legitimacy (Block G)
|
||||
|
||||
Block G は、求人が real, active opening である可能性を評価する。1-5 の global score には影響しない。独立した qualitative assessment として扱う。
|
||||
|
||||
**Three tiers:**
|
||||
- **High Confidence** -- Real, active opening(多くの signal が positive)
|
||||
- **Proceed with Caution** -- Mixed signals, worth noting(一部懸念あり)
|
||||
- **Suspicious** -- 複数の ghost indicator があり、ユーザーが先に確認すべき
|
||||
|
||||
**Key signals(reliability で重み付け):**
|
||||
|
||||
| Signal | Source | Reliability | Notes |
|
||||
|--------|--------|-------------|-------|
|
||||
| Posting age | Page snapshot | High | Under 30d=good, 30-60d=mixed, 60d+=concerning(role type に応じて調整) |
|
||||
| Apply button active | Page snapshot | High | 直接観測できる事実 |
|
||||
| Tech specificity in JD | JD text | Medium | Generic JDs は ghost postings と相関するが、単に書き方が粗い場合もある |
|
||||
| Requirements realism | JD text | Medium | 矛盾は強い signal、曖昧さは弱い signal |
|
||||
| Recent layoff news | WebSearch | Medium | department、timing、company size を考慮する |
|
||||
| Reposting pattern | scan-history.tsv | Medium | 同じ role が 90 日以内に 2 回以上 repost されていれば concerning |
|
||||
| Salary transparency | JD text | Low | jurisdiction-dependent。非公開には legitimate reasons が多い |
|
||||
| Role-company fit | Qualitative | Low | 主観的。supporting signal としてのみ使う |
|
||||
|
||||
**Ethical framing(MANDATORY):**
|
||||
- ユーザーが real opportunities に時間を優先配分するための補助
|
||||
- 企業を dishonest と非難する形で提示しない
|
||||
- Signals を提示し、判断はユーザーに委ねる
|
||||
- Concerning signals には必ず legitimate explanations も添える
|
||||
|
||||
## Archetype Detection
|
||||
|
||||
すべての求人を以下の type のいずれか(または 2 つの hybrid)に分類する:
|
||||
|
||||
| Archetype | Key signals in JD |
|
||||
|-----------|-------------------|
|
||||
| AI Platform / LLMOps | "observability", "evals", "pipelines", "monitoring", "reliability" |
|
||||
| Agentic / Automation | "agent", "HITL", "orchestration", "workflow", "multi-agent" |
|
||||
| Technical AI PM | "PRD", "roadmap", "discovery", "stakeholder", "product manager" |
|
||||
| AI Solutions Architect | "architecture", "enterprise", "integration", "design", "systems" |
|
||||
| AI Forward Deployed | "client-facing", "deploy", "prototype", "fast delivery", "field" |
|
||||
| AI Transformation | "change management", "adoption", "enablement", "transformation" |
|
||||
|
||||
Archetype を検出した後、`modes/_profile.md` を読み、該当 archetype に対するユーザー固有の framing と proof points を使う。
|
||||
|
||||
## 日本市場 -- 特記事項(重要)
|
||||
|
||||
日本の求人や交渉には、英語圏の求人だけでは出てこない用語や慣習がある。評価では以下を正しく扱う:
|
||||
|
||||
| 用語 | 意味 | 評価への影響 |
|
||||
|-----|------|-------------|
|
||||
| **正社員** | 無期雇用の正規雇用。社会保険、有給、賞与、退職金の対象 | 総額比較では年間報酬 = 月給 x 12 + 賞与(通常 2-6 ヶ月分)で計算 |
|
||||
| **業務委託(フリーランス)** | 請負契約、個人事業主として働く | 月額が高く見えても社会保険・賞与・退職金なし。公正な比較のため正社員換算を計算 |
|
||||
| **賞与 / ボーナス** | 年 2 回(夏・冬)支給される追加給与 | 正社員では給与の大きな割合。年収 = 月給 x(12 + 賞与月数)。比較で忘れない |
|
||||
| **年俸制** | 年間総額を 12 または 14-16 で割る方式 | 賞与が年俸に含まれる場合があるため、内訳を確認 |
|
||||
| **みなし残業 / 固定残業代** | 一定時間分の残業代があらかじめ月給に含まれる方式 | 何時間分か、超過分が別途支払われるかを確認。Red flag になり得る |
|
||||
| **36 協定** | 時間外労働に関する労使協定 | 残業時間の上限を規定。働き方の健全性を測る signal |
|
||||
| **試用期間** | 通常 3-6 ヶ月 | 日本では標準的。単体では red flag ではない |
|
||||
| **退職金** | 退職時に支給される一時金 | 大企業・伝統企業で一般的。スタートアップでは少ない。長期前提の待遇 |
|
||||
| **通勤手当** | 通勤交通費の実費支給 | 日本では標準的。上限(月 5 万円など)を確認 |
|
||||
| **住宅手当 / 家賃補助** | 住居関連の手当 | 大企業や一部スタートアップで提供。月 2-10 万円程度 |
|
||||
| **健康保険 / 厚生年金** | 社会保険(正社員は強制加入、会社が半分負担) | 正社員の隠れた報酬。業務委託との比較で重要 |
|
||||
| **有給休暇** | 法定最低 10-20 日/年 | 取得率を確認。低すぎると red flag |
|
||||
| **退職予告** | 正社員は通常 1-2 ヶ月前に通知 | 開始日を現職の退職予告期間込みで考える |
|
||||
| **ストックオプション** | スタートアップの equity | vesting、cliff、税制(税制適格 vs 非適格)を評価 |
|
||||
|
||||
## グローバルルール
|
||||
|
||||
### 絶対にしない
|
||||
|
||||
1. 経験やメトリクスを捏造する
|
||||
2. `cv.md` やポートフォリオファイルを変更する
|
||||
3. 候補者の代わりに応募を送信する
|
||||
4. 生成メッセージで電話番号を共有する
|
||||
5. 市場以下の報酬を推奨する
|
||||
6. 求人を読まずに PDF を生成する
|
||||
7. corporate-speak を使う
|
||||
8. tracker を無視する(評価したすべての求人を記録する)
|
||||
|
||||
### 常にする
|
||||
|
||||
0. **Cover letter:** フォームが許可する場合は必ず含める。CV と同じ visual design。JD quotes を proof points に mapping。最大 1 ページ。
|
||||
1. 評価前に `cv.md`、`_profile.md`、`article-digest.md`(存在する場合)を読む
|
||||
1b. **各セッションの最初の評価で:** `node cv-sync-check.mjs` を実行。warnings があればユーザーに知らせる
|
||||
2. 求人の archetype を検出し、`_profile.md` に従って framing を適応させる
|
||||
3. マッチング時、CV の exact lines を引用する
|
||||
4. comp と company data のために WebSearch を使う
|
||||
5. 評価後に tracker に登録する
|
||||
6. 求人の言語で生成する(EN default)
|
||||
7. 直接的で actionable に書く。fluff を避ける
|
||||
8. 日本語で生成する場合は、自然な tech Japanese を使う。短い文、action verbs、不要な受動態を避ける
|
||||
8b. PDF Professional Summary に case study URLs を含める(recruiter はそこだけ読む可能性がある)
|
||||
9. **Tracker additions as TSV** -- `applications.md` を新規追加のために直接編集しない。`batch/tracker-additions/` に TSV を書く
|
||||
10. **すべての report header に `**URL:**` を含める**
|
||||
|
||||
### Tools
|
||||
|
||||
| Tool | Use |
|
||||
|------|-----|
|
||||
| WebSearch | Comp research, trends, company culture, LinkedIn contacts, fallback for JDs |
|
||||
| WebFetch | Static pages から JD を抽出する fallback |
|
||||
| Playwright | 求人検証(browser_navigate + browser_snapshot)。**NEVER 2+ agents with Playwright in parallel.** |
|
||||
| Read | cv.md, _profile.md, article-digest.md, cv-template.html |
|
||||
| Write | Temporary HTML for PDF, applications.md, reports .md |
|
||||
| Edit | tracker 更新 |
|
||||
| Canva MCP | Optional visual CV generation. Base design を duplicate し、text を edit して PDF export。`profile.yml` の `cv.canva_resume_design_id` が必要 |
|
||||
| Bash | `node generate-pdf.mjs` |
|
||||
|
||||
### Time-to-offer priority
|
||||
- Working demo + metrics > perfection
|
||||
- Apply sooner > learn more
|
||||
- 80/20 approach, timebox everything
|
||||
|
||||
---
|
||||
|
||||
## Voice DNA (writing guardrail)
|
||||
|
||||
`voice-dna.md` が project root に存在する場合、生成文章の guardrail として使う。これは user-layer で optional。存在を仮定しない。なければ静かに skip する。これはユーザー個人の style の下に置かれる。AI っぽさを抑え、足りない部分を補うが、`_profile.md` にあるユーザー自身の voice rules を常に優先する(Precedence を参照)。
|
||||
|
||||
**Two-tier scope(CV の正確性を守るための分離):**
|
||||
|
||||
- **Tier 1 -- anti-AI-slop guardrail**(voice-dna §3 Banned List、§4 Patterns to Avoid: banned words、dead phrases、no em-dashes、no negative parallelisms、formatting rules)。HARD RULES。CV bullets と Professional Summary を含む **all generated text** に適用する。
|
||||
- **Tier 2 -- conversational voice**(voice-dna §1-2: contractions、And/But sentence openers、"I think" / "maybe" のような hedging、parenthetical asides、direct "I"/"you")。cover letters、LinkedIn outreach、follow-up emails など conversational candidate-facing prose のみに適用する。**CV/ATS text**(PDF bullets、Professional Summary)には Tier 2 を適用しない。そこでは formal, keyword-dense register を維持する。
|
||||
|
||||
**Accuracy always wins over style.** `cv.md` と `article-digest.md` の facts は voice-dna によって上書きされない。実在する metric を rhythm のために落とす、弱める、hedge することはしない。人間らしく見せるために detail を発明しない。voice-dna は wording を shaping するだけで content を変えない。
|
||||
|
||||
**Precedence with personal style(`_profile.md` always wins):** `_profile.md` の `## Writing Style` が voice と tone の authority。`voice-dna.md` と `_profile.md` が衝突する場合は `_profile.md` が勝つ。例:`_profile.md` が em-dashes を使う style なら、voice-dna が避けるとしていても維持する。voice-dna の anti-AI-slop rules は `_profile.md` が silent な箇所にだけ適用する。`voice-dna.md` 自体も user file なので、strict guardrail を優先したいユーザーはその preference を `_profile.md` に書かなければよい。
|
||||
|
||||
---
|
||||
|
||||
## Writing Style Calibration
|
||||
|
||||
**まず `_profile.md` を確認する。** そこに `## Writing Style` section がある場合は直接使い、`writing-samples/` を再スキャンしない。再スキャンは new samples が追加された場合、またはユーザーが明示的に recalibrate を求めた場合のみ。
|
||||
|
||||
**When to apply:** ユーザーが送信または公開する文章を生成する前。cover letters、LinkedIn outreach、application form answers、follow-up emails、executive summaries、profile blurbs。Internal evaluation reports(A-F blocks、scores、analysis)には適用しない。
|
||||
|
||||
**If no cached style in `_profile.md`:** `writing-samples/` の全ファイルを読み、**`README.md` という名前のファイルは skip** する。user-provided samples が見つからなければ style calibration を skip し、writing sample(過去の cover letter、LinkedIn About、professional writing など)があると tailoring に役立つと一度だけ軽く伝える。samples がある場合、下の markers を抽出し、`_profile.md` の `## Writing Style` に書く。以後の session はこの step を skip する。
|
||||
|
||||
### What to extract
|
||||
|
||||
**Tone & register**
|
||||
- Formal vs. conversational
|
||||
- Confident vs. hedging("I think", "perhaps", "somewhat" のような qualifiers を見る)
|
||||
- Warm vs. transactional
|
||||
- Degree of self-promotion。undersell するか、match するか、achievements を前に出すか
|
||||
|
||||
**Sentence structure**
|
||||
- Average sentence length。short and punchy か、long and layered か
|
||||
- Fragments for emphasis の有無
|
||||
- Clause nesting and complexity
|
||||
- Sentence openings。subject-first、action-first、context-first か
|
||||
|
||||
**Punctuation habits**
|
||||
- Em dashes、en dashes、parentheses の使い方
|
||||
- Oxford comma の有無
|
||||
- Ellipses の有無
|
||||
- Exclamation marks の頻度
|
||||
- Semicolons vs. full stops
|
||||
|
||||
**Vocabulary**
|
||||
- Technical density。1 paragraph あたりの jargon 量
|
||||
- Preferred synonyms(例:"built" vs "developed" vs "engineered")
|
||||
- 繰り返し使う words / phrases は維持する
|
||||
- 出てこない words は導入しない
|
||||
|
||||
**Paragraph and structure patterns**
|
||||
- Paragraph length。one-liners か developed blocks か
|
||||
- Bullet-heavy or prose-heavy
|
||||
- Idea sequencing。problem → solution、result-first、chronological か
|
||||
- Headers の使い方
|
||||
|
||||
**Voice signatures**
|
||||
- First-person patterns("I led", "we built", "our team")
|
||||
- Active vs. passive ratio
|
||||
- Habitual openers and closers
|
||||
- Rhetorical moves。questions、contrast、micro-stories の有無
|
||||
|
||||
### Rules
|
||||
|
||||
- **Only extract what is demonstrably present.** 1 つの data point から推測しない。
|
||||
- **Idiosyncratic choices are intentional.** 独特な punctuation や phrasing はユーザーの voice。勝手に直さない。
|
||||
- **If samples conflict**, 最も新しいもの、または用途が近いものを重視する。
|
||||
- **If samples are sparse**, reliable に抽出できるものだけ適用し、残りは defaults に fallback する。
|
||||
- **Style calibration applies to tone and structure only.** Samples から content、claims、metrics を CVs、reports、evaluations に取り込まない。
|
||||
- **No verbatim copying or personal identifiers.** 抽象的な style descriptors のみ保存する。ユーザーの文を verbatim quote しない。names、emails、phone numbers を保持しない。"Preserve idiosyncratic choices" は stylistic traits にだけ適用する。
|
||||
|
||||
### Persisting the extracted style
|
||||
|
||||
Scan 後、user-provided sample が少なくとも 1 つあった場合のみ `modes/_profile.md` に書く。既存の `## Writing Style` section を見つけ、その section 全体を次の `##` heading(または EOF)まで置き換える。なければ append する。これにより canonical section は常に 1 つだけになる。Samples がなければ section を書かない、変更しない。
|
||||
|
||||
```markdown
|
||||
## Writing Style
|
||||
|
||||
_Extracted from writing-samples/ on {date}. Re-run if new samples are added._
|
||||
|
||||
**Tone:** {e.g. conversational, confident, no hedging qualifiers}
|
||||
**Sentence length:** {e.g. short and punchy, avg 12 words}
|
||||
**Openings:** {e.g. action-first, subject-first}
|
||||
**Punctuation:** {e.g. em dashes for asides, Oxford comma, no ellipses}
|
||||
**Vocabulary:** {e.g. prefers "built"/"ran"/"cut" over "developed"/"led"/"reduced"}
|
||||
**Structure:** {e.g. prose-heavy, result-first sequencing}
|
||||
**Voice:** {e.g. "I led", active voice dominant, no rhetorical questions}
|
||||
**Avoid:** {words or patterns absent from samples}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Professional Writing & ATS Compatibility
|
||||
|
||||
これらの rules は、candidate-facing documents に入るすべての generated text に適用する。PDF summaries、bullets、cover letters、form answers、LinkedIn messages。Internal evaluation reports には適用しない。
|
||||
|
||||
Recruiter-side risk mapping、six-second clarity、business-value bullets、ATS reality checks については `modes/heuristics/recruiter-side.md` を読む。
|
||||
|
||||
### Avoid cliché phrases
|
||||
_`voice-dna.md` が存在する場合、その §3 Banned List が canonical でより完全な list になり、この fallback list より優先される。_
|
||||
- "passionate about" / "results-oriented" / "proven track record"
|
||||
- "leveraged"("used" または tool 名を書く)
|
||||
- "spearheaded"("led" または "ran" を使う)
|
||||
- "facilitated"("ran" または "set up" を使う)
|
||||
- "synergies" / "robust" / "seamless" / "cutting-edge" / "innovative"
|
||||
- "in today's fast-paced world"
|
||||
- "demonstrated ability to" / "best practices"(practice 名を具体的に書く)
|
||||
|
||||
### Unicode normalization for ATS
|
||||
`generate-pdf.mjs` は em-dashes、smart quotes、zero-width characters を ATS 互換のため ASCII equivalents に自動 normalize する。ただし生成時点で避ける。
|
||||
|
||||
### Vary sentence structure
|
||||
- すべての bullet を同じ verb で始めない
|
||||
- Sentence length を混ぜる(短い文。Context 付きの少し長い文。また短い文)
|
||||
- いつも "X, Y, and Z" にしない。2 items のときも 4 items のときもある
|
||||
|
||||
### Prefer specifics over abstractions
|
||||
- "Cut p95 latency from 2.1s to 380ms" は "improved performance" よりよい
|
||||
- "Postgres + pgvector for retrieval over 12k docs" は "designed scalable RAG architecture" よりよい
|
||||
- 許可される範囲で tools、projects、customers を名指しする
|
||||
@@ -0,0 +1,297 @@
|
||||
# モード: kyujin -- 完全評価 A-G
|
||||
|
||||
候補者が求人(テキストまたは URL)を貼り付けたら、必ず 7 ブロック(A-F の評価 + G の legitimacy)を出力する:
|
||||
|
||||
## Liveness gate (URL inputs)
|
||||
|
||||
候補者が **URL**(JD テキストではなく)を貼り付けた場合、評価を始める前に求人がまだ live であることを確認する。Dead link は Block A に進めない。404 / expired page に対して A-G 評価、report、PDF を作るのは無駄。
|
||||
|
||||
1. ページ内容を取得する。`auto-pipeline` から来た場合(Step 0.5 がすでに navigate し、link を確認済み)、その snapshot を再利用する。直接 URL が渡された場合は Playwright(`browser_navigate` + `browser_snapshot`)で navigate し、title、URL、visible content を読む。
|
||||
2. 投稿を分類する:
|
||||
- **active posting evidence:** title/role + 実際の job description または application/apply path
|
||||
- **closed posting evidence:** expired/closed/"no longer accepting applications"、JD がなく nav/footer だけ、generic careers/search page への hard redirect、404/410
|
||||
3. 投稿が closed に見える場合は、**Block A の前で stop**:候補者に link が dead であると伝える。entry が `data/pipeline.md` 由来なら、`- [x] ~~Company | Role~~ -- 求人非アクティブ` として mark する。評価、report、CV は生成しない。
|
||||
4. 候補者が JD テキストだけを貼った場合(URL なし)、liveness は確認できない。その limitation を note して進む。確認する link がないため。
|
||||
|
||||
この gate が解決するまで Block A に進まない。ここで取得した snapshot は Block G の freshness signals に再利用する。
|
||||
|
||||
## Step 0 -- Archetype Detection
|
||||
|
||||
求人を 6 つの archetype のいずれかに分類する(`_shared.md` 参照)。Hybrid の場合は最も近い 2 つを示す。これにより以下が決まる:
|
||||
- Block B でどの proof points を優先するか
|
||||
- Block E で summary をどう書き換えるか
|
||||
- Block F でどの STAR stories を準備するか
|
||||
|
||||
## Block A -- Role Summary
|
||||
|
||||
Table with:
|
||||
- Archetype detected
|
||||
- Domain (platform/agentic/LLMOps/ML/enterprise)
|
||||
- Function (build/consult/manage/deploy)
|
||||
- Seniority
|
||||
- Remote (full/hybrid/onsite)
|
||||
- Team size (if mentioned)
|
||||
- TL;DR in 1 sentence
|
||||
|
||||
## Block B -- Match with CV
|
||||
|
||||
`cv.md` を読む。JD の各 requirement を CV の exact lines に mapping した table を作る。
|
||||
|
||||
**Adapted to the archetype:**
|
||||
- If FDE → delivery speed と client-facing proof points を優先
|
||||
- If SA → system design と integrations を優先
|
||||
- If PM → product discovery と metrics を優先
|
||||
- If LLMOps → evals、observability、pipelines を優先
|
||||
- If Agentic → multi-agent、HITL、orchestration を優先
|
||||
- If Transformation → change management、adoption、scaling を優先
|
||||
|
||||
**Gaps** section with mitigation strategy for each. 各 gap について:
|
||||
1. Hard blocker か nice-to-have か
|
||||
2. 候補者は adjacent experience を示せるか
|
||||
3. Portfolio project がこの gap を cover しているか
|
||||
4. Concrete mitigation plan(cover letter 用 phrase、quick project など)
|
||||
|
||||
## Block C -- Level and Strategy
|
||||
|
||||
1. **Level detected** in the JD vs **candidate's natural level for that archetype**
|
||||
2. **"Sell senior without lying" plan**: archetype に適応した specific phrases、highlight すべき concrete achievements、founder experience を advantage として position する方法
|
||||
3. **"If they downlevel me" plan**: compensation が fair なら受け入れる、6-month review を交渉する、clear promotion criteria を求める
|
||||
|
||||
## Block D -- Comp and Demand
|
||||
|
||||
WebSearch を使って調べる:
|
||||
- その role の current salaries(OpenWork、ビズリーチ、Glassdoor、Levels.fyi、Blind)
|
||||
- Company の compensation reputation
|
||||
- その role の demand trend
|
||||
|
||||
Data と cited sources 付きの table を作る。Data がない場合は、捏造せずその旨を書く。
|
||||
|
||||
**日本市場 -- 必須チェック:**
|
||||
- 正社員か業務委託か。正社員なら賞与、有給、社会保険、通勤・住宅手当、退職金を比較に含める
|
||||
- 業務委託なら月額と正社員換算を計算する
|
||||
- 賞与の記載はあるか。月給何ヶ月分か
|
||||
- ストックオプションはあるか。vesting、cliff、税制を評価する
|
||||
- 年俸制か。賞与が含まれるか別か
|
||||
- みなし残業はあるか。何時間分含まれ、超過分は支払われるか
|
||||
- 住宅・通勤手当はあるか。月額はいくらか
|
||||
- 健康保険・厚生年金は標準か手厚いか
|
||||
|
||||
## Block E -- Customization Plan
|
||||
|
||||
| # | Section | Current status | Proposed change | Why |
|
||||
|---|---------|---------------|------------------|-----|
|
||||
| 1 | Summary | ... | ... | ... |
|
||||
| ... | ... | ... | ... | ... |
|
||||
|
||||
Top 5 changes to CV + Top 5 changes to LinkedIn to maximize match.
|
||||
|
||||
## Block F -- Interview Plan
|
||||
|
||||
JD requirements に mapping した 6-10 STAR+R stories(STAR + **Reflection**):
|
||||
|
||||
| # | JD Requirement | STAR+R Story | S | T | A | R | Reflection |
|
||||
|---|----------------|--------------|---|---|---|---|------------|
|
||||
|
||||
**Reflection** column は、何を学んだか、または次に何を変えるかを捉える。これは seniority の signal。Junior candidates は起きたことを説明する。Senior candidates は lessons を抽出する。
|
||||
|
||||
**Story Bank:** `interview-prep/story-bank.md` が存在する場合、これらの stories がすでにあるか確認する。なければ新しいものを append する。時間とともに、どの interview question にも適応できる 5-10 master stories の reusable bank を作る。
|
||||
|
||||
**Selected and framed according to the archetype:**
|
||||
- FDE → delivery speed と client-facing を強調
|
||||
- SA → architectural decisions を強調
|
||||
- PM → discovery と trade-offs を強調
|
||||
- LLMOps → metrics、evals、production hardening を強調
|
||||
- Agentic → orchestration、error handling、HITL を強調
|
||||
- Transformation → adoption、organizational change を強調
|
||||
|
||||
Also include:
|
||||
- 1 recommended case study(どの project をどう present するか)
|
||||
- Red-flag questions and how to answer them(例:"why did you sell your company?", "do you have a team of reports?")
|
||||
|
||||
## Block G -- Posting Legitimacy
|
||||
|
||||
Job posting を分析し、real, active opening かどうかを示す signals を出す。これは、ユーザーが hiring process につながりやすい機会に effort を優先配分するためのもの。
|
||||
|
||||
**Ethical framing:** Observations を提示し、accusations にしない。どの signal にも legitimate explanations があり得る。判断はユーザーが行う。
|
||||
|
||||
### Signals to analyze (in order):
|
||||
|
||||
**1. Posting Freshness**(liveness gate または `auto-pipeline` Step 0 で取得した Playwright snapshot から。JD テキストだけの場合は unavailable):
|
||||
- Date posted または "X days ago" を page から抽出
|
||||
- Apply button state(active / closed / missing / redirects to generic page)
|
||||
- URL が generic careers page に redirect された場合は note する
|
||||
|
||||
**2. Description Quality**(JD text から):
|
||||
- Specific technologies, frameworks, tools を named しているか
|
||||
- Team size、reporting structure、org context に触れているか
|
||||
- Requirements は realistic か(years of experience vs technology age)
|
||||
- 最初の 6-12 months の scope が clear か
|
||||
- Salary/compensation に触れているか
|
||||
- JD のうち role-specific vs generic boilerplate の比率
|
||||
- Internal contradictions があるか(entry-level title + staff requirements など)
|
||||
|
||||
**3. Company Hiring Signals**(2-3 WebSearch queries。Block D research と combine):
|
||||
- Search: `"{company}" layoffs {year}` -- date、scale、departments を note
|
||||
- Search: `"{company}" hiring freeze {year}` -- announcements を note
|
||||
- Layoffs が見つかった場合、この role と同じ department か確認
|
||||
|
||||
**4. Reposting Detection**(scan-history.tsv から):
|
||||
- company + similar role title が別 URL で過去に出ているか確認
|
||||
- 回数と期間を note
|
||||
|
||||
**5. Role Market Context**(qualitative、additional queries なし):
|
||||
- この role は通常 4-6 weeks で埋まる common role か
|
||||
- Role が company business に合っているか
|
||||
- Seniority level が長く open になりやすい type か
|
||||
|
||||
### Output format:
|
||||
|
||||
**Assessment:** One of three tiers:
|
||||
- **High Confidence** -- Multiple signals suggest a real, active opening
|
||||
- **Proceed with Caution** -- Mixed signals worth noting
|
||||
- **Suspicious** -- Multiple ghost job indicators, investigate before investing time
|
||||
|
||||
**Signals table:** 観測した各 signal、finding、weight(Positive / Neutral / Concerning)を table にする。
|
||||
|
||||
**Context Notes:** Niche role、government job、evergreen position など、concerning signals を説明し得る caveats を書く。
|
||||
|
||||
### Edge case handling:
|
||||
- **Government/academic postings:** Timeline が長いのが標準。Threshold を調整(60-90 days は normal)。
|
||||
- **Evergreen/continuous hire postings:** JD が "ongoing" / "rolling" と明示する場合は context として note。これは ghost job ではなく pipeline role。
|
||||
- **Niche/executive roles:** Staff+、VP、Director、highly specialized roles は months open でも legitimate。Age thresholds を調整。
|
||||
- **Startup / pre-revenue:** Early-stage companies は role が genuinely undefined で JD が vague なことがある。Description vagueness の重みを下げる。
|
||||
- **No date available:** Posting age が判断できず、他に concerning signals がない場合、limited data の note 付きで default to "Proceed with Caution"。Evidence なしで "Suspicious" にしない。
|
||||
- **Recruiter-sourced (no public posting):** Freshness signals unavailable。Active recruiter contact 自体を positive legitimacy signal として note。
|
||||
|
||||
---
|
||||
|
||||
## Cover Letter Draft (auto-generated after Block G)
|
||||
|
||||
Report を保存し tracker に記録した後、report file に `## Cover Letter Draft` として cover letter draft を append する。これは starting point であり final letter ではない。ユーザーは `/career-ops cover {slug}` で完成させる。
|
||||
|
||||
**How to generate the draft:**
|
||||
|
||||
1. `cv.md` を読む。JD の top requirements に最も relevant な achievement bullets を 4 つ選ぶ(exact wording、real metrics only)
|
||||
2. `config/profile.yml` を読む。candidate name、current role、years of experience を抽出する
|
||||
3. Role title と JD mission language に基づく 2-sentence opening を書く
|
||||
4. `cv.md` summary から 1-paragraph profile intro を書き、JD domain に合わせる
|
||||
5. "Problems / Why this company / Approach" section は placeholder にする。ここは user input が必要
|
||||
6. Gaps(domain mismatch、language requirement、start date urgency)を detect and flag し、ユーザーがすぐ確認できるようにする
|
||||
|
||||
**Draft format to append to the report:**
|
||||
|
||||
```markdown
|
||||
## Cover Letter Draft
|
||||
|
||||
> Draft generated at evaluation time. Complete via `/career-ops cover {slug}` to fill in angles, confirm research, and generate the PDF.
|
||||
> Gaps flagged below -- address them during the cover flow.
|
||||
|
||||
---
|
||||
|
||||
**Opening** *(placeholder -- refine with your "why this role" angle)*
|
||||
{2-sentence opening based on JD role title and mission language}
|
||||
|
||||
**Profile introduction**
|
||||
{1 paragraph from cv.md summary, adapted to JD domain and required competencies}
|
||||
|
||||
**Key achievements** *(selected from cv.md -- exact wording preserved)*
|
||||
- **{lead from cv.md},** {impact sentence with metric}.
|
||||
- **{lead from cv.md},** {impact sentence with metric}.
|
||||
- **{lead from cv.md},** {impact sentence with metric}.
|
||||
- **{lead from cv.md},** {impact sentence with metric}.
|
||||
|
||||
**Problems I will solve** *(placeholder -- requires company research + your input)*
|
||||
> To be completed: what challenges does {company} face that you'd address? How would you approach them?
|
||||
|
||||
**Closing**
|
||||
I am happy to discuss further at your convenience.
|
||||
|
||||
---
|
||||
|
||||
**Gaps flagged:**
|
||||
{List any detected gaps -- domain mismatch, language requirement, start date urgency, title mismatch. If none, write "None detected."}
|
||||
|
||||
**JD keywords to mirror** *(extracted for ATS + human read)*
|
||||
{8-10 exact phrases from the JD}
|
||||
|
||||
---
|
||||
*Run `/career-ops cover {slug}` to complete angles, confirm company research, and generate the PDF.*
|
||||
```
|
||||
|
||||
`_shared.md` の Professional Writing section にある language rules を draft content にすべて適用する。No em dashes、no buzzwords、active voice、concrete claims only。
|
||||
|
||||
---
|
||||
|
||||
## Post-evaluation
|
||||
|
||||
**ALWAYS** after generating blocks A-G:
|
||||
|
||||
### 1. Save report .md
|
||||
|
||||
Full evaluation を `reports/{###}-{company-slug}-{YYYY-MM-DD}.md` に保存する。
|
||||
|
||||
- `{###}` = next sequential number(3 digits, zero-padded)。競合を防ぐため、必ず `node reserve-report-num.mjs` を実行して番号を claim し(stdout returns `{###}`)、report を write してから `node reserve-report-num.mjs --release {###}` を実行して sentinel を release する。
|
||||
- `{company-slug}` = company name in lowercase, without spaces(use hyphens)
|
||||
- `{YYYY-MM-DD}` = current date
|
||||
|
||||
**Report format:**
|
||||
|
||||
```markdown
|
||||
# Evaluation: {Company} -- {Role}
|
||||
|
||||
**Date:** {YYYY-MM-DD}
|
||||
**URL:**
|
||||
**Archetype:** {detected}
|
||||
**Score:** {X/5}
|
||||
**Legitimacy:** {High Confidence | Proceed with Caution | Suspicious}
|
||||
**PDF:** {path or pending}
|
||||
|
||||
---
|
||||
|
||||
## A) Role Summary
|
||||
(full content of block A)
|
||||
|
||||
## B) Match with CV
|
||||
(full content of block B)
|
||||
|
||||
## C) Level and Strategy
|
||||
(full content of block C)
|
||||
|
||||
## D) Comp and Demand
|
||||
(full content of block D)
|
||||
|
||||
## E) Customization Plan
|
||||
(full content of block E)
|
||||
|
||||
## F) Interview Plan
|
||||
(full content of block F)
|
||||
|
||||
## G) Posting Legitimacy
|
||||
(full content of block G)
|
||||
|
||||
## H) Draft Application Answers
|
||||
(only if score >= 4.5 -- draft answers for the application form)
|
||||
|
||||
---
|
||||
|
||||
## Keywords extracted
|
||||
(list of 15-20 keywords from the JD for ATS optimization)
|
||||
```
|
||||
|
||||
### 2. Record in tracker
|
||||
|
||||
**ALWAYS** record in `data/applications.md`:
|
||||
- Next sequential number
|
||||
- Current date
|
||||
- Company
|
||||
- Role
|
||||
- Score: match average (1-5)
|
||||
- Status: `Evaluated`
|
||||
- PDF: ❌(または auto-pipeline が PDF を生成した場合は ✅)
|
||||
- Report: root-relative link `[001](reports/001-company-2026-01-01.md)`(`merge-tracker.mjs` 経由で merge されると tracker file からの相対 link に normalize される。例:`../reports/...`。#760 参照)
|
||||
|
||||
**Tracker format:**
|
||||
|
||||
```markdown
|
||||
| # | Date | Company | Role | Score | Status | PDF | Report |
|
||||
```
|
||||
@@ -0,0 +1,146 @@
|
||||
# モード: oubo -- 応募ライブアシスタント
|
||||
|
||||
> Free-text answers と cover-letter fields には `voice-dna.md`(存在する場合)を適用する。Full guardrail、conversational voice included(Tier 1 + Tier 2)。`_shared.md` → Voice DNA を参照。
|
||||
|
||||
候補者が Chrome で応募フォームを入力しているときの interactive mode。画面上の内容を読み、事前評価済みの求人 context を読み込み、フォームの各質問に personalized responses を生成する。
|
||||
|
||||
## Requirements
|
||||
|
||||
- **Best with Playwright in visible mode:** visible mode では、候補者が browser を見られ、Claude が page と interact できる。
|
||||
- **Without Playwright:** 候補者が screenshot を共有するか、質問を手動で貼り付ける。
|
||||
|
||||
## Workflow
|
||||
|
||||
```text
|
||||
1. DETECT → Read active Chrome tab (screenshot/URL/title)
|
||||
2. IDENTIFY → Extract company + role from the page
|
||||
3. SEARCH → Match against existing reports in reports/
|
||||
4. LOAD → Read full report + Section G (if it exists)
|
||||
5. PREFLIGHT → Confirm posting liveness + company/role match before drafting
|
||||
6. ANALYZE → Identify ALL visible form questions
|
||||
7. GENERATE → For each question, generate a personalized response
|
||||
8. PRESENT → Show formatted responses for copy-paste
|
||||
```
|
||||
|
||||
## Step 5 -- Preflight gate
|
||||
|
||||
Application answers を生成する前に、form が意図した active job を指していることを確認する。この gate は page detection、company/role identification、matching report load の後に実行する。
|
||||
|
||||
1. Visible URL、page title、company、role、closed/expired signals を読む。
|
||||
2. URL がある場合、Playwright で liveness を確認する:
|
||||
- active posting evidence: title/role + job description または form fields + submit/apply path
|
||||
- closed posting evidence: expired/closed/no longer accepting applications、JD がなく nav/footer だけ、generic careers/search への hard redirect、404/410
|
||||
3. Visible company and role を matched report と比較する。
|
||||
4. Company または title が materially changed している場合、drafting 前に stop して聞く:
|
||||
"The form appears to be for [visible company] -- [visible role], but the matched report is [report company] -- [report role]. Do you want me to re-evaluate, adapt with this mismatch, or stop?"
|
||||
5. Posting が closed に見える場合、candidate が known reason で明示的に override しない限り、final copy の生成を拒否する。
|
||||
6. Candidate が questions だけ、または screenshot だけを貼ったため liveness を確認できない場合、その limitation を明示し、drafting 前に company、role、active posting の確認を求める。
|
||||
|
||||
この preflight が解決するまで Step 6 に進まない。
|
||||
|
||||
**Applying to several roles in one sitting?** この preflight は目の前の単一 form を確認する。Multi-role session の前、特に scanner entries が `**Verification:** unconfirmed (batch mode)` と marked されている場合は、`pipeline` mode の **Liveness sweep** を先に実行する(`node check-liveness.mjs --file <urls>`)。これにより `data/pipeline.md` から dead postings がまとめて落ち、expired role の tab を開かずに済む。
|
||||
|
||||
## Step 1 -- Detect the job
|
||||
|
||||
**With Playwright:** active page の snapshot を取得する。Title、URL、visible content を読む。
|
||||
|
||||
**Without Playwright:** 候補者に以下を依頼する:
|
||||
- Form の screenshot を共有(Read tool で画像を読める)
|
||||
- または form questions を text として貼り付け
|
||||
- または company + role を伝えてもらい、こちらで検索する
|
||||
|
||||
## Step 2 -- Identify and search for context
|
||||
|
||||
1. Page から company name と role title を抽出
|
||||
2. `reports/` を company name で検索(case-insensitive grep)
|
||||
3. Match があれば full report を load
|
||||
4. Section G があれば previous draft answers を base として load
|
||||
5. Match がなければ notify し、quick auto-pipeline の実行を提案
|
||||
|
||||
## Step 3 -- Detect changes in the role
|
||||
|
||||
画面上の role が evaluation 済みの role と異なる場合:
|
||||
- **Notify the candidate:** "The role has changed from [X] to [Y]. Do you want me to re-evaluate or adapt the responses to the new title?"
|
||||
- **If adapt:** Candidate が mismatch を明示的に accept した後に限り、re-evaluate せず新しい role に responses を adjust
|
||||
- **If re-evaluate:** Full A-F evaluation を実行し、report を update し、Section G を regenerate
|
||||
- **Update tracker:** 必要に応じて `applications.md` の role title を変更
|
||||
|
||||
## Step 6 -- Analyze form questions
|
||||
|
||||
Visible questions をすべて特定する:
|
||||
- Free text fields(cover letter、why this role など)
|
||||
- Dropdowns(how did you hear、work authorization など)
|
||||
- Yes/No(relocation、visa など)
|
||||
- Salary fields(range、expectation)
|
||||
- Upload fields(resume、cover letter PDF)
|
||||
|
||||
各 question を分類する:
|
||||
- **Already answered in Section G** → 既存 response を adapt
|
||||
- **New question** → report + `cv.md` から response を generate
|
||||
|
||||
各 field について、application form contract を preserve する:
|
||||
- `field_type`: `text`, `textarea`, `select`, `radio`, `checkbox`, `number`, `file`, or `unknown`
|
||||
- `required`: `yes`, `no`, or `unknown`
|
||||
- `limit`: exact character/word limit if visible; otherwise `unknown`
|
||||
- `options`: visible options for select/radio/checkbox fields
|
||||
- `needs_candidate_confirmation`: `yes` for legal, demographic, work authorization, visa, relocation, salary, disability, veteran, sponsorship, background-check, or self-identification questions unless the answer is explicitly present in `config/profile.yml`
|
||||
|
||||
Legal、demographic、work-authorization、visa/sponsorship、salary、disability、veteran、background-check、relocation、self-identification fields の回答を捏造してはならない。回答が `config/profile.yml` または visible context に明示されていない場合は、`needs_candidate_confirmation` として mark し、候補者に確認するための最も安全な質問を出す。
|
||||
|
||||
## Step 7 -- Generate responses
|
||||
|
||||
各 question について、以下に従って response を生成する:
|
||||
|
||||
1. **Report context:** Block B の proof points、Block F の STAR stories を使う
|
||||
2. **Previous Section G:** Draft response があれば base として使い refine
|
||||
3. **"I'm choosing you" tone:** Same auto-pipeline framework
|
||||
4. **Specificity:** 画面上に見える JD の specific detail を reference
|
||||
5. **career-ops proof point:** "Additional info" field があれば含める
|
||||
6. **Recruiter-side risk map:** `modes/heuristics/recruiter-side.md` を使い、question が解消しようとしている doubt(motivation、stack fit、logistics、comp、work-auth、availability、seniority)を特定し、そこに直接答える
|
||||
7. **Disclosure discipline:** Logistics questions には truthfully に答えるが、unrelated motivation/fit answers で sensitive or HR-only details を自発的に出さない
|
||||
|
||||
**日本市場で頻出するフォーム特有の質問:**
|
||||
- **希望年収(月額/年額、税込み)** → `profile.yml` のレンジを日本円で示し、「パッケージ全体に応じて応相談」と注記
|
||||
- **雇用形態の希望(正社員/業務委託)** → `profile.yml` に従って回答。該当する場合は「どちらも対応可能」
|
||||
- **稼働開始可能日** → 現在の退職予告期間を考慮した現実的な日付(正社員なら通常 1-2 ヶ月)
|
||||
- **就労資格** → 明確に回答。未記載なら candidate confirmation が必要
|
||||
- **語学力** → 言語ごとに level を記載(native、business、conversational、basic)
|
||||
- **転居の可否** → `profile.yml` の location settings に従う
|
||||
|
||||
**Output format:**
|
||||
|
||||
```text
|
||||
## Responses for [Company] -- [Role]
|
||||
|
||||
Based on: Report #NNN | Score: X.X/5 | Archetype: [type]
|
||||
|
||||
---
|
||||
|
||||
### 1. [Exact form question]
|
||||
> [Response ready for copy-paste, or "Ask candidate: ..." if the field needs confirmation]
|
||||
|
||||
### 2. [Next question]
|
||||
> [Response]
|
||||
|
||||
...
|
||||
|
||||
---
|
||||
|
||||
Notes:
|
||||
- [Any observations about the role, changes, etc.]
|
||||
- [Personalization suggestions the candidate should review]
|
||||
```
|
||||
|
||||
## Step 8 -- Post-apply (optional)
|
||||
|
||||
候補者が application を submitted したと確認した場合:
|
||||
1. `applications.md` の status を "Evaluated" から "Applied" に update
|
||||
2. Report の Section G を final responses で update
|
||||
3. Next step として LinkedIn outreach 用の `/career-ops contacto` を提案
|
||||
|
||||
## Scroll handling
|
||||
|
||||
Form questions が visible area を超える場合:
|
||||
- 候補者に scroll して別 screenshot を共有してもらう
|
||||
- または remaining questions を paste してもらう
|
||||
- Form 全体を cover するまで iteration で処理
|
||||
@@ -0,0 +1,86 @@
|
||||
# モード: pipeline -- URL Inbox (Second Brain)
|
||||
|
||||
`data/pipeline.md` に保存された job URLs を処理する。ユーザーはいつでも URL を追加し、後から `/career-ops pipeline` を実行してまとめて処理する。
|
||||
|
||||
## Liveness sweep
|
||||
|
||||
**URLs を処理する前に必ず実行する。** Scanner が headless/batch mode で追加した entries は、Playwright が使えなかったため `**Verification:** unconfirmed (batch mode)` を持つ。つまり liveness は未確認。Sweep なしでは dead postings が 1 tab ずつ evaluation に到達し、phantom roles に時間と tokens を使ってしまう(8 件の stale URLs がある inbox なら 8 回分の無駄な evaluations になる)。
|
||||
|
||||
Per-URL loop の前に、zero-token liveness checker で pending URLs をまとめて sweep する:
|
||||
|
||||
1. "Pending" section のすべての `- [ ]` URL を temp file に集める(1 URL per line)。
|
||||
2. `node check-liveness.mjs --file <tmpfile>` を実行する(large batches では WAF rate limits を避けるため `--throttle` を追加。pure Playwright、zero Claude tokens)。Checker は URL ごとの verdict を出し、expired/uncertain がある場合は non-zero で終了する。
|
||||
3. Checker が **expired/closed** と報告した URL は処理せず pipeline entry を resolve する:`- [x] ~~URL | Company | Role~~ -- posting expired (liveness sweep)` として "Processed" に移し、すでに tracker row がある場合は `Discarded` にする。**JD extraction、evaluation、report/PDF generation はしない。**
|
||||
4. `uncertain` results は残し、normal per-URL extraction 中に確認する(一時的な timeout で live posting を落とさないため)。
|
||||
5. 生き残った live URLs だけが下の per-URL processing loop に進む。
|
||||
|
||||
これは `auto-pipeline` の per-URL liveness gate(Step 0.5)や `apply` preflight を置き換えるものではなく補完するもの。Dead postings を upfront, in bulk で落とし、ユーザーが expired role の tab を開いたり token を使ったりしないようにする。
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Read** `data/pipeline.md` → "Pending" section の `- [ ]` items を探す。最初に上の **Liveness sweep** を実行し、expired entries を落としてから続行する。
|
||||
2. **For each surviving pending URL**:
|
||||
a. `node reserve-report-num.mjs` を実行して次の `REPORT_NUM` を atomically claim する(report が書き込まれたら `node reserve-report-num.mjs --release <num>` で sentinel を release)
|
||||
b. **Extract JD** using Playwright(browser_navigate + browser_snapshot)→ WebFetch → WebSearch
|
||||
c. URL に access できない場合 → note 付きで `- [!]` と mark し、次へ進む
|
||||
d. **Execute full auto-pipeline**: Evaluation A-F → Report .md → PDF(score >= `auto_pdf_score_threshold` の場合)→ Tracker
|
||||
e. **Move from "Pending" to "Processed"**: `- [x] #NNN | URL | Company | Role | Score/5 | PDF ✅/❌`
|
||||
|
||||
**About the PDF gate (configurable):** `config/profile.yml` → `auto_pdf_score_threshold` を読む。Key がなければ default は `3.0`(この mode の original gate)。Evaluation score が threshold 未満なら PDF generation を skip する。Report は通常通り書き、header に `**PDF:** not generated -- run /career-ops pdf {company-slug} to create on demand` と表示し、tracker では PDF ❌。Score が threshold 以上なら通常通り PDF を生成する。
|
||||
|
||||
**Tuning it:** Tailored PDF generation は entry あたり ~30-60s かかる(Playwright launch + HTML render)うえ、使われないことも多い。多くの roles は 2.x/3.x で application stage まで進まない。`auto_pdf_score_threshold` を上げる(例:`4.0`)と marginal offers では report のみを書き、PDF は `/career-ops pdf {slug}` で on demand に作れる。`0` にするとすべての offers で PDF を生成する。Path A `/career-ops pipeline` と Path B `batch/batch-runner.sh` は同じ key を読むため、どちらで処理しても behavior は同じ。
|
||||
3. **If there are 3+ pending URLs**, speed を上げるため agents を並列起動する(Agent tool with `run_in_background`)。
|
||||
4. **At the end**, summary table を表示:
|
||||
|
||||
```markdown
|
||||
| # | Company | Role | Score | PDF | Recommended action |
|
||||
```
|
||||
|
||||
## Format of pipeline.md
|
||||
|
||||
```markdown
|
||||
## Pending
|
||||
- [ ] https://jobs.example.com/posting/123
|
||||
- [ ] https://boards.greenhouse.io/company/jobs/456 | Company Inc | Senior PM
|
||||
- [ ] https://jobs.ashbyhq.com/acme/789 | Acme Corp | Solutions Architect | Remote (US)
|
||||
- [!] https://private.url/job -- Error: login required
|
||||
|
||||
## Processed
|
||||
- [x] #143 | https://jobs.example.com/posting/789 | Acme Corp | AI PM | 4.2/5 | PDF ✅
|
||||
- [x] #144 | https://boards.greenhouse.io/xyz/jobs/012 | BigCo | SA | 2.1/5 | PDF ❌
|
||||
```
|
||||
|
||||
Pending lines are `- [ ] {url} | {company} | {title} | {location}`. Scanner は ATS が location を expose する場合、末尾の `| {location}` column を埋める。古い 3-column lines(location なし)も valid で、empty location として読む。
|
||||
|
||||
> 注:既存ファイルが日本語 section headings(`未処理` / `処理済み`)を使っている場合は、その style を維持してよい。読み取りは柔軟に行い、書き込み時は既存 file の style を保つ。
|
||||
|
||||
## Intelligent JD detection from URL
|
||||
|
||||
1. **Playwright (preferred):** `browser_navigate` + `browser_snapshot`. すべての SPA で動く。
|
||||
2. **WebFetch (fallback):** Static pages または Playwright が unavailable な場合。
|
||||
3. **WebSearch (last resort):** JD を index している secondary portals で検索。
|
||||
|
||||
**Special cases:**
|
||||
- **LinkedIn:** login が必要な場合あり → `[!]` と mark し、ユーザーに text paste を依頼
|
||||
- **PDF:** URL が PDF を指す場合、Read tool で直接読む
|
||||
- **`local:` prefix:** Local file を読む。Example: `local:jds/linkedin-pm-ai.md` → `jds/linkedin-pm-ai.md`
|
||||
- **Wantedly / Green / Findy:** 日本の主要 platforms。まず Playwright で確認
|
||||
- **doda / リクナビNEXT / マイナビ転職:** 日本の大手 job portals。Usually WebFetch または Playwright で確認
|
||||
- **ビズリーチ:** ハイクラス求人。Login が必要な場合あり
|
||||
- **LinkedIn JP:** Global LinkedIn と同じ constraints。Login が必要な場合あり
|
||||
|
||||
## Automatic numbering
|
||||
|
||||
1. `node reserve-report-num.mjs` を実行して next sequential number を claim する(stdout returns `{###}`)。
|
||||
2. その number を使って report file を書く。
|
||||
3. Report が書けたら `node reserve-report-num.mjs --release {###}` を実行して sentinel を release する。
|
||||
|
||||
## Source synchronization
|
||||
|
||||
URL を処理する前に sync を verify:
|
||||
|
||||
```bash
|
||||
node cv-sync-check.mjs
|
||||
```
|
||||
|
||||
Desynchronization があれば、続行前にユーザーに warn する。
|
||||
Reference in new issue
Block a user