# Hermes Job Form Fill Chrome Extension

Private, unpacked Chrome extension for the local job-search workflow.

What it does:
- Captures the current application page's form field metadata.
- Sends that metadata to the job-search dashboard backend. The deployed dashboard is `https://jobs.developer1.net`; local development can still use `http://127.0.0.1:8765`.
- The content script captures fields and asks the extension background service worker to call the backend. This avoids Chrome's page-origin/Private Network Access restrictions that can make direct content-script fetches to localhost fail with `Failed to fetch`.
- The backend matches the page to `application-tracker.csv`, reads the profile/rules, optionally asks Hermes AI for extra field mappings, and returns explicit fill actions.
- The extension fills only review-safe values.

What it never does:
- It never submits an application.
- It never uploads a resume/CV/cover letter/file.
- It never answers legal authorization, sponsorship, EEO, disability, veteran, consent, captcha, signature, or date-of-birth fields.
- It never clicks final buttons.

Install from dashboard download:
1. Download the extension zip:
   `https://jobs.developer1.net/downloads/hermes-job-form-fill-chrome-extension.zip`
2. Extract the zip somewhere permanent on your computer, such as `Documents/Hermes Job Form Fill Extension`.
3. Open Chrome: `chrome://extensions/`
4. Enable `Developer mode`.
5. Click `Load unpacked`.
6. Select the extracted `chrome-extension` folder.
7. If a new zip is published later, download it again, replace the extracted folder, then click `Reload` on the extension card in `chrome://extensions/`.

Install from source checkout:
1. Open Chrome: `chrome://extensions/`
2. Enable `Developer mode`.
3. Click `Load unpacked`.
4. Select this directory:
   `<REPO_ROOT>/chrome-extension`
   From Windows Chrome on the developer machine, the WSL UNC path may be:
   `\\\\wsl.localhost\\Ubuntu\\home\\ryan\\job-search\\chrome-extension`

Use from dashboard:
1. Open the dashboard:
   `https://jobs.developer1.net/job-dashboard.html`
   For local development, use:
   `http://127.0.0.1:8765/job-dashboard.html`
2. Click `Open with Form Fill Extension` on a tracked job.
3. The job page opens and the extension shows a session-ready banner if it matches the active session.
4. If this looks like an application form, the extension auto-displays a small in-page floating panel with `Analyze`, `Analyze + Fill`, and `Learn reusable fields` actions.
5. Detection uses stricter checks: it now requires real form-like signals + contextual clues (URL/path or form/action keywords + field semantics) to show the panel, reducing false positives on normal sites.
6. If the in-page panel is hidden/closed, you can still use the extension icon and click `Analyze current page and fill safe fields`.
7. Review everything manually before any submission.

Use on another computer:
- Download `https://jobs.developer1.net/downloads/hermes-job-form-fill-chrome-extension.zip`, extract it, and load the extracted `chrome-extension` folder unpacked in Chrome.
- The extension currently points at `https://jobs.developer1.net`. For local-only development, change `BACKEND` in `content.js` and `background.js` back to `http://127.0.0.1:8765`, then reload the unpacked extension.
- If exposing beyond localhost, keep authentication/access control in front of the dashboard before using it with real personal data.

Hermes AI behavior:
- By default, backend uses a two-step flow: it can use a lightweight model to shortlist which fields need AI answers, then writes the selected long-form field values with GPT 5.5.
- Disable AI calls:
  `JOB_FORM_FILL_USE_HERMES=0 python3 server.py`
- Override model used to **identify** AI fields (optional):
  `JOB_FORM_FILL_HERMES_IDENTIFY_MODEL=gpt-5.3-codex-spark python3 server.py`
- Override model used to **write field data** (default is GPT 5.5):
  `JOB_FORM_FILL_HERMES_FIELD_DATA_MODEL=gpt-5.5 python3 server.py`
- Timeout override:
  `JOB_FORM_FILL_HERMES_TIMEOUT=60 python3 server.py`
- Legacy one-step behavior is still effectively this command when IDENTIFY_MODEL is unset: `hermes chat -Q --toolsets safe` for candidate long-form fields.
