# Start here — next TARS session

## Current state (as of 2026-06-30)

**Bright Data MCP is live and verified.** 74 tools available. See
`2026-06-30_bright-data-mcp-wired-and-first-calls.md` for the setup
narrative and first successful test calls (session_stats + a real SERP
against Westerville school calendar returned real data).

TARS still in **manual-review mode**. The prior session
(`2026-06-29_browser-resolver-manual-status-and-external-data-stack.md`)
shipped the Playwright resolver, subject parsing, and the new
`manual_apply` Application status for Indeed middleman rows.

## Quick sanity check on tool availability

If tools aren't callable at session start, they may need a VSCode
reload (`Ctrl+Shift+P` → Developer: Reload Window). Verify by trying
`mcp__brightdata__session_stats` — costs nothing, returns the current
session's call count.

## User's pending decision — pick one PoC to run first

1. **LinkedIn integration test** (biggest TARS win, addresses the
   long-flagged LinkedIn weakness). Flow:
   ```
   search_engine(query="\"director analytics remote\" site:linkedin.com/jobs", geo_location="us")
   → for each LinkedIn URL returned:
       web_data_linkedin_job_listings(url=<that url>)
   → inspect the JSON schema (esp. what URL is in the "URL"/apply field
     and how much of the description we get)
   → decide on the source wire-up
   ```

2. **Pirate geo-scan PoC** (proves PICRM lead-gen and TARS local
   employer sourcing patterns):
   ```
   search_engine(query="dental practices Westerville OH 43082")
   → for top 3-5 hits, web_data_google_maps_reviews(url=<place URL>)
   → inspect for practice enrichment fields we can carry into PICRM
   ```

3. **Family Agent calendar sync PoC**:
   ```
   scrape_as_markdown(url=<the Westerville 2026-27 calendar PDF URL>)
   → parse no-school / early-release dates
   → propose an upsert into family_events
   ```

Ask which one when the session opens.

## Apify — still pending

User needs to sign up at apify.com (Google OAuth works). Then add MCP:

```bash
claude mcp add apify --scope user --transport http https://mcp.apify.com
```

OAuth flow completes in-browser on first tool call. Blocks pirate
strategy #2 (Workday tenant enumerator via `memo23/workday-jobs-scraper`)
and any other niche Apify marketplace actors.

## Known constraints (do not re-litigate)

- **LinkedIn job listings tool is URL-only** — no keyword search built
  in. Discovery must go through `search_engine` first, then feed URLs
  in. See prior session log for detail.
- **No Indeed live scraper** in Bright Data MCP. Indeed coverage stays
  on `email_monitor` for now.
- **No Google Maps "list businesses in area" tool** — only
  `web_data_google_maps_reviews` per-place. Discovery must go through
  `search_engine` first.
- **Node 20 is required** for the MCP. `/usr/local/bin/node` v20.20.2
  is the working one. Don't accidentally switch back to /usr/bin/node
  v18.
- **$15/month spend cap** across all three apps combined.
- **Indeed apply-popup is not automatable** — Cloudflare wall blocks
  Playwright even via paid services. `manual_apply` pattern already
  handles this. Don't rebuild.

## Files worth knowing

- `src/jobscraper/scrapers/email_monitor.py` — Playwright resolver,
  DEAD_ENDS / EXACT_DEAD_ENDS, subject parsing, applystart synthesis
- `src/jobscraper/worker/autonomous.py` — `_is_indeed_middleman_url`,
  manual-status stamping in `_process_one`
- `src/jobscraper/web/templates/applications.html`,
  `src/jobscraper/web/templates/base.html` — manual status UI
- `docs/PIRATE_SOURCING_STRATEGY.md` — the 7-channel alternative-
  sourcing playbook; #2 (Workday tenant enumerator) blocked on Apify
- Session logs go to `/home/m3ac/genoa-entwuerfe.com/sessions/`
- Auto-memory: `project_external_data_stack.md` for the full stack
  decision including tool inventory
