{% extends "base.html" %} {% from "_hub.html" import hub %} {% block title %}Config — karyab{% endblock %} {% block content %}

Config

{% if flash %} {% if flash_error %}
{{ flash }}
{% else %}
{{ flash }}
{% endif %} {% endif %}

All sections are part of one form — the Save button at the bottom saves everything at once.

{% call hub(hub_sections) %}
{# ------------------------------------------------------------------ #} {# SECTION: Matching #} {# ------------------------------------------------------------------ #}

Matching

Controls the relevance gate and job list display defaults.

UI defaults

Statuses hidden in the job list filter when no explicit filter is chosen.
{% for st in all_statuses %} {% endfor %}

Relevance gate

Title-based pre-filter — checked before LLM scoring. Off-target jobs get fit_score=0 and are hidden from /new. Leave keyword lists blank to derive them from your Profile below.

Re-rank clears all scores and re-runs ranking. Clean off-target marks jobs failing location/role gates as score=0 (instant, no LLM). Suggest gate improvements asks the LLM to propose keyword changes you review and approve before anything is written.

{# ------------------------------------------------------------------ #} {# SECTION: Profile #} {# ------------------------------------------------------------------ #}

Profile

Job-matching profile: drives ranking and filtering. Nested subtables (e.g. [profile.requirements]) are preserved on save.

{# ------------------------------------------------------------------ #} {# SECTION: Sources #} {# ------------------------------------------------------------------ #}

Sources

Enable/disable job sources and configure their settings. API secrets (keys, passwords) live in secrets.toml — never entered here.

{# Greenhouse #}
{# Lever #}
{# Ashby #}
{# Teamtailor #}
{# Adzuna #}
{% if adzuna_secret_configured %} API key configured ✓ {% else %} API key not configured {% endif %}

API secrets (app_id, app_key) must be set in secrets.toml — not editable here.

{# Themuse #}
{# Remotive #}
{# Simple toggle sources #}
{# JobTech #}

Keyless Swedish Platsbanken API. No API key required.

{# Email — read-only display (auth via dedicated button) #}

Email accounts

{% if email_accounts %}
    {% for acct in email_accounts %}
  • {{ acct.name }} — {{ acct.imap_host }} ({{ acct.auth }}, folder: {{ acct.folder }}) {% if acct.enabled %}enabled{% else %}disabled{% endif %} {% if email_secrets_present %} — credentials configured ✓ {% else %} — no credentials in secrets.toml {% endif %}
  • {% endfor %}
{% else %}

No email accounts in config.toml. Add [[sources.email]] entries and credentials to secrets.toml. See Help → Email for setup.

{% endif %}
{# ------------------------------------------------------------------ #} {# SECTION: Ranker #} {# ------------------------------------------------------------------ #}

Ranker

Web UI ranks with: {{ effective_ui_backend }}{% if effective_ui_model %} / {{ effective_ui_model }}{% endif %} {% if ranker_ui_backend %}(via [ranker.ui] overlay){% endif %}
CLI / MCP rank with: {{ effective_cli_backend }}{% if effective_cli_model %} / {{ effective_cli_model }}{% endif %}
The web rank button uses the first row — the [ranker.ui] overlay wins over the Backend dropdown below when set.

Which LLM backend scores jobs. Anthropic/OpenCode API keys stay in secrets.toml — not entered here.

{% if anthropic_configured %} Anthropic API key configured ✓ {% endif %}

Ollama settings (used when backend = ollama)

[ranker.ui] overlay Overrides [ranker] for the web UI's own rank calls only. Leave blank to use the base ranker config.

{# ------------------------------------------------------------------ #} {# Save button #} {# ------------------------------------------------------------------ #}
{% endcall %} {% endblock %}