Peregrine by Circuit Forge LLC — LLM-powered job discovery and application pipeline https://circuitforge.tech/software/peregrine
Find a file
2026-03-03 13:17:37 -08:00
.gitea/ISSUE_TEMPLATE feat: issue templates, PR template, security redirect 2026-03-02 19:35:06 -08:00
.githooks feat: commit-msg hook enforces conventional commit format 2026-03-02 19:14:31 -08:00
.github ci: add GitHub Actions pytest workflow 2026-03-02 20:44:33 -08:00
app feat: wire feedback button into app.py sidebar 2026-03-03 12:38:53 -08:00
config feat: add reverse-proxy basepath support (Streamlit MIME fix) 2026-03-01 22:49:29 -08:00
data feat: add scoring JSONL example and gitignore for benchmark data files 2026-02-26 23:46:29 -08:00
demo docs: update tier-system reference with BYOK policy + demo user.yaml 2026-03-02 13:22:10 -08:00
docker feat: add Docker Compose stack with remote/cpu/single-gpu/dual-gpu profiles 2026-02-24 19:31:57 -08:00
docs docs: feedback button implementation plan (8 tasks, TDD) 2026-03-03 11:31:19 -08:00
scrapers fix: repair beta installer path for Docker-first deployment 2026-02-25 16:03:10 -08:00
scripts fix: lazy-import playwright in screenshot_page, fix SQLite connection leak in collect_listings 2026-03-03 12:45:39 -08:00
tests fix: lazy-import playwright in screenshot_page, fix SQLite connection leak in collect_listings 2026-03-03 12:45:39 -08:00
tools feat: discard button — removes email from queue without writing to score file 2026-02-27 15:48:47 -08:00
.dockerignore feat: add Docker Compose stack with remote/cpu/single-gpu/dual-gpu profiles 2026-02-24 19:31:57 -08:00
.env.example chore: add playwright dep and Forgejo env config for feedback button 2026-03-03 11:38:14 -08:00
.gitignore feat: DEMO_MODE — isolated public menagerie demo instance 2026-03-02 11:22:38 -08:00
CHANGELOG.md docs: mark cover letter refinement complete in backlog + changelog 2026-02-25 14:44:50 -08: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.menagerie.yml feat: DEMO_MODE — isolated public menagerie demo instance 2026-03-02 11:22:38 -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.yml fix: pass FORGEJO env vars into app container 2026-03-03 13:17:37 -08:00
CONTRIBUTING.md docs: add CONTRIBUTING.md with BSL policy and CLA note 2026-03-02 19:26:25 -08:00
Dockerfile feat: add Docker Compose stack with remote/cpu/single-gpu/dual-gpu profiles 2026-02-24 19:31:57 -08:00
Dockerfile.finetune feat: containerize fine-tune pipeline (Dockerfile.finetune + make finetune) 2026-02-25 16:22:48 -08:00
environment.yml fix: resume CID glyphs, resume YAML path, PyJWT dep, candidate voice & mission UI 2026-02-26 12:32:28 -08: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 feat: inject DUAL_GPU_MODE sub-profile in Makefile; update manage.sh help 2026-02-27 06:18:34 -08:00
manage.sh feat: inject DUAL_GPU_MODE sub-profile in Makefile; update manage.sh help 2026-02-27 06:18:34 -08:00
mkdocs.yml docs: mkdocs wiki — installation, user guide, developer guide, reference 2026-02-25 12:05:49 -08:00
pytest.ini chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00
README.md docs: add canonical-source banner and CI badge to README 2026-03-02 20:44:23 -08:00
requirements.txt chore: add playwright dep and Forgejo env config for feedback button 2026-03-03 11:38:14 -08:00
SECURITY.md docs: add SECURITY.md — responsible disclosure policy 2026-03-02 19:26:23 -08:00
setup.sh feat: setup.sh activates .githooks on clone 2026-03-02 19:17:05 -08:00

Peregrine

Primary development happens at git.opensourcesolarpunk.com — GitHub and Codeberg are push mirrors. Issues and PRs are welcome on either platform.

License: BSL 1.1 CI

AI-powered job search pipeline — by Circuit Forge LLC

"Don't be evil, for real and forever."

Automates the full job search lifecycle: discovery → matching → cover letters → applications → interview prep. Privacy-first, local-first. Your data never leaves your machine.


Quick Start

1. Clone and install dependencies (Docker, NVIDIA toolkit if needed):

git clone https://git.opensourcesolarpunk.com/pyr0ball/peregrine
cd peregrine
./manage.sh setup

2. Start Peregrine:

./manage.sh start                          # remote profile (API-only, no GPU)
./manage.sh start --profile cpu            # local Ollama (CPU, or Metal GPU on Apple Silicon — see below)
./manage.sh start --profile single-gpu    # Ollama + Vision on GPU 0  (NVIDIA only)
./manage.sh start --profile dual-gpu      # Ollama + Vision + vLLM (GPU 0 + 1)  (NVIDIA only)

Or use make directly:

make start                        # remote profile
make start PROFILE=single-gpu

3. Open http://localhost:8501 — the setup wizard guides you through the rest.

macOS / Apple Silicon: Docker Desktop must be running. For Metal GPU-accelerated inference, install Ollama natively before starting — setup.sh will prompt you to do this. See Apple Silicon GPU below. Windows: Not supported — use WSL2 with Ubuntu.

Installing to /opt or other system directories

If you clone into a root-owned directory (e.g. sudo git clone ... /opt/peregrine), two things need fixing:

1. Git ownership warning (fatal: detected dubious ownership) — ./manage.sh setup fixes this automatically. If you need git to work before running setup:

git config --global --add safe.directory /opt/peregrine

2. Preflight write access — preflight writes .env and compose.override.yml into the repo directory. Fix ownership once:

sudo chown -R $USER:$USER /opt/peregrine

After that, run everything without sudo.

Podman

Podman is rootless by default — no sudo needed. ./manage.sh setup will configure podman-compose if it isn't already present.

Docker

After ./manage.sh setup, log out and back in for docker group membership to take effect. Until then, prefix commands with sudo. After re-login, sudo is no longer required.


Inference Profiles

Profile Services started Use case
remote app + searxng No GPU; LLM calls go to Anthropic / OpenAI
cpu app + ollama + searxng No GPU; local models on CPU. On Apple Silicon, use with native Ollama for Metal acceleration — see below.
single-gpu app + ollama + vision + searxng One NVIDIA GPU: cover letters, research, vision
dual-gpu app + ollama + vllm + vision + searxng Two NVIDIA GPUs: GPU 0 = Ollama, GPU 1 = vLLM

Apple Silicon GPU

Docker Desktop on macOS runs in a Linux VM — it cannot access the Apple GPU. Metal-accelerated inference requires Ollama to run natively on the host.

setup.sh handles this automatically: it offers to install Ollama via Homebrew, starts it as a background service, and explains what happens next. If Ollama is running on port 11434 when you start Peregrine, preflight detects it, stubs out the Docker Ollama container, and routes inference through the native process — which uses Metal automatically.

To do it manually:

brew install ollama
brew services start ollama          # starts at login, uses Metal GPU
./manage.sh start --profile cpu     # preflight adopts native Ollama; Docker container is skipped

The cpu profile label is a slight misnomer in this context — Ollama will be running on the GPU. single-gpu and dual-gpu profiles are NVIDIA-specific and not applicable on Mac.


First-Run Wizard

On first launch the setup wizard walks through seven steps:

  1. Hardware — detects NVIDIA GPUs (Linux) or Apple Silicon GPU (macOS) and recommends a profile
  2. Tier — choose free, paid, or premium (or use dev_tier_override for local testing)
  3. Identity — name, email, phone, LinkedIn, career summary
  4. Resume — upload a PDF/DOCX for LLM parsing, or use the guided form builder
  5. Inference — configure LLM backends and API keys
  6. Search — job titles, locations, boards, keywords, blocklist
  7. Integrations — optional cloud storage, calendar, and notification services

Wizard state is saved after each step — a crash or browser close resumes where you left off. Re-enter the wizard any time via Settings → Developer → Reset wizard.


Features

Feature Tier
Job discovery (JobSpy + custom boards) Free
Resume keyword matching Free
Cover letter generation Paid
Company research briefs Paid
Interview prep & practice Q&A Paid
Email sync & auto-classification Paid
Survey assistant (culture-fit Q&A) Paid
Integration connectors (Notion, Airtable, Google Sheets, etc.) Paid
Calendar sync (Google, Apple) Paid
Cover letter model fine-tuning Premium
Multi-user support Premium

Email Sync

Monitors your inbox for job-related emails and automatically updates job stages (interview requests, rejections, survey links, offers).

Configure in Settings → Email. Requires IMAP access and, for Gmail, an App Password.


Integrations

Connect external services in Settings → Integrations:

  • Job tracking: Notion, Airtable, Google Sheets
  • Document storage: Google Drive, Dropbox, OneDrive, MEGA, Nextcloud
  • Calendar: Google Calendar, Apple Calendar (CalDAV)
  • Notifications: Slack, Discord (webhook), Home Assistant

CLI Reference (manage.sh)

manage.sh is the single entry point for all common operations — no need to remember Make targets or Docker commands.

./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 + rebuild app container
./manage.sh preflight           Check ports + resources; write .env
./manage.sh test                Run test suite
./manage.sh prepare-training    Scan docs for cover letters → training JSONL
./manage.sh finetune            Run LoRA fine-tune (needs --profile single-gpu+)
./manage.sh open                Open the web UI in your browser
./manage.sh clean               Remove containers, images, volumes (asks to confirm)

Developer Docs

Full documentation at: https://docs.circuitforge.io/peregrine


License

Core discovery pipeline: MIT AI features (cover letter generation, company research, interview prep, UI): BSL 1.1

© 2026 Circuit Forge LLC