-
v0.8.4 — Cloud per-user profile fix + Vue SPA for all tiers
StableSome checks failedCI / test (push) Failing after 30sreleased this
2026-04-02 17:47:26 -07:00 | 20 commits to main since this releaseBug Fixes
Cloud: cover letter used wrong user's profile
All cloud users were getting the default user's name, voice, and mission preferences in their generated cover letters.
generate()now acceptsuser_yaml_path;task_runnerderives it from the per-user config directory. The fix flows through_build_system_context,_build_mission_notes,detect_mission_alignment,build_prompt, and_trim_to_letter_end.Apply Workspace: hardcoded config paths in cloud mode
4_Apply.pywas loading the user profile and resume YAML from the globalconfig/beforeresolve_session()ran. Both paths now useget_config_dir()after session resolution, so each cloud user sees their own resume.Changes
- Vue SPA open to all tiers — no longer gated behind beta flag
- LLM model candidates — Qwen2.5-3B first, Phi-4-mini fallback; cf_orch block added to vllm config
- Preflight —
vllmremoved from Docker adoption list (managed by cf-orch)
See CHANGELOG.md for full history.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.7.1 — Demo/wizard ui-switcher fixes
StableAll checks were successfulCI / test (push) Successful in 1m35sreleased this
2026-03-24 12:31:49 -07:00 | 116 commits to main since this releaseBug fixes
Demo instance blank screen
The demo instance (
demo.circuitforge.tech/peregrine) was briefly showing Streamlit, then switching to a blank Vue SPA. Root cause:demo/config/user.yamlhadui_preference: vue, andsync_ui_cookie()bypassed the paid-tier gate in demo mode — so it happily navigated to the Vue SPA nginx container, which has no demo data wiring.Fix:
sync_ui_cookie()now has an explicit early guard that forcespref = streamlitwheneverDEMO_MODE=true, before any tier or preference logic runs.demo/config/user.yamlalso reset tostreamlitas belt-and-suspenders. Vue demo mode is tracked in #46.Cloud users stuck in Streamlit wizard
Cloud users with
ui_preference: vueset (e.g. provisioned manually) were landing in the Streamlit wizard instead of being redirected to Vue. Root cause:sync_ui_cookie()was only called afterpg.run()inapp.py, but the wizard gate calledst.stop()first — so the cookie/redirect never fired.Fix:
sync_ui_cookie()is now called inside the wizard gate block, beforest.stop().Self-service free key provisioning 0.6.0
Added to the CircuitForge website (separate repo):
/api/account/claim-free-key— idempotent endpoint; calls Heimdall/admin/provisionso users can recover from auto-provision failures at signup without contacting support.- Account page claim card — shown when a Peregrine key is missing; one-click activation with success/error state.
E2E tests (website) 0.5.0
signup-smoke.spec.ts— happy path: register → Heimdall provisions free key within 8s → login → product card visible on/accountclaim-key-recovery.spec.ts— sad path: blocks Heimdall provision at signup, navigates to/account, asserts claim card visible, clicks it, asserts success
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
v0.4.1 — Jobgether Integration
StableSome checks failedCI / test (push) Failing after 32sreleased this
2026-03-15 09:45:51 -07:00 | 162 commits to main since this releaseChanges
- Jobgether filter — all scrapers now silently drop listings with
company = "Jobgether"viaconfig/blocklist.yaml; no more ghost employer entries in the pipeline - Jobgether URL scraper —
_scrape_jobgether()inscrape_url.pyhandles directjobgether.comURLs; Playwright-based with URL slug company extraction as fallback (bypasses previous 403 errors on manual imports) - Cover letter recruiter framing — when
source = "jobgether", cover letter prompts now address the Jobgether recruiter: "Your client at {company} will appreciate..." or "Your client will appreciate..." when employer is anonymous
Notes
A full Jobgether discovery scraper was investigated but found not viable — Cloudflare Turnstile blocks all headless browsers and
robots.txtblocks all bots. The email digest → paste URL → slug extraction flow covers the practical use case.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
- Jobgether filter — all scrapers now silently drop listings with
-
v0.4.0 — LinkedIn Import
StableSome checks are pendingCI / test (push) Waiting to runreleased this
2026-03-13 11:28:03 -07:00 | 188 commits to main since this releaseWhat's New
🔗 LinkedIn Profile Import
One-click import from a public LinkedIn profile URL (no login required) or from a LinkedIn data export zip. Staged to
linkedin_stage.jsonso scraping only happens once per session.- URL scrape via Playwright headless Chrome — no credentials, user-initiated only
- Export zip fallback (ToS-compliant) for when scraping is blocked
- Extracts: experience, education, skills, certifications, career summary
- Available in first-run wizard (step 3) and Settings → Resume Profile
- Available on all tiers including Free
🐞 Bug Fixes
- Cloud mode perpetual onboarding loop — wizard now correctly detects per-user
wizard_completeflag instead of checking a shared repo path - Cloud session redirect — unauthenticated users now redirect to login instead of seeing a raw error
- Removed remaining AIHawk UI references
🐳 Docker
- Playwright Chromium is now installed in the Docker image (
playwright install chromium) - Rebuild required:
docker compose build --no-cache app && ./manage.sh restart
Full changelog: CHANGELOG.md
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
v0.3.0 — Feedback, BYOK Privacy Warning, LLM Suggest
StableSome checks are pendingCI / test (push) Waiting to runreleased this
2026-03-06 16:02:33 -08:00 | 218 commits to main since this releaseWhat's new in v0.3.0
Feedback Button
- In-app issue reporting with screenshot paste support
- Posts directly to Forgejo as structured issues
- Available from the sidebar on every page
BYOK Privacy Warning
- Cloud backend detection engine (
scripts/byok_guard.py) — classifies backends as cloud or local by type, URL heuristic, and opt-outlocal: trueflag - One-time acknowledgment required in Settings when enabling a new cloud LLM backend
- Shows a data inventory: exactly what leaves your machine per feature, what stays local always
- Provider privacy policy links (Anthropic, OpenAI)
- Acknowledgment state persisted to
config/user.yaml— re-warns only for newly added providers - Persistent amber sidebar badge on every page when any cloud backend is active
LLM Suggest in Settings
- Suggest search terms from your resume (job titles, skill keywords, and exclude terms)
- Suggest resume keywords for skills gap analysis
- LLM Suggest button in Settings → Search → Skills & Keywords
Other Additions
- Backup/restore script (
scripts/backup.py) with multi-instance and legacy support PRIVACY.mdshort-form privacy notice
Fixes
- Settings widget crash on rerun
- Docker service controls in Settings → System tab
DEFAULT_DBnow correctly respectsSTAGING_DBenv var- Cover letter refinement
max_tokenskwarg propagation
Privacy & Security
- Full test suite anonymized — fictional "Alex Rivera" replaces all real personal data in test fixtures
- Complete PII scrub from git history: real name, email address, and phone number removed from all prior commits via
git filter-repo
See CHANGELOG.md for full details.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
peregrine-v0.3.0.tar.gz
2 downloads · 495 KiB
-
v0.1.0 — First Beta Pre-release
released this
2026-02-25 16:44:59 -08:00 | 320 commits to main since this releasePeregrine v0.1.0 — First Beta
AI-powered job discovery and application pipeline by Circuit Forge LLC.
"Don't be evil, for real and forever."
What's included
- Docker Compose deployment (remote / cpu / single-gpu / dual-gpu profiles)
- First-run wizard (
app/pages/0_Setup.py) with LLM backend connection testing - Job discovery via JobSpy + Adzuna + The Ladders + Craigslist
- Resume keyword matching + cover letter generation
- Fine-tune pipeline: web upload → training data extraction → containerised LoRA fine-tune → auto-register in Ollama
- SearXNG-powered company research with inclusion & accessibility sections
- Email sync + IMAP classifier
- Interview kanban + prep sheet
- Survey assistant (text + screenshot via moondream2)
- Podman support with CDI GPU overlay
Quick start
git clone https://git.opensourcesolarpunk.com/pyr0ball/peregrine.git cd peregrine bash setup.sh make start # Open http://localhost:8501 — the setup wizard will guide youProfiles
Command GPU Services make startnone app + searxng make start PROFILE=cpunone + ollama make start PROFILE=single-gpuGPU 0 + ollama + vision make start PROFILE=dual-gpuGPU 0+1 + ollama + vision + vllm Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
2 downloads