Getting Started¶
Prerequisites¶
- Python 3.14+
- uv (package manager)
- Adzuna API key (free, for job search)
- Docker & Docker Compose or Supabase account (for PostgreSQL)
- At least one LLM API key (for future JD analysis): Claude (console.anthropic.com), OpenAI, or Gemini
Installation¶
First-Time Setup¶
This interactive wizard walks through 6 steps:
- Profile — Name, country (AU/US/UK/CA/NZ), city (from predefined list), target roles
- Database — Choose Docker PostgreSQL (local) or Supabase (cloud, no Docker needed)
- Adzuna API — Free API key from developer.adzuna.com
- LLM Model — Pick from list (Claude, GPT, Gemini, DeepSeek) or enter custom model string
- API Server — Bind host and port (default
0.0.0.0:8880) - Search Defaults — Platforms, posted-within days
Start Database¶
Search Jobs¶
# Start the API server (in one terminal)
uv run kairos-server # http://localhost:8880
# Or: ./start.sh # postgres + migrations + server in one go
# Search (in another terminal)
uv run kairos jobs search "software engineer" -c AU -l Sydney
uv run kairos jobs search "developer" -i # interactive country/city picker
uv run kairos jobs list # view saved jobs
uv run kairos jobs view <job-id> # job details
(Optional) Run the Web Frontend¶
Or via Docker (full stack: postgres + backend + frontend):
See Web App reference for what the UI exposes.
Configuration¶
Config file: ~/.config/kairos/config.toml
Manage via CLI:
uv run kairos config view # show current config
uv run kairos config set adzuna.app_id "your-id" # set a value
uv run kairos config path # show file location
Or edit directly:
[profile]
name = "Your Name"
location = "Sydney"
country = "AU"
target_roles = ["Software Engineer", "Backend Developer"]
[database]
provider = "local" # "local" or "supabase"
url = "postgresql+asyncpg://kairos:kairos@localhost:5432/kairos"
[llm]
model = "claude-sonnet-4-20250514"
[adzuna]
app_id = "" # from developer.adzuna.com
app_key = ""
[search]
platforms = ["adzuna"] # adzuna, seek, linkedin
job_type = "" # fulltime, parttime, contract
salary_min = 0
posted_within_days = 14
[api]
host = "0.0.0.0"
port = 8880
Priority: environment variables > .env file > config.toml > defaults
Tip: LLM API keys are set via environment variables:
ANTHROPIC_API_KEY,OPENAI_API_KEY,GEMINI_API_KEY. Only the key for your configured model is required.