Commit Graph
37 Commits
Author SHA1 Message Date
dennisthiessen a22c6ff597 feat(resume): add Google Business Home application package 2026-07-27 20:21:09 +02:00
dennisthiessen fe5f24704f feat: rebuild evidence-first application workflow 2026-07-27 17:56:15 +02:00
dennisthiessen c24892f381 Mark QuantCo Cloud Engineer as rejected in decision log.
Aligns scout state with Active Sessions (rejected 2026-06-15, no interview).
2026-07-18 21:38:34 +02:00
dennisthiessen 43f4b88c5b Improve job scout location policy, reliability, and add NATO Taleo.
Tighten eligibility to CH/DK/Europe-remote (Equinor Norway-only, NATO DK+NO), add Taleo adapter, parallel API fetches, atomic state writes, and empty-board warnings. Log NATO AI Engineer as applied and Architect as skip.
2026-07-18 21:33:06 +02:00
dennisthiessenandClaude Sonnet 5 d0525cc437 chore(applications): archive BIS + NATO submitted packages, ignore tmp/
Add BIS Basel and NATO JWC Stavanger application output (resume/CV, cover letter,
session file, critique) plus the Bundeswehr experience file backing the NATO
package; update session status tables in AGENTS.md/CLAUDE.md; record two new
Bash allowlist entries for the job scout venv. tmp/ is scratch working files,
now gitignored.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 21:03:45 +02:00
dennisthiessenandClaude Sonnet 5 3ad39117d6 feat(job_scout): add Equinor/BFH, fix Windows SSL cert errors, tighten remote-location matching
Equinor (Workday) and BFH (Bern, playwright) wired up as new sources; artificial
intelligence/analytics-engineer keywords added so int'l-org listings (BIS) stop scoring
as noise. certifi-backed SSL context works around Workday certs failing verification
against a stale Windows root store.

location_matches() previously treated "remote + any single named EU country" as
CH-eligible, which let single-country residency-locked listings (e.g. Databricks'
"Remote - United Kingdom") pass as if they were open EU-wide. Now requires either a
pan-regional keyword (Europe/EMEA/Global/Worldwide) or 2+ distinct countries named.
Denmark is carved out as its own always-on relocation category (on-site or remote,
any company), replacing the previous Databricks-only opt-in.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 21:01:03 +02:00
dennisthiessen 9645dbca8d Add PostFinance to job scout 2026-07-10 23:19:22 +02:00
dennisthiessenandClaude Fable 5 b4fe2505ef chore(repo): Codex skills mirror, scout scratch-dump ignores, allowlist
- AGENTS.md + .agents/skills/: Codex-compatible mirror of the CLAUDE.md
  instructions and the .claude skill set.
- .gitignore: ignore job_scout/jd_*.txt and *_verify.txt one-off
  Playwright scrape dumps (applied JDs are archived in JDs/ + output/).
- settings.local.json: permission allowlist churn from recent sessions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:52 +02:00
dennisthiessenandClaude Fable 5 e286c6a9bb docs(applications): Google DE interview prep brief + STAR stories
Prep materials for the Google Senior Data Engineer (Merchant Data
Science) process after passing the Hiring Assessment 2026-06-20:
interview prep brief + STAR story bank alongside the session files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:43 +02:00
dennisthiessenandClaude Fable 5 127e2dbf87 feat(job_scout): score the forward-deployed/field/resident lane
Adds positive keywords (forward deployed, field engineer, resident
architect/engineer, customer engineer) and title-filter entries so
vendor deploy-to-customer roles surface — the lane matched to
user_international_mobility (intl scope from Bern, travel-OK, no
relocation). Bare "resident" stays title-filter-only to avoid
re-opening the pre-sales-SA overscoring trap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:42 +02:00
dennisthiessenandClaude Fable 5 23e2185aa0 chore(kb): upgrade BS-5 to verified TAF 2022 Spotfire platform ownership
BS-5 was a thin "C# extensions" note; now records the verified reality
(Playwright scrape of community.spotfire.com, 2026-06-15): co-ownership
of Bosch's Spotfire analytics platform and the TAF 2022 co-presentation
"Understanding Spatial Variability in Semiconductor Products with
Spotfire Map Charts". Reframing bumped to MED-HIGH for BI-bridged JDs;
new 1L/2L variants. First consumed by the Microsoft ISE package (merged
BS-3+BS-5 bullet; TAF talk reserved for the CL).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:42 +02:00
dennisthiessenandClaude Fable 5 2ee509bb34 feat(applications): submit Microsoft ISE Senior SWE Zürich (2026-07-03)
Microsoft — Senior Software Engineer, Industry Solutions Engineering
(ISE), Zürich, req 200040836. Applied 2026-07-03, ~7 days after posting.

- Package: 2pp resume (18 bullets) + 1pp CL (299 words), critiqued to
  85.8/100 (Pass 2). Same-day cycle: verbatim Eightfold JD fetch ->
  build -> critique 83.3 -> Tier 1+2 fixes -> 85.8 -> submit.
- Fixes applied: "model evaluation" completes the JD's RQ triple
  verbatim; open-source stack labeled in skills; summary gains LLM +
  cross-functional, on-call bound to Component Owner (precision).
- CL hooks all web-verified: ISE Engineering Fundamentals Playbook,
  SharePoint-permissions-to-RAG blog, USD 400M Swiss datacenter.
- Logs 'applied' in job_scout decisions.json, flips the CLAUDE.md
  Active Sessions row to SENT, archives the JD under JDs/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:28 +02:00
dennisthiessenandClaude Fable 5 ad5422acb0 chore(applications): Kraken SRE rejected; Google DE advanced to Hiring Assessment
2026-06-17 status updates:
- Kraken (Payward) SRE, AI Agents -> CLOSED, REJECTED (no interview).
  Honest infra/SRE gaps (Terraform, SRE title, agent frameworks) the
  likely filter. decisions.json -> rejected.
- Google Senior Data Engineer -> ADVANCED. Resume cleared recruiter
  screen; invited to ~30-min Google Hiring Assessment (work-styles/SJT).
  Open item at recruiter stage: clarify L4/L5 + comp clears 180k+.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-17 13:53:09 +02:00
dennisthiessenandClaude Fable 5 cad2c230eb feat(applications): submit Google Sr Data Engineer + Kraken SRE AI Agents (2026-06-15)
Two applications sent and finalized on 2026-06-15:

- Google - Senior Data Engineer (Merchant Data Science, Zurich), 85.5/100.
  Tier-1 scope fix + both Tier-2 polish applied: re-scoped the Swisscom
  migration claim in resume B2 + CL P2 (Scope-Discipline), added project-
  delivery vocab (B4), and JD-exact 'distributed data processing' (B5).
- Kraken (Payward) - SRE, AI Agents (remote, CH-eligible), 87.2/100.
  Finalized as-is; crypto-native + production-ML edge, honest infra gaps.

Logs both as 'applied' in job_scout/state/decisions.json and flips their
CLAUDE.md Active Sessions rows to SENT. Open item for both: confirm level
and comp clear the 180k+ all-in bar at the recruiter stage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 19:57:18 +02:00
dennisthiessenandClaude Opus 4.8 d0350ca668 chore(job_scout): log Snowflake Sr SWE Enterprise as applied
Records the 2026-06-06 application (Observe by Snowflake, ~86/100) in the
decision log so it stops resurfacing as a new match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:53:49 +02:00
dennisthiessenandClaude Opus 4.8 b4b5e3fbe1 chore(resume): shelve Isovalent Data Engineer package (role pulled, ~86/100)
Finalized package retained for reuse; role closed (Cisco scrape 2026-06-02:
not on board, Recruitee link dead). PDFs/build artifacts gitignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:46:11 +02:00
dennisthiessenandClaude Opus 4.8 d576254971 docs(skills): enforce JD integrity — real posting verbatim + Playwright recipe
Add the JD Integrity section to shared_ops (no reconstructed/inferred JDs;
WebFetch is JS-blind on careers boards; scrape JS-gated postings via the
job_scout Playwright venv; STOP and ask if the real text is unobtainable).
Wire the rule into /make-resume and /critique. Allow cisco/bkw WebFetch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:46:10 +02:00
dennisthiessenandClaude Opus 4.8 7ed9e5b615 feat(job_scout): add data-infra adapters + Oracle manual-check
Add Databricks, Snowflake, Datadog, Elastic, dbt Labs (greenhouse/ashby,
title-filtered). Snowflake slug surfaced the Zürich Observe SWE role.
HashiCorp dropped (IBM acquisition killed public boards); Oracle moved to
MANUAL_CHECK (ORC SPA resists scraping; REST endpoint documented in code).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:46:10 +02:00
dennisthiessenandClaude Opus 4.8 dd2f0308c5 feat(resume): Snowflake Sr SWE Enterprise (Observe) package (sent, ~86/100)
Observability-spine framing: Bosch telemetry/observability PoC promoted to
lead, Swisscom Iceberg lakehouse + on-call/RCA. Real Ashby JD (verbatim).
Tier 1+2 critique fixes applied; Vizrt low-latency skipped per user.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:44:30 +02:00
dennisthiessenandClaude Opus 4.8 09316a73cf feat(resume): QuantCo Cloud Engineer package (sent, ~82/100)
- Full resume + cover letter + critique for QuantCo Cloud Engineer (Zürich)
- Applied Tier 1+2 critique fixes: corrected education dates, hedged Data
  Mesh ownership, sharpened tagline/summary, added SRE token
- Mark QuantCo Cloud Engineer + Equinor as sent in trackers
- decisions.json: QuantCo Cloud Engineer -> applied

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:40:40 +02:00
dennisthiessenandClaude Opus 4.8 8a5955c0a8 feat(job_scout): decision log + report annotations
Track per-job decisions across runs so we don't re-evaluate roles.

- state/decisions.json (keyed by URL: company/title/decision/note/date), now
  git-tracked while seen_jobs.json stays local
- --decide "<url>" <status> [note] records a decision; --hide-decided gives an
  undecided-only view; report tags each role inline with its decision
- usage docstring updated
- seed 18 decisions (9 shortlist, 7 skip, 1 paused, 1 maybe); flags Google Staff
  FDE GenAI as the paused prior session

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:30:49 +02:00
dennisthiessenandClaude Opus 4.8 da66443aa8 feat(job_scout): add 6 Swiss/EU companies, new adapters, and scan-stats table
Automate Palantir, QuantCo, Swissgrid, RUAG, SBB, BKW (drop BFH/Dialectic);
25 companies automated, 0 manual.

- adapters: lever (Palantir/QuantCo), generic json (Swissgrid), sbb, bkw
- fetch_playwright: optional ?page=N pagination (page_param/max_pages) for RUAG
- location_matches: treat pan-EU "Europe"/"EMEA" postings as eligible
- per-company _score_floor so pre-filtered German-language boards stay visible
- POSITIVE_KEYWORDS: add data scientist / data science (medium)
- report: scan-stats table (scraped / CH-remote / match>=2 / newest / time) + totals

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:15:22 +02:00
dennisthiessenandClaude Opus 4.7 49ba42138d chore(job_scout): drop Sygnum, Vitol, ClickHouse (Glassdoor culture/comp red flags)
- Sygnum: 3.4 / 51% recommend, comp 2.3/5 (structurally below 180k bar)
- Vitol: 3.5 / 55% recommend, grueling-hours/blame-culture flag, WLB 2.5
- ClickHouse: 3.3 / 36% recommend, WLB 2.6, multiple toxic-culture reviews

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 16:20:34 +02:00
dennisthiessenandClaude Opus 4.7 0c098daadf feat(job_scout): score devops/cloud/platform + technical-architect roles
Add positive keywords for the core DevOps/data-platform/cloud lane and
technical-architect titles (cloud/data/platform architect) that previously
scored 0 and surfaced only via the generic "senior" term. Rebalances rankings
so hands-on engineering roles aren't buried under pre-sales "Solutions
Architect" + crypto keyword stacking.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 15:46:14 +02:00
dennisthiessenandClaude Opus 4.7 54d8ec7a5e chore: add Swisscom SW-7 data mesh achievement, Google FDE drafts, scout perms
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 14:25:23 +02:00
dennisthiessenandClaude Opus 4.7 f00b9df59d fix(equinor): correct education dates on resume
B.Eng. Oct 2009-Oct 2012, M.Eng. Apr 2012-Oct 2013 (overlap intentional).
Log correction in config.md KB Corrections.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:42:48 +02:00
dennisthiessenandClaude Opus 4.7 e61c4bac6d feat(equinor): tailored AI Architect resume + cover letter package
Pass 2 critique 80.0/100 (honest-stretch reach app, converged near ceiling).
Includes accuracy fix: Swisscom Data Mesh reframed from sole-build to
company-wide migration contributed to (hedged verbs); orchestration +
reference-architecture surfaced; removed -ing bullet trailers; CL trimmed
to 300 words with matching ownership hedge.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 20:58:58 +02:00
dennisthiessenandClaude Opus 4.7 1e83966049 fix(job_scout): word-boundary keyword matching + title-weighted scoring
Two scoring bugs inflated the rankings:
- Substring matching: 'rag' matched sto[rag]e / tet[rag]on, 'intern'
  matched inte[rnal], 'lead' matched [lead]ership. Roche's staff
  restaurant and Cisco Tetragon roles scored as fits. Now keywords must
  not be flanked by alphanumerics (c#/.net/c++ keep matching).
- Body boilerplate: every Kraken post mentions crypto/blockchain/trading,
  so sales/PM/design roles scored as high as engineering ones. Title
  matches now score full weight, body-only matches half (min 1);
  negatives still count fully anywhere.

Strong-fit count drops 13 -> 5; the bogus 'intern' negatives and rag
false positives are gone. Shared _kw_in() also backs the title filter.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 21:37:00 +02:00
dennisthiessenandClaude Opus 4.7 74dcc244b8 feat(job_scout): add trading/quant-finance scoring keywords
Dennis is interested in trading roles (energy/finance/crypto), but the
scorer had no terms for them, so trading-tech roles scored 0 and got
buried. Add a trading/quant cluster (trading, trader, quant, market
data, low-latency, FIX protocol, brokerage, commodity, execution) plus
singular "solution architect" and adjacent stack (C#, .NET).

Bitcoin Suisse's Solution Architect Trading now scores 4 (medium) on
title alone, up from 0.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:15:18 +02:00
dennisthiessenandClaude Opus 4.7 b44360f99a feat(job_scout): automate Bitcoin Suisse via onlyfy adapter
Bitcoin Suisse's careers page is a JS-rendered Next.js SPA, but the
underlying onlyfy.jobs ATS exposes a plain HTML job list at
candidate/job/ajax_list (title + location per card). Add an onlyfy
adapter that parses it — no headless browser needed. Surfaces the 3
current Zug roles correctly (CH filter + pre-dedup location filtering
keep the Swiss posting over its Bratislava/Copenhagen cross-posts).

MANUAL_CHECK is now empty (all 22 target companies automated), so the
report's manual-check section is suppressed when the list is empty.
Coverage notes updated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:06:31 +02:00
dennisthiessenandClaude Opus 4.7 f4d2c6c969 chore(job_scout): drop AMINA Bank from MANUAL_CHECK (poor Glassdoor)
AMINA Bank rates poorly on Glassdoor and isn't worth tracking. Remove
its manual-check entry, leaving Bitcoin Suisse as the only manual source.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:50:38 +02:00
dennisthiessenandClaude Opus 4.7 913a5de5ac chore(job_scout): drop Coinbase from MANUAL_CHECK (hiring freeze)
Coinbase cut ~14% of staff and is not actively hiring; remove its
manual-check entry. The getro Coinbase Ventures source covers portfolio
companies only, not Coinbase itself, so Coinbase is now off the radar
until they reopen. Now 2 manual sources (AMINA, Bitcoin Suisse).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:48:56 +02:00
dennisthiessenandClaude Opus 4.7 cb27fa3ecf feat(job_scout): add getro adapter for Coinbase Ventures web3 network
Add a getro adapter (POST JSON search API) and wire up the Coinbase
Ventures portfolio talent network (collection 1625), CH + eng-title
filtered. Note this covers portfolio companies (Ashby, Notion, VALR,
World, ...), not Coinbase itself, which doesn't list on its Ventures
board — Coinbase-the-employer stays in MANUAL_CHECK.

Also clean up stale comments: drop Sonova (MedTech, off-thesis, dead
scrape) from MANUAL_CHECK, remove the dangling BIS comment now that
BIS is automated via rss, and refresh the adapter-coverage notes and
module docstring to the current 21-automated / 3-manual state.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:47:29 +02:00
dennisthiessenandClaude Opus 4.7 1331a7f1f5 feat(job_scout): add RSS adapter, automate BIS vacancies
- Generic RSS/RDF feed parser (handles RSS 1.0 namespaced items + RSS 2.0)
- BIS (Bank for International Settlements, Basel) promoted from manual-check
  to an automated source via its vacancies RSS feed — commutable from Bern,
  salary net of Swiss tax. Scout now 20 automated + 4 manual-check.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 09:55:50 +02:00
dennisthiessenandClaude Opus 4.7 3b07c4b900 feat(job_scout): expand to 19 companies + new adapters, filters, dedup
- New SmartRecruiters adapter (EU energy/commodity firms)
- Add data-infra US tech (Confluent/GitLab/ClickHouse/Grafana) and
  commodity/energy traders (MET Group/Vitol/Louis Dreyfus)
- Headless stealth (navigator.webdriver mask + chrome fingerprint) — unblocks
  Google; also enabled Meta and Cisco scraping
- Tight title prefilter + title-only scoring + cross-region dedup so
  high-volume all-remote boards don't flood the report
- Remove Canonical (below-market pay, poor culture) and IBM Research
  (research-scale pay below bar; weak data-eng fit) per reputation review

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 12:38:35 +02:00
dennisthiessenandClaude Opus 4.7 eeec77b1e3 feat: add job_scout — automated CH job-board scraper for target companies
Pulls fresh postings from the quarterly target-company list, filters by Swiss
location / EU-remote eligibility, scores fit against profile keywords, tracks
seen jobs, and writes a markdown report.

Adapters (13 companies automated):
- Workday: NVIDIA, Novartis
- Ashby: Kraken, OpenAI
- Greenhouse: Anthropic
- PCSX (Eightfold): Microsoft
- WordPress AJAX: Sygnum
- Playwright (headless + stealth): Google, Apple, Meta, Roche, Cisco, IBM

4 companies (Sonova, Coinbase, AMINA, Bitcoin Suisse) resist automation
(server-side bot blocks / JS widgets) and surface as a manual-check checklist.

venv, reports/, and state/ are gitignored; only scout.py + requirements.txt
are tracked.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 10:12:27 +02:00
dennisthiessen 1fde4c6b34 first commit 2026-05-21 11:07:51 +02:00