Peregrine by Circuit Forge LLC — LLM-powered job discovery and application pipeline https://circuitforge.tech/software/peregrine
Find a file
pyr0ball 7d1b1319be docs: fix repo URLs and clarify BYOK tier unlocking in feature matrix
Replace git.circuitforge.io/circuitforge/peregrine with the correct
Forgejo URL (git.opensourcesolarpunk.com/Circuit-Forge/peregrine) in
Quick Start, License, and Contributing clone instructions.

Update feature matrix in docs/index.md to show BYOK‡ for AI features
(cover letter, company research, interview prep, survey assistant) with
a footnote explaining the free-with-own-backend model. Previously the
table showed these as Paid-only, which would mislead self-hosters.
2026-05-18 12:05:03 -07:00
.forgejo/workflows fix(ci): restore green CI — libsqlcipher-dev, prep/survey test drift 2026-05-17 21:50:35 -07:00
.gitea/ISSUE_TEMPLATE feat: issue templates, PR template, security redirect 2026-03-02 19:35:06 -08:00
.githooks feat: add pre-commit sensitive file blocker and support request issue template 2026-03-16 11:30:11 -07:00
.github ci: add GitHub Actions CI for public credibility badge 2026-04-15 20:20:13 -07:00
app feat: LLM reply draft, tiers BYOK gate, and messaging API endpoints (#74) 2026-04-20 12:36:16 -07:00
config feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
data feat: add scoring JSONL example and gitignore for benchmark data files 2026-02-26 23:46:29 -08:00
demo feat(demo): add UX designer resume, ATS optimizer snapshots, and company research briefs 2026-04-21 10:14:37 -07:00
docker feat(docker): add /peregrine/ base-path routing in nginx 2026-04-20 20:26:31 -07:00
docs docs: fix repo URLs and clarify BYOK tier unlocking in feature matrix 2026-05-18 12:05:03 -07:00
migrations feat: add training export DB migration and db.py helpers 2026-05-02 23:21:34 -07:00
resume_matcher/apps/backend/app feat(resume-matcher): tier-aware writing model routing via cf-orch 2026-04-26 09:18:55 -07:00
scrapers fix: repair beta installer path for Docker-first deployment 2026-02-25 16:03:10 -08:00
scripts chore(release): v0.9.4 2026-05-08 13:32:10 -07:00
tests chore(release): v0.9.4 2026-05-08 13:32:10 -07:00
tools feat: discard button — removes email from queue without writing to score file 2026-02-27 15:48:47 -08:00
web fix(ci): restore green CI — libsqlcipher-dev, prep/survey test drift 2026-05-17 21:50:35 -07:00
.cliff.toml ci: wire Forgejo Actions workflows and add .cliff.toml 2026-04-05 23:57:43 -07:00
.dockerignore feat: add Docker Compose stack with remote/cpu/single-gpu/dual-gpu profiles 2026-02-24 19:31:57 -08:00
.env.e2e.example chore(e2e): add .env.e2e.example and gitignore .env.e2e 2026-03-16 22:41:24 -07:00
.env.example feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
.gitignore chore: ignore runtime data artifacts 2026-04-15 08:16:14 -07:00
.gitleaks.toml chore: expand peregrine .gitleaks.toml allowlists for history scan 2026-03-07 13:24:18 -08:00
CHANGELOG.md fix: dark/explicit themes now show correct page background 2026-05-08 15:44:33 -07:00
compose.cloud.yml feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
compose.demo.yml chore: update compose.demo.yml for Vue/FastAPI architecture 2026-04-21 10:14:37 -07:00
compose.gpu.yml feat: assign ollama_research to GPU 1 in Docker and Podman GPU overlays 2026-02-27 06:16:04 -08:00
compose.podman-gpu.yml feat: assign ollama_research to GPU 1 in Docker and Podman GPU overlays 2026-02-27 06:16:04 -08:00
compose.test-cfcore.yml feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
compose.yml feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
CONTRIBUTING.md fix: rename setup.sh → install.sh; four installer gaps from #71 2026-04-05 23:33:51 -07:00
dev-api.py feat(config): GPU_SERVER_URL + cf-orch task-routed backends 2026-05-17 20:16:40 -07:00
dev_api.py feat(interviews): add stage signals, email sync, and dismiss endpoints to dev-api 2026-03-19 16:17:22 -07:00
Dockerfile feat: shadow listing detector, hired feedback widget, contacts manager 2026-04-15 08:34:12 -07:00
Dockerfile.cfcore feat: Interview prep Q&A, cf-orch hardware profile, a11y fixes, dark theme 2026-04-14 17:01:18 -07:00
Dockerfile.finetune feat: containerize fine-tune pipeline (Dockerfile.finetune + make finetune) 2026-02-25 16:22:48 -08:00
environment.yml chore: rename conda env job-seeker to cf; update README 2026-03-31 10:39:25 -07:00
HANDOFF-xanderland.md feat: Interview prep Q&A, cf-orch hardware profile, a11y fixes, dark theme 2026-04-14 17:01:18 -07:00
install.sh fix: rename setup.sh → install.sh; four installer gaps from #71 2026-04-05 23:33:51 -07:00
LICENSE-BSL docs: LICENSE-MIT + LICENSE-BSL + updated README for 7-step wizard and current feature set 2026-02-25 12:06:28 -08:00
LICENSE-MIT docs: LICENSE-MIT + LICENSE-BSL + updated README for 7-step wizard and current feature set 2026-02-25 12:06:28 -08:00
Makefile fix: rename setup.sh → install.sh; four installer gaps from #71 2026-04-05 23:33:51 -07:00
manage.sh chore(release): v0.9.4 2026-05-08 13:32:10 -07:00
mkdocs.yml feat: add Plausible analytics to Vue SPA and docs 2026-04-16 21:15:55 -07:00
podman-standalone.sh feat: Interview prep Q&A, cf-orch hardware profile, a11y fixes, dark theme 2026-04-14 17:01:18 -07:00
PRIVACY.md docs: add privacy policy reference 2026-03-05 20:59:01 -08:00
pytest.ini chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00
README.md docs: bump version badge to match latest Forgejo release 2026-05-17 11:19:13 -07:00
requirements.txt chore: bump circuitforge-core dep comment to >=0.8.0 (orch split) 2026-04-04 22:49:03 -07:00
SECURITY.md docs: add SECURITY.md — responsible disclosure policy 2026-03-02 19:26:23 -08:00

Peregrine

Peregrine

Job search pipeline — by Circuit Forge LLC

AI for the tasks the system made hard on purpose.

License: MIT / BSL 1.1 CI Docs Version

Live Demo — no account required, nothing saved  |  Docs  |  Issues

Primary development happens at git.opensourcesolarpunk.com/Circuit-Forge/peregrine. GitHub and Codeberg are push mirrors. Issues and PRs are welcome on any platform.

Dashboard with pipeline stats and discovery controls Job review — approve, skip, or reject with keyboard shortcuts
Apply workspace with LLM-drafted cover letter Interview kanban with company research and recruiter emails

Why Peregrine?

Job search is a second job nobody hired you for. ATS (applicant tracking system) filters designed to reject. Boards that show the same listing eight times. Cover letter number forty-seven for a role that might already be filled. Hours of prep for a phone screen that lasts twelve minutes.

  • Handles the full pipeline. Discover, filter, match, draft, track — one tool, one database, no duct tape.
  • LLM is optional and local-first. Discovery and tracking work with no LLM at all. When you do configure one, it runs on your hardware by default. Cloud inference is a fallback, not the default path.
  • Ghost-post detection baked in. Listings that have been open too long or look like sourcing traps get flagged before you spend time on them.
  • Human approval at every step. LLM drafts cover letters and research briefs; you approve before anything goes anywhere. Peregrine never submits an application on your behalf.
  • Privacy · Safety · Accessibility are architectural constraints, not aspirational copy. No PII (personally identifiable information) logging, no behavioral profiling, no dark patterns.

Quick Start

One-line install:

bash <(curl -fsSL https://git.opensourcesolarpunk.com/Circuit-Forge/peregrine/raw/branch/main/install.sh)

Or clone and run manually:

git clone https://git.opensourcesolarpunk.com/Circuit-Forge/peregrine
cd peregrine
./manage.sh setup
./manage.sh start

Open http://localhost:8502 — the setup wizard walks you through the rest.

macOS / Apple Silicon: install Ollama natively via Homebrew before starting for Metal GPU-accelerated inference. install.sh handles this automatically. Windows: use WSL2 with Ubuntu.

Inference profiles

./manage.sh start                       # remote — no GPU; LLM calls go to Anthropic / OpenAI
./manage.sh start --profile cpu         # local Ollama on CPU (or Metal via native Ollama on macOS)
./manage.sh start --profile single-gpu  # Ollama + vision on GPU 0 (NVIDIA only)
./manage.sh start --profile dual-gpu    # Ollama + vLLM on two NVIDIA GPUs

Features

Feature Tier
Job discovery — LinkedIn, Indeed, Glassdoor, Adzuna, The Ladders Free
Ghost-post detection Free
Resume keyword matching and gap analysis Free
Document storage sync (Google Drive, Dropbox, OneDrive, Nextcloud) Free
Webhook notifications (Discord, Home Assistant) Free
Vue 3 SPA — full UI with onboarding wizard, job board, apply workspace, interview kanban Free
Cover letter generation Free with LLM ¹
Company research briefs Free with LLM ¹
Interview prep and practice Q&A Free with LLM ¹
Survey assistant (culture-fit Q&A, screenshot analysis) Free with LLM ¹
Managed cloud LLM (no API key needed) Paid
Email sync and auto-classification Paid
Job tracking integrations (Notion, Airtable, Google Sheets) Paid
Calendar sync (Google, Apple) Paid
Slack notifications Paid
CircuitForge shared cover-letter model Paid
Voice guidelines (custom writing style and tone) Premium with LLM ¹
Cover letter model fine-tuning — your writing, your model Premium
Multi-user support Premium
Human-in-the-loop operator (CAPTCHAs, phone calls, wet signatures) Ultra

¹ BYOK (bring your own key) unlock: configure any LLM backend — a local Ollama or vLLM instance, or your own API key (Anthropic, OpenAI-compatible) — and all "Free with LLM" and "Premium with LLM" features unlock at no charge.


What Peregrine does not do

Peregrine does not submit job applications for you. You still click apply on the employer's site.

This is intentional. Automated mass-applying is a bad experience for everyone and a trust violation with employers who posted a real role. The submit button is yours. The rest of the grind is ours.


Stack

Layer Technology
Frontend Vue 3 SPA (Vite)
Backend FastAPI + Python
Database SQLite (local, per-user)
Job scraping JobSpy + custom board scrapers
LLM inference Ollama, vLLM, Anthropic, OpenAI-compatible — configurable fallback chain
Vision moondream2 (survey screenshot analysis)
Container Docker / Podman

manage.sh reference

./manage.sh setup               Install Docker/Podman + NVIDIA toolkit
./manage.sh start [--profile P] Preflight check then start services
./manage.sh stop                Stop all services
./manage.sh restart             Restart all services
./manage.sh status              Show running containers
./manage.sh logs [service]      Tail logs (default: app)
./manage.sh update              Pull latest images and rebuild app container
./manage.sh test                Run test suite
./manage.sh prepare-training    Scan docs for cover letters — outputs training JSONL
./manage.sh finetune            Run LoRA fine-tune (requires single-gpu profile or higher)
./manage.sh open                Open the web UI in your browser

Documentation

Full docs at docs.circuitforge.tech/peregrine

Bug reports and feature requests: Forgejo issues


Contributing

Contributions are welcome. The discovery pipeline — scrapers, board integrations, matching logic — is MIT-licensed. Fork it, extend it, send PRs. AI features are BSL 1.1. See the contributing guide for conventions.


License

Peregrine uses a split license:

Component License
Discovery pipeline — scrapers, matching, tracking MIT
LLM features — cover letter generation, company research, interview prep, survey assistant, fine-tuning BSL 1.1 — free for personal non-commercial self-hosting; commercial use or SaaS re-hosting requires a paid license; converts to MIT after four years

Fine-tuned model weights are proprietary and per-user — not redistributable.

© 2026 Circuit Forge LLC