diff --git a/.gitignore b/.gitignore index d8b48ae..c0c16b6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ # Personal coaching data — contains stories, scores, interview targets, and concerns coaching_state.md +# Bad fit opportunities - may get large for active searches, hence it is a separate file +opportunities_bad_fit.md # Active skill file (created by copying SKILL.md during setup) CLAUDE.md diff --git a/SKILL.md b/SKILL.md index e6a79d6..2a85603 100644 --- a/SKILL.md +++ b/SKILL.md @@ -26,7 +26,7 @@ This skill maintains continuity across sessions using a persistent `coaching_sta At the beginning of every session: 1. Read `coaching_state.md` if it exists. -2. **If it exists**: Run the Schema Migration Check (see below), then the Timeline Staleness Check (see below). Then greet the candidate with a prescriptive recommendation: "Welcome back. Last session we worked on [X]. Your current drill stage is [Y]. You have [Z] real interviews logged. Based on where you are, the highest-leverage move right now is **[specific command + reason]**. Want to start there, or tell me what you'd rather work on." Recommendation logic (check in this order): pending outcomes in Outcome Log → ask for updates before recommending ("Any news from [companies]?"); interview within 48h → `hype` (+ note any storybank gaps to address post-interview); storybank empty → `stories`; debrief captured but no corresponding Score History entry for that round → `analyze` (paste the transcript); research done for a company but prep not yet run → `prep [company]`; 3+ sessions and no recent progress review → `progress`; active prep but no practice → `practice`; otherwise → the most relevant command based on Active Coaching Strategy. Do NOT re-run kickoff. If the Score History or Session Log has grown large (15+ rows), run the Score History Archival check silently before continuing. Also check Interview Intelligence archival thresholds if the section exists. +2. **If it exists**: Run the Schema Migration Check (see below), then the Timeline Staleness Check (see below). Then greet the candidate with a prescriptive recommendation: "Welcome back. Last session we worked on [X]. Your current drill stage is [Y]. You have [Z] real interviews logged. Based on where you are, the highest-leverage move right now is **[specific command + reason]**. Want to start there, or tell me what you'd rather work on." Recommendation logic (check in this order): pending outcomes in Outcome Log → ask for updates before recommending ("Any news from [companies]?"); interview within 48h → `hype` (+ note any storybank gaps to address post-interview); storybank empty → `stories`; debrief captured but no corresponding Score History entry for that round → `analyze` (paste the transcript); research done for a company but prep not yet run → `prep [company]`; 3+ sessions and no recent progress review → `progress`; active prep but no practice → `practice`; Scout Config exists and last scan > 3 days ago → `scout` (check for new opportunities); otherwise → the most relevant command based on Active Coaching Strategy. Do NOT re-run kickoff. If the Score History or Session Log has grown large (15+ rows), run the Score History Archival check silently before continuing. Also check Interview Intelligence archival thresholds if the section exists. 3. **If it doesn't exist and the user hasn't already issued a command**: Treat as a new candidate. Suggest kickoff. 4. **If it doesn't exist but the user has already issued a command** (e.g., they opened with `kickoff`): Execute the command directly — don't suggest what they've already asked for. @@ -72,6 +72,7 @@ After reading `coaching_state.md`, check whether it contains all sections and co - **Missing `JD Analysis` section(s)**: No migration needed — JD Analysis sections are created per-JD when `decode` is run. Absence is normal. - **Missing `Presentation Prep` section**: No migration needed — created when `present` is run. Absence is normal. - **Missing `Comp Strategy` section**: Add the section header with empty fields. Note in Coaching Notes: "[date]: Comp Strategy section added. Run `salary` to populate." +- **Missing `Scout Config` or `Scout Opportunities` section(s)**: No migration needed — created on first `scout` run via the URL Configuration Flow. Absence is normal until scout is first used. - **Missing `Anxiety profile` in Profile**: Add the field with value "unknown". It will be set during the next `hype` session. - **Missing `Career transition` in Profile**: Add the field with value "none". If the candidate's resume suggests a transition, update during the next session. - **Missing `Transition narrative status` in Profile**: Add the field with value "not started". Only relevant when Career transition is not "none". @@ -292,6 +293,18 @@ Last updated: [date] - Top predicted questions: [top 3] - Key adjustment: [single biggest change recommended] +## Scout Config +- Search URLs: + 1. [URL — label, e.g., "LinkedIn — CTO roles"] + 2. [URL — label] +- Fit threshold: [1-5, default 3] +- Last scan: [date] + +## Scout Opportunities +| Date | Company | Title | Score | Rationale | URL | Status | +|------|---------|-------|-------|-----------|-----|--------| +[rows — Status: New / Reviewed / Pursuing / Passed / Archived. Only above-threshold opportunities stored here. Below-threshold stored in opportunities_bad_fit.md for dedup.] + ## Comp Strategy - Date: [date] - Depth: [Quick Script / Standard / Deep Strategy] @@ -342,6 +355,7 @@ Write to `coaching_state.md` whenever: - decode produces JD analysis (save JD Analysis section per JD to coaching_state.md — date, depth, fit verdict, top competencies, frameable gaps, structural gaps, unverified assumptions, batch triage rank). Multiple JD Analysis sections can exist. Also update Interview Loops: if decode is for a company already in loops, add/update JD decode data; if new company, add lightweight entry with Status: Decoded. - present produces presentation prep (save Presentation Prep section as top-level section in coaching_state.md — include company name in header when company-specific — date, depth, framework, time target, content status, top predicted questions, key adjustment) - salary produces comp strategy (save Comp Strategy section to coaching_state.md — date, depth, target range, range basis, research completeness, stage coached, jurisdiction notes, scripts provided, key principle) +- scout scans job search URLs and scores new listings (save Scout Config on first run, add above-threshold listings to Scout Opportunities table in coaching_state.md, add below-threshold listings to opportunities_bad_fit.md, update Last scan date). When other commands create Interview Loop entries for a company+role that exists in Scout Opportunities, update the Scout Opportunities Status to "Pursuing" automatically. - prep starts a new company loop or updates interviewer intel, round formats, fit verdict, fit confidence, and structural gaps (add to Interview Loops) - negotiate receives an offer (add to Outcome Log with Result: offer) - reflect archives the coaching state (add Status: Archived header) @@ -399,6 +413,7 @@ Execute commands immediately when detected. Before executing, **read the referen | `negotiate` | Post-offer negotiation coaching | | `reflect` | Post-search retrospective + archive | | `feedback` | Capture recruiter feedback, report outcomes, correct assessments, add context | +| `scout` | Scan job search URLs for new opportunities + fit scoring | | `help` | Show this command list | ### File Routing @@ -418,6 +433,7 @@ When executing a command, read the required reference files first: - **`salary`**: Also read `references/commands/negotiate.md` (for handoff awareness and consistency — salary covers pre-offer, negotiate covers post-offer). - **`stories`**: Also read `references/storybank-guide.md` and `references/differentiation.md`. - **`progress`**: Also read `references/calibration-engine.md`. +- **`scout`**: No additional reference files — reads only `references/commands/scout.md`. Uses Chrome browser tools to read job search pages. - **All commands at Directness Level 5**: Also read `references/challenge-protocol.md`. ## Evidence Sourcing Standard @@ -506,13 +522,14 @@ Use first match: 11. JD analysis / "decode this JD" / "is this role a good fit" / "should I apply" / "which of these roles should I pursue" / "compare these JDs" intent -> `decode` 12. Presentation prep / "I have a presentation round" / "help me structure my presentation" / "portfolio review prep" intent -> `present` 13. Comp questions / "what do I say about salary" / "recruiter asked about compensation" / "how do I handle the salary question" / "what should I put for expected salary" intent -> `salary` -14. Story-building / storybank intent -> `stories` -15. System design / case study / technical interview practice intent -> `practice technical` (sub-command of `practice`) -16. Practice intent -> `practice` -17. Progress/pattern intent -> `progress` -18. "I got an offer" / offer details present -> `negotiate` -19. "I'm done" / "accepted" / "wrapping up" -> `reflect` -20. Otherwise -> ask whether to run `kickoff` or `help` +14. Job scanning / "scan for jobs" / "check for new listings" / "any new opportunities" intent -> `scout` +15. Story-building / storybank intent -> `stories` +16. System design / case study / technical interview practice intent -> `practice technical` (sub-command of `practice`) +17. Practice intent -> `practice` +18. Progress/pattern intent -> `progress` +19. "I got an offer" / offer details present -> `negotiate` +20. "I'm done" / "accepted" / "wrapping up" -> `reflect` +21. Otherwise -> ask whether to run `kickoff` or `help` ### Multi-Step Intent Detection @@ -532,6 +549,7 @@ When a candidate's request implies a sequence of commands, state the plan and ex | "I want to optimize my application materials" | `pitch` (if no Positioning Statement) → `resume` → `linkedin` (if not already done) | | "I want to start networking" / "How do I reach out to people?" | `pitch` (if no Positioning Statement) → `linkedin` (Quick Audit, if not already done) → `outreach` | | "I got rejected from [company]" | `feedback` Type B → `progress` targeting insights (if 3+ outcomes) | +| "Scan for new jobs" / "Check my job searches" / "Any new opportunities?" | `scout` → (if high-scoring results) suggest `decode` or `research` for top matches | **Behavior**: When you detect a multi-step intent, briefly state the plan ("I'll walk you through research, then prep, then concerns for [company]"), execute the first step, and at each transition point offer the next step naturally: "That covers the research. Ready to move into full prep?" If the candidate wants to skip or redirect, respect that. When a multi-step sequence is active and Rule 7's state-aware recommendation for the current command diverges from the planned next step, follow the multi-step plan but note the state-aware alternative: "Next in our sequence is `prep`. (Side note: your storybank is empty — we should address that after we finish this prep cycle.)" diff --git a/references/commands/help.md b/references/commands/help.md index b22f173..1b784f2 100644 --- a/references/commands/help.md +++ b/references/commands/help.md @@ -30,6 +30,8 @@ When the user types `help`, generate a context-aware command guide — not just - If the candidate mentions a presentation, portfolio review, or case presentation: highlight `present` - If Comp Strategy doesn't exist and the candidate mentions a recruiter screen or salary question: highlight `salary` - If the candidate mentions salary expectations, compensation questions, or "what should I say about pay": highlight `salary` + - If Scout Config exists with URLs configured and last scan is older than a few days: highlight `scout` ("You haven't scanned for new jobs recently") + - If the candidate mentions checking for new jobs, scanning listings, or monitoring opportunities: highlight `scout` 4. **Diagnostic Router** — If the candidate describes a problem instead of asking for a command, route them to the right place: - "I'm not getting callbacks" → `resume` (ATS issues) or `decode` (targeting wrong roles) - "I keep failing first rounds" → `analyze` (if transcripts exist) or `practice ladder` (if no data) @@ -40,6 +42,7 @@ When the user types `help`, generate a context-aware command guide — not just - "I'm not hearing back from networking" → `outreach` + `linkedin` (profile quality gate) - "I keep getting to final rounds but not getting offers" → `progress` (pattern analysis) + `concerns` (what's tripping you up) - "I have a presentation round" → `present` + - "I'm spending too much time checking job boards" → `scout` (automate the scanning) Don't just list the command — explain WHY that command addresses their specific problem. 5. **Show current coaching state summary** (if it exists): track, seniority band, drill stage, number of stories, number of real interviews, and active company loops. 6. **End with a prompt**: "What would you like to work on?" @@ -95,6 +98,11 @@ When the user types `help`, generate a context-aware command guide — not just |---|---| | `stories` | Full storybank management. Options: `view`, `add` (guided discovery, not just "tell me a story"), `improve` (structured upgrade with before/after), `find gaps` (prioritized by target roles), `retire`, `drill` (rapid-fire retrieval practice), `narrative identity` (extract your 2-3 core career themes and see how every story connects). At Level 5: stories get red-teamed with 5 challenge lenses after add/improve. | +### Job Discovery +| Command | What It Does | +|---|---| +| `scout` | Automated job search scanner — reads your preconfigured job search URLs (LinkedIn, Indeed, etc.) via Chrome, identifies new listings, scores fit against your profile on a 1-5 scale, and stores results. Surfaces only opportunities above your configured threshold. Requires Chrome extension environment (Cowork). | + ### Progress and Tracking | Command | What It Does | |---|---| @@ -141,6 +149,7 @@ When the user types `help`, generate a context-aware command guide — not just - Don't apply to every JD that looks interesting. Run `decode` to analyze the language, assess fit, and decide where your time is best spent — or compare multiple JDs with batch triage. - Presentation rounds are won in the preparation, not the delivery. Run `present` to structure your content, calibrate timing, and prepare for Q&A before you ever open PowerPoint. - The highest-leverage salary moment is the recruiter screen, not the offer negotiation. Run `salary` before that first call so you don't anchor yourself low. +- Set up `scout` with your job search URLs and run it periodically to catch new listings without manually checking every site. It remembers what it's already seen. - Everything saves automatically to `coaching_state.md` — pick up where you left off, even weeks later What would you like to work on? diff --git a/references/commands/scout.md b/references/commands/scout.md new file mode 100644 index 0000000..30dcd9c --- /dev/null +++ b/references/commands/scout.md @@ -0,0 +1,235 @@ +# scout — Job Opportunity Scanner + +Automated job search scanner that reads preconfigured search URLs via Chrome, identifies new listings, scores fit against the candidate's profile, and stores results for later review. Designed to run periodically without burning through tokens. + +### When to Use Scout vs. Other Commands + +| Situation | Use | +|---|---| +| Want to scan for new job listings across multiple sources | `scout` | +| Found a specific JD and want to analyze it deeply | `decode` | +| Want to understand a specific company before applying | `research` | +| Have an interview scheduled and need full prep | `prep` | +| Want to compare 2-5 specific JDs you already have | `decode` (batch triage) | + +### Prerequisites + +- **Hard dependency**: Must run in a Chrome-enabled environment (Cowork with Claude Chrome Extension). The command reads live job search result pages via the browser. +- **Hard dependency**: `coaching_state.md` must exist with a Profile section (target roles, seniority band). Without a profile, there's nothing to score fit against. +- **Soft dependency**: Resume Analysis improves scoring accuracy (skills matching). +- **Soft dependency**: Storybank improves scoring accuracy (competency coverage). +- **Soft dependency**: Comp Strategy enables comp matching (when listings include salary). + +### Priority Check + +- If no `kickoff`: Hard gate. "I need your profile to score fit. Run `kickoff` first." +- If no search URLs configured: "No job search URLs configured yet. Let's set those up first." → run URL Configuration flow. +- If all URLs fail to load: Report which URLs failed and why. Suggest the candidate check them manually. + +### Sequence + +**Step 1: Load Context** +Read `coaching_state.md`. Extract: +- Profile (target roles, seniority band, career transition) +- Resume Analysis (positioning strengths, likely concerns) +- Storybank (skills coverage — Primary Skill and Secondary Skill columns) +- Comp Strategy (target range, if exists) +- Scout Config (search URLs, threshold) +- Scout Opportunities (already-seen jobs — title + company combos) + +Also check `opportunities_bad_fit.md` for previously seen below-threshold jobs. + +**Step 2: Read Search Pages** +For each URL in the Scout Config: +1. Open the URL in Chrome (or navigate to it). +2. Read the job listings visible on the page. Extract for each listing: + - Job title + - Company name + - Location / remote status + - Seniority level (if shown) + - Comp range (if shown) + - Listing URL (if available) + - Brief description or key requirements (whatever is visible on the search results page) +3. If the search page requires scrolling to load more results, scroll to load all visible listings. +4. **Two-tier detail retrieval**: + - **Tier 1 — Search page has enough detail**: If the search results page shows a description, requirements, or enough context to score fit (e.g., LinkedIn, Indeed), score from the search page. Do not click through. This is the fast path. + - **Tier 2 — Search page is too thin**: If the search results page shows only title + company with no description or requirements (e.g., Built In Chicago, some company career pages), click through to the listing detail page to get the info needed for scoring, then navigate back to the search results. This is slower but necessary — a title alone isn't enough to score fit. + - **How to decide**: After reading the search page, check whether you have at least a job title, company, AND either a description snippet or a requirements list. If yes → Tier 1. If you only have title + company with no detail → Tier 2. + - **Tier 2 optimization**: When clicking through, extract only what's needed for scoring (title, company, seniority, requirements, comp if shown). Don't read the entire page in depth — get the facts and move on. + +### Token Efficiency Protocol + +These rules minimize token usage across scout runs. Follow them on every scan. + +**Rule 1: Always use text extraction, not screenshots.** +Use `get_page_text` or `read_page` as the standard extraction method for all job board pages. Job boards render content as HTML text — screenshots are never needed. A single text call replaces 4-6 screenshot + scroll cycles per URL. Fall back to screenshots only if text extraction returns empty or garbled content (rare for any major job board). + +**Rule 2: Quick-pass dedup before deep reading.** +On each search page, do a fast title + company scan first. Cross-reference against `opportunities_bad_fit.md` and the Scout Opportunities table in `coaching_state.md` before clicking into or evaluating any listing. Only deep-read (click through, extract full details, evaluate fit) listings that aren't already tracked. Report skip count in the Scan Summary. + +**Rule 3: Early termination when no new listings found.** +If the first 10-15 listings on a search page are all already tracked (present in bad_fit or Scout Opportunities), stop scrolling that URL. Job boards sort by recency — if the top results are all known, deeper results will be too. Exception: if the search URL uses a non-date sort order (e.g., relevance), scroll fully. + +**Rule 4: Batch assessment.** +Collect all new (unseen) listings across all URLs first, then do one consolidated scoring pass against the candidate's profile. Profile context is loaded once in Step 1 — don't re-read `coaching_state.md` per listing. + +**Step 3: Deduplication** +For each extracted listing, check whether `title + company` (case-insensitive) already exists in: +- `coaching_state.md` Scout Opportunities table (above-threshold) +- `opportunities_bad_fit.md` (below-threshold) + +Skip any already-seen listings. Report the skip count at the end. + +**Step 4: Profile-Match Scoring** +For each new listing, score fit on a 1-5 scale using these factors: + +| Factor | Weight | How to Assess | +|---|---|---| +| **Role match** | High | Does the title/function align with the candidate's target role(s)? Exact match = high score. Adjacent function = moderate. Unrelated = low. | +| **Seniority match** | High | Does the listed level match the candidate's seniority band? Match = high. One level off = moderate. Two+ levels off = low. | +| **Skills/requirements match** | Medium | Do the visible requirements overlap with the candidate's Resume Analysis strengths and Storybank skills? Strong overlap = high. Partial = moderate. Minimal = low. | +| **Transition alignment** | Low (only if Career transition ≠ "none") | Does this role align with the candidate's transition direction? Supports transition = boost. Contradicts = penalty. | +| **Comp match** | Medium (only when both listing comp AND Comp Strategy target range exist) | Is the listed comp within or above the candidate's target range? Within/above = neutral (no penalty). 10-20% below = slight penalty. 20%+ below = significant penalty. | + +**Scoring scale:** + +| Score | Label | Meaning | +|---|---|---| +| 5 | Strong Fit | Nearly all factors align. Candidate checks most boxes. | +| 4 | Good Fit | Solid match with 1-2 minor gaps that are easily frameable. | +| 3 | Moderate Fit | Real gaps exist but are potentially narratable. Worth a closer look. | +| 2 | Weak Fit | Significant gaps. Uphill battle unless there's a specific angle. | +| 1 | Poor Fit | Fundamental misalignment on role, seniority, or domain. | + +**For each listing, also write a one-line rationale** explaining the score. Examples: +- "Strong role + seniority match. Skills overlap on AI strategy and engineering leadership." (5) +- "Right level, adjacent function (VP Product vs VP Eng). Domain match is strong." (4) +- "Good role match but comp range is 25% below target." (3) +- "Two levels junior. Would be a significant step down." (2) +- "Unrelated function (marketing). Skip." (1) + +**Step 5: Store Results** +Split results by the candidate's configured threshold: + +**Above threshold** → Add to `coaching_state.md` Scout Opportunities table: +``` +| Date | Company | Title | Score | Rationale | URL | Status | +``` +- Status starts as "New" +- URL is the listing URL if available, otherwise blank + +**Below threshold** → Add to `opportunities_bad_fit.md`: +``` +| Date | Company | Title | Score | Rationale | +``` +- No URL needed — this is just a dedup record +- No Status column — these aren't tracked further + +**Step 6: Report to User** +Show only above-threshold results, sorted by score (highest first). + +### URL Configuration Flow + +When the candidate first runs `scout` (or when no URLs are configured), walk them through setup: + +1. "What job search sites are you using? (LinkedIn, Indeed, Glassdoor, etc.)" +2. "For each site, set up a search with your criteria (role, location, experience level, etc.) and give me the URL of the search results page." +3. "What fit threshold should I use? Jobs scoring at or above this number will be surfaced to you. I recommend starting with 3 (Moderate Fit and above)." Accept 1-5. +4. Store URLs and threshold in coaching_state.md Scout Config section. + +**Important**: The candidate configures their own search criteria on each job site. Scout doesn't try to construct searches — it reads whatever results the candidate's preconfigured searches return. + +### Threshold Adjustment + +If the candidate asks to change their threshold: update Scout Config and re-evaluate any stored opportunities that cross the new boundary. Move newly-qualifying opportunities from `opportunities_bad_fit.md` to `coaching_state.md` (with Status: "New"), and vice versa. + +### Output Schema + +```markdown +## Scout Report — [date] + +### New Opportunities ([count] found, [count] skipped as already seen) + +| # | Company | Title | Score | Rationale | +|---|---------|-------|-------|-----------| +| 1 | [company] | [title] | 5 | [one-line rationale] | +| 2 | [company] | [title] | 4 | [one-line rationale] | +| ... | | | | | + +### Below Threshold ([count] new listings scored below [threshold]) +[Not shown in detail — stored in opportunities_bad_fit.md for dedup.] + +### Scan Summary +- URLs scanned: [count] +- Total listings read: [count] +- Already seen (skipped): [count] +- New above threshold: [count] +- New below threshold: [count] + +**Recommended next**: `decode [top-scored company JD]` — get a full JD analysis for the strongest new match. **Alternatives**: `research [company]`, `scout` (run again later for new listings) +``` + +### Edge Cases + +**No new listings found**: "No new listings across [N] search URLs. Either nothing new has been posted, or I've already seen everything. Try again in a few days, or check that your search URLs are still returning current results." + +**Search page format not readable**: Some job sites may render listings in ways that are hard to parse. If a URL's listings can't be reliably extracted: "I couldn't reliably read listings from [URL]. The page format may not be compatible. You might need to use a different search URL for this site, or we can skip it." + +**Mixed results across URLs**: Report per-URL success/failure so the candidate knows which sources are working. + +**Comp data availability**: Most search result pages don't show comp. Only factor comp into scoring when it's explicitly visible. Never guess comp ranges. + +**Duplicate listings across sources**: The same job may appear on LinkedIn and Indeed. Dedup by title + company catches this — the second occurrence is skipped. + +### Coaching State Integration + +Save to `coaching_state.md`: + +```markdown +## Scout Config +- Search URLs: + 1. [URL — label, e.g., "LinkedIn — CTO roles"] + 2. [URL — label] + 3. [URL — label] +- Fit threshold: [1-5, default 3] +- Last scan: [date] + +## Scout Opportunities +| Date | Company | Title | Score | Rationale | URL | Status | +|------|---------|-------|-------|-----------|-----|--------| +[rows — Status: New / Reviewed / Pursuing / Passed / Archived] +``` + +Save to `opportunities_bad_fit.md`: + +```markdown +# Below-Threshold Opportunities +Last updated: [date] + +| Date | Company | Title | Score | Rationale | +|------|---------|-------|-------|-----------| +[rows — append-only, used for dedup] +``` + +### Status Lifecycle + +Scout Opportunities Status values: +- **New** — Just discovered by scout. Not yet reviewed by the candidate. +- **Reviewed** — Candidate has seen it (set when candidate asks to view opportunities or when shown in scout report). +- **Pursuing** — Candidate decided to pursue. Typically set when `decode`, `research`, or `prep` is run for this company+role. +- **Passed** — Candidate decided not to pursue. +- **Archived** — No longer relevant (role filled, expired, etc.). + +When other commands create Interview Loop entries for a company+role that exists in Scout Opportunities, update the Status to "Pursuing" automatically. + +### Schema Migration + +When reading an existing `coaching_state.md` that doesn't have Scout Config or Scout Opportunities sections: these are created on first `scout` run via the URL Configuration Flow. No migration needed — absence is normal until scout is first used. + +### Archival + +When Scout Opportunities exceeds 50 rows: +- Archive all "Passed" and "Archived" entries older than 30 days — move to a `### Historical Scout Summary` subsection preserving only: date range, count by score, count by status. +- Keep all "New", "Reviewed", and "Pursuing" entries regardless of age. + +`opportunities_bad_fit.md` has no archival threshold — it grows unbounded. The file serves only as a dedup index (simple table, 5 short columns per row). Archiving old entries would cause the system to re-score previously seen listings, wasting tokens. Even at 1,000+ rows the file is small. diff --git a/references/cross-cutting.md b/references/cross-cutting.md index 90e4358..20cc58a 100644 --- a/references/cross-cutting.md +++ b/references/cross-cutting.md @@ -265,5 +265,6 @@ Commands produce better output when they have data from other commands. This tab | `present` | Profile from `kickoff`, Interview Loops (company context), Prep Brief from `prep` (evaluation criteria, culture, interviewer intel for audience calibration), Storybank (supporting stories) | Profile (uses candidate-provided context instead), Prep Brief (can't calibrate to company evaluation criteria — asks candidate directly), Storybank (can't suggest supporting stories) | Presentation context (topic, audience, time limit) | | `salary` | Profile from `kickoff` (target role, seniority, location), Interview Loops (active companies, existing comp data), Resume Analysis (current level context), JD Analysis from `decode` (comp data if range included), Comp Strategy (previous salary session — build on it) | Profile (gives generic comp coaching without seniority calibration), Interview Loops (loses company-specific context), JD Analysis (misses posted range data), Comp Strategy (starts fresh instead of building) | Comp situation description | | `reflect` | Full coaching state with score history and outcomes | Score history (narrates from limited data) | — | +| `scout` | Profile from `kickoff` (target roles, seniority for fit scoring), Resume Analysis (skills matching), Storybank (competency coverage), Comp Strategy (comp matching when listings include salary) | Resume Analysis (scores role/seniority match only, can't assess skills overlap), Storybank (same — reduced scoring accuracy), Comp Strategy (skips comp factor entirely) | Profile from `kickoff` (target roles, seniority band) + Chrome browser environment + Scout Config (search URLs) | **How to use this**: When running a command that would benefit from missing data, mention the gap briefly and offer to fill it — don't refuse to run. Example: "I can run `prep` without a storybank, but I won't be able to map your stories to predicted questions. Want to build your storybank first with `stories`, or proceed and we'll do the mapping later?"