A local-only Microsoft Edge extension plus a Windows companion that helps you review and fill job-application forms and track your applications. It is deliberately conservative: it fills fields you can see and review, and it never submits, navigates, logs in, or completes anything on your behalf.
By default, all data stays on your machine. There is no JobSeek backend, cloud sync, telemetry, or analytics. Optional Gmail and Copilot features contact Google or GitHub only after separate configuration and explicit consent.
Warning
This project installs a Windows native-messaging host and per-user registry entries. Build from source or use only release artifacts from this repository. Never commit your resume, OAuth client, tokens, database, vault, or browser profile.
- Extract your profile facts once (from a reviewed local resume import) and reuse them to fill application forms after you inspect the proposed values.
- Keep a private, immutable-history application tracker.
- Optionally reconcile ambiguous Gmail messages (read-only) into pending status proposals that you confirm.
The assistant will never:
- Submit an application or click Submit/Next/Apply/Finish.
- Advance application steps or change a queued page after opening the exact user-reviewed URL.
- Log in, enter credentials, or handle SSO on your behalf.
- Solve or bypass a CAPTCHA.
- Complete an assessment, coding test, or timed exercise.
- Attest, sign, agree to, or check legal/authorization/EEO attestations for you.
These actions are structurally absent from the code paths, not merely disabled by a setting. Autofill targets form fields only, after you inspect them.
Edge extension (MV3) ──native messaging──► NativeHost.exe ──named pipe──► Agent.exe
content/UI, no stdio bridge, SQLite + DPAPI vault,
remote code current user only tracker, Gmail (read-only),
optional zero-tool worker
- The extension runs in Edge, holds no secrets, and requests no required host permissions. Broad HTTPS access is optional and granted per-domain by you.
- The native host is a thin stdio ↔ named-pipe forwarder that only accepts the current Windows user.
- The agent is a background process (scheduled task, per-session) that owns the SQLite database, the DPAPI-encrypted document vault, the tracker, the Gmail read-only client, and an optional Copilot worker.
See docs/architecture.md for the full picture.
- Windows 10/11, signed in as the user who will use the assistant.
- Microsoft Edge (Stable).
- PowerShell 7+, .NET 10 SDK, Node.js 24+ / npm 11+, Git.
- (Optional, AI answers) GitHub Copilot access and an authenticated Copilot
runtime supported by
@github/copilot-sdk. - (Optional, Gmail) a Google Desktop app OAuth client saved as
client_secret_*.jsonin this project folder. It is git-ignored and never packaged.
Verify readiness without changing anything:
pwsh -File scripts/check-windows.ps1Clone the repository, then run the commands from its root:
git clone https://github.com/JordanPeng/JobSeek-Assistant.git
cd JobSeek-Assistant
# 1. Install workspace dependencies
npm ci
# 2. Build the production Edge extension (unpacked, MV3)
npm run build --workspace @jobseek/extension
# Output: apps/extension/.output/edge-mv3
# 3. Build, validate, and atomically install the companion bridge
pwsh -File scripts/install-windows.ps1install-windows.ps1 builds everything into a unique staging directory, checks
the artifacts, and only then swaps the live install in one move, refreshes the
native manifest / registry / scheduled task, starts the agent, and health-checks
it. It is safe to re-run at any time, including while the agent is running, and
rolls back to the previous install if the new one is unhealthy. Your data,
vault, database, exports, and OAuth client/token are never touched by an update.
- Open
edge://extensions, enable Developer mode. - Load unpacked → select
apps/extension/.output/edge-mv3. - The extension uses a fixed public key, so it always gets the stable id
eblebceopnkaakmhgdcdbpdaampoildh. The installer registers exactly that id with the native host, so no per-machine id editing is needed.
Stable output path: apps/extension/.output/edge-mv3
Stable extension id: eblebceopnkaakmhgdcdbpdaampoildh
- On first run, import your local resume once and review every extracted fact before saving. Resume import is explicit; nothing is read automatically.
- Attaching your resume/CV as a file to an application is a separate explicit opt-in (off by default).
- Open a job form, open the assistant, and Inspect the page. It proposes values for the fields it recognizes.
- Existing values are preserved by default; sensitive and unknown answers require your confirmation.
- Fill applies the reviewed values; Undo reverts the last fill. Nothing is submitted.
- You may queue domains to prepare (open and inspect) ahead of time. Each domain requires you to grant the optional HTTPS host permission for that domain first; there are no required host permissions and no broad grant.
- Preparation is off by default and never submits anything.
- Applications, events, and statuses are recorded locally with immutable history and undo. Filling a form never sets a status to "applied" by itself.
- If configured with a Desktop OAuth client, the agent can poll Gmail read-only, minimize evidence to short snippets, and create pending status proposals you confirm. Confirmation-before-update is the default.
- Gmail is disconnected after a data restore and must be reconnected. See the
weekly-reconnect caveat in
docs/testing.md.
- An optional, separately installed zero-tool worker can help classify ambiguous emails. It is disabled by default, exposes no filesystem, shell, browser, MCP, database, or Gmail tools to the model, and can only return a suggestion the agent independently validates into a pending proposal.
- With separate explicit consent, the zero-tool Copilot worker can receive your full reviewed profile, extracted active-resume text, and eligible ordinary application questions/options. It prefers GPT-5.6 Luna with high reasoning when available.
- It never receives the answer bank, Gmail data, application notes, browser values, legal/EEO/salary/work-authorization questions, or attestations.
- Supported option answers may be saved for the same company. Generated narratives fill the current page but are saved as AI drafts until you confirm them once. Unsupported questions remain blank.
- Password-encrypted backups (AES-256-GCM) are written only to
%LOCALAPPDATA%\JobSeekAssistant\exports\. Documents are included only if you explicitly opt in. Imports preview schema/version/change counts before any mutation. - Deletion is category-scoped and each category requires an exact typed confirmation phrase.
- Details:
docs/BACKUP_AND_PRIVACY.mdanddocs/privacy.md.
# Remove binaries + registration, preserve all data (default):
pwsh -File scripts/uninstall-windows.ps1
# Also delete ALL local data (requires the exact phrase):
pwsh -File scripts/uninstall-windows.ps1 -DeleteData -Confirmation 'DELETE ALL LOCAL DATA'A bare -DeleteData switch never wipes data on its own.
| Command | Purpose |
|---|---|
pwsh -File scripts/check-windows.ps1 |
Report readiness/versions (no changes). |
pwsh -File scripts/install-windows.ps1 |
Atomic build + install/update. |
pwsh -File scripts/status-windows.ps1 |
Report install/health/task/OAuth type. |
pwsh -File scripts/uninstall-windows.ps1 |
Remove; preserves data by default. |
npm run audit:artifacts |
Fail on secrets/PII/maps/tests/remote code/manifest drift. |
npm run check:release |
Non-mutating release gate (manifest + privacy + audit). |
npm test / npm run test:e2e |
Unit tests / Playwright extension tests. |
pwsh -File scripts/tests/Invoke-ScriptTests.ps1 |
Parser + helper unit tests for the scripts. |
- It fills forms you can see; it does not complete applications.
- ATS coverage is best-effort and adapter-specific (see
docs/compatibility.md). Cross-origin frames, closed shadow DOM, CAPTCHA, auth walls, and assessments are unsupported. - Manual Microsoft Edge Stable acceptance and Gmail consent are not claimed as complete until recorded in the docs; automated Chromium/Playwright results are synthetic-fixture only.
JobSeek Assistant is available under the MIT License.
This public repository contains no resume, OAuth client, credential, token, database, browser profile, or runtime state. Each user supplies and reviews their own local data. The project is not affiliated with Microsoft, GitHub, Google, any employer, or any ATS provider.