Bug fixes (filed as #125–#128): - Wizard step 7 read data.titles instead of data.search.titles — user-entered job titles and locations were silently dropped on every wizard run (#125) - GET /api/settings/search returned "titles" key but store expected "job_titles" — Settings → Search Prefs always showed empty even when data existed (#126) - remote_only preference not persisted during wizard setup (#127) - apply-to-profile didn't set default_resume_id in user.yaml, so future Resume Profile saves never synced back to the library entry (#128) Also: - Wizard step headings corrected (off-by-one after Training step was inserted) - Ollama host in wizard inference step now reads from saved wizard state - Resume upload during wizard now creates a library entry and sets it as default Docs: - New: docs/user-guide/daily-workflow.md — end-to-end daily usage guide - Updated: docs/user-guide/settings.md — rewritten for Vue SPA (was Streamlit) - mkdocs.yml nav: Daily Workflow added as first User Guide entry GUI help links: - web/src/composables/useDocsUrl.ts — shared docs base URL composable - Home: "Daily Workflow guide ↗" link in subtitle - Job Review: "? Docs" link in title row - Resume Library: "? Help" link in header - Settings → Resume Profile: "? Help" link in page header - Settings → Search Prefs: "? Help" link in page header
5.5 KiB
Installation
This page walks through a full Peregrine installation from scratch.
Prerequisites
- Git — to clone the repository
- Internet connection —
install.shdownloads Docker/Podman and other dependencies - Operating system: Ubuntu/Debian, Fedora/RHEL, Arch Linux, or macOS (with Docker Desktop)
!!! warning "Windows" Windows is not supported. Use WSL2 with Ubuntu instead.
Step 1 — Clone the repository
git clone https://git.opensourcesolarpunk.com/Circuit-Forge/peregrine
cd peregrine
Step 2 — Run install.sh
bash install.sh
install.sh performs the following automatically:
- Detects your platform (Ubuntu/Debian, Fedora/RHEL, Arch, macOS)
- Installs Git if not already present
- Installs Docker Engine (or Podman if Docker is not available) via official repositories
- Adds your user to the
dockergroup so you do not needsudofor docker commands (Linux only — log out and back in after this) - Detects NVIDIA GPUs — if
nvidia-smiis present and working, installs the NVIDIA Container Toolkit and configures Docker/Podman to use it - Creates
.envfrom.env.example— edit.envto customise ports and model storage paths before starting
!!! note "macOS"
install.sh installs Docker Desktop via Homebrew (brew install --cask docker) then exits. Open Docker Desktop, start it, then re-run the script. Ollama can also run natively for Metal GPU-accelerated inference — see the macOS note in Step 4.
!!! note "GPU requirement"
For GPU support, nvidia-smi must return output before you run install.sh. Install your NVIDIA driver first.
Step 2a — Podman users: GPU CDI setup
If you prefer rootless Podman over Docker, install.sh detects it and manages.sh/make use it automatically. For GPU profiles to work with Podman you must generate a CDI spec first:
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
This needs to be done once after driver installation. Without it, GPU profiles will start but containers will not have GPU access. Docker users can skip this step — Docker uses --gpus all instead of CDI.
Step 3 — (Optional) Edit .env
The .env file controls ports and volume mount paths. The defaults work for most single-user installs:
# Main UI port
VUE_PORT=8506
# Model paths — use full absolute paths, not ~ (tilde does not expand inside containers)
DOCS_DIR=/home/yourname/Documents/JobSearch
OLLAMA_MODELS_DIR=/home/yourname/models/ollama
# Inference model defaults
OLLAMA_DEFAULT_MODEL=llama3.2:3b
# External API keys — only needed for the "remote" profile or BYOK unlock
ANTHROPIC_API_KEY=
Change VUE_PORT if 8506 is taken on your machine. See Docker Profiles for a full port reference.
Step 4 — Start Peregrine
Choose a profile based on your hardware:
./manage.sh start # cpu — local Ollama on CPU (recommended default)
./manage.sh start --profile single-gpu # one NVIDIA GPU
./manage.sh start --profile dual-gpu # two NVIDIA GPUs
./manage.sh start --profile remote # no local LLM — use cloud API keys only
manage.sh start runs preflight.py first, which checks for port conflicts and writes GPU/RAM recommendations to .env. Then it calls docker compose (or podman compose) with the right compose file overlay for your hardware.
!!! tip "macOS with native Ollama"
If you installed Ollama natively via Homebrew for Metal GPU inference, start with --profile cpu. The container API on port 8506 connects to your host's Ollama at localhost:11434 automatically.
Step 5 — Open the UI
Navigate to http://localhost:8506 (or whatever VUE_PORT you set).
The first-run wizard launches automatically. See First-Run Wizard for a step-by-step guide.
Supported Platforms
| Platform | Tested | Notes |
|---|---|---|
| Ubuntu 22.04 / 24.04 | Yes | Primary target |
| Debian 12 | Yes | |
| Fedora 39/40 | Yes | |
| RHEL / Rocky / AlmaLinux | Yes | |
| Arch Linux / Manjaro | Yes | |
| macOS (Apple Silicon) | Yes | Docker Desktop required; GPU via native Ollama (Metal) |
| macOS (Intel) | Yes | Docker Desktop required; no GPU support |
| Windows | No | Use WSL2 with Ubuntu |
GPU Support
Only NVIDIA GPUs are supported. AMD ROCm is not currently supported.
Requirements:
- NVIDIA driver installed and
nvidia-smiworking before runninginstall.sh - CUDA 12.x recommended (CUDA 11.x may work but is untested)
- Minimum 8 GB VRAM for
single-gpuprofile with default models - Podman users: CDI spec required — see Step 2a above
For dual-gpu, both cards must be NVIDIA. GPU 0 handles Ollama (cover letters, general tasks) and GPU 1 handles the research workload. The exact behaviour is controlled by DUAL_GPU_MODE — see Docker Profiles.
If your GPU has less than 10 GB VRAM, preflight.py calculates a CPU_OFFLOAD_GB value and writes it to .env. The vLLM container picks this up via --cpu-offload-gb to overflow KV cache to system RAM.
Stopping Peregrine
./manage.sh stop # stop all containers
./manage.sh restart # stop then start again (runs preflight first)
Reinstalling / Clean State
./manage.sh clean # removes containers, images, and data volumes (destructive)
You will be prompted to type yes to confirm.