Guild is a local-first AI job application automation toolkit. It helps you find roles, score fit, generate tailored CV and cover-letter packets, track applications, and autofill forms while keeping runtime data on your machine.
Guild is designed for people who want leverage without losing control: AI can rank roles and prepare materials, but the final review and Submit click stay with you.
- Scrapes supported job boards and company career pages into a local SQLite database.
- Deduplicates postings and applies configurable keyword, location, seniority, and company filters.
- Scores surviving roles with a pluggable AI driver. The default driver uses
codex exec --json. - Generates a tailored LaTeX CV and cover letter from your structured CV facts.
- Serves a local Next.js dashboard for inbox triage, packet review, apply queue, tracker, settings, and health checks.
- Provides a Chrome MV3 extension that receives a packet from the web app, autofills known fields, attaches PDFs, and highlights fields that still need manual input.
- Stores local runtime data under
GUILD_HOME(default:~/.guild).
Guild does not auto-submit applications. It intentionally stops before the final submit action.
Guild is early open-source software. The core local pipeline, dashboard, CV/cover generation, AI adapter, and extension handoff exist. Job-board and ATS selectors are expected to need maintenance because hiring sites change often.
apps/web Next.js local dashboard
apps/extension Chrome MV3 autofill extension
apps/cli CLI commands for setup, AI smoke tests, cron, scraping, packets
packages/db Prisma + SQLite schema/client
packages/config zod-validated YAML config loaders
packages/scoring prefiltering, prompts, score validation
packages/cv-engine structured CV schema, tailoring validators, LaTeX rendering
packages/cover-letter cover-letter generation and rendering
packages/scrapers board, ATS, company, dedupe, and dispatch logic
packages/shared local paths, logger, shared types
config/ starter profile, filters, AI config, company seed lists
docs/ architecture, configuration, safety, and development docs
- macOS for the launchd cron helper. Most packages are plain Node/TypeScript, but cron and browser-profile assumptions are macOS-first.
- Node.js 22 LTS.
- pnpm 9.12.0 via Corepack.
- Tectonic for LaTeX-to-PDF rendering.
- Google Chrome for the extension/browser profile workflow.
- Codex CLI if using the default AI driver.
brew install tectonic
corepack enable
corepack prepare pnpm@9.12.0 --activate
pnpm installInitialize local CV files and templates:
pnpm guild initThis creates:
~/.guild/data/cv/cv.yaml
~/.guild/data/cv/templates/cv.tex.eta
~/.guild/data/cv/templates/cover.tex.eta
Customize the starter files:
- Edit
config/profile.yamlfor your name, target roles, locations, compensation thresholds, language level, work authorization, and earliest start date. - Edit
config/filters.yamlfor roles you want, roles you want to block, location rules, and blocked companies. - Edit
config/ai.yamlfor the AI driver, model, concurrency, budget, timeout, and retry settings. - Edit
~/.guild/data/cv/cv.yamlwith your real CV facts. Keep claims factual; validators are designed to prevent AI from inventing new bullets.
Then prepare the database:
pnpm --filter @guild/db run migrate:deployStart the local dashboard:
pnpm --filter @guild/web devOpen http://localhost:3000.
pnpm guild init # create starter local CV/template files
pnpm guild ai:test # smoke-test configured AI driver
pnpm guild cv:render-master # render ~/.guild/data/cv/cv.yaml to PDF
pnpm guild demo:full apps/cli/fixtures/sample-job.json
pnpm guild chrome:setup # launch dedicated Chrome profile for logged-in boards
pnpm guild seed:companies de # detect ATS metadata for config/companies.de.txt
pnpm guild pipeline:daily # scrape, dedupe, prefilter, score
pnpm guild install:cron # install daily macOS launchd run
pnpm guild uninstall:cronBuild the extension:
pnpm --filter @guild/extension buildLoad it in Chrome:
- Open
chrome://extensions. - Enable Developer mode.
- Click "Load unpacked".
- Select
apps/extension/dist.
From the Apply Queue in the web app, use "Open & Autofill" to send a one-use packet token to the target application page. The extension fills known fields, attaches packet files when possible, and highlights anything that needs manual input.
You can keep personal config outside the Git checkout:
mkdir -p ~/.guild-config
cp config/profile.yaml ~/.guild-config/profile.yaml
cp config/filters.yaml ~/.guild-config/filters.yaml
cp config/ai.yaml ~/.guild-config/ai.yaml
export GUILD_CONFIG_DIR="$HOME/.guild-config"You can also move runtime data:
export GUILD_HOME="$HOME/.guild-dev"See docs/configuration.md for every supported environment variable and YAML field.
Guild is local-first and human-reviewed:
- Runtime database, generated PDFs, raw scraped HTML, Chrome profile, AI logs, and learned selectors stay under
GUILD_HOME. - Every AI response that crosses a trust boundary is schema-validated.
- Job descriptions are treated as untrusted prompt input.
- CV tailoring can reorder, drop, and lightly rephrase existing bullets, but validators reject invented bullet IDs and large factual changes.
- The extension never clicks final submit for you.
See docs/scraping-and-safety.md.
pnpm test
pnpm typecheck
pnpm buildTests live next to source as *.test.ts. The repo uses TypeScript strict mode, zod validation, Prisma, Vitest, Next.js, and pnpm workspaces.
Contributions are welcome. Start with CONTRIBUTING.md and docs/development.md.
MIT. See LICENSE.