Files
redlineo d295c7f139
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s
init
2026-07-13 10:14:00 +03:00

147 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# モード: 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 で処理