killBottleneck je ve veřejné betě — cloud i self-host.killBottleneck je v betě.Beta na GitHubu →
Skip to content

Konfigurace ​

Konfigurace leží v .env vedle docker-compose.yml, s jednou výjimkou: SMTP se nastavuje v administraci PocketBase, ne v souboru. Úplný seznam proměnných i s výchozími hodnotami je v Proměnných prostředí; tahle stránka řeší rozhodnutí, ne tabulku.

Po každé změně:

bash
docker compose up -d --build

AI ​

AI je ve výchozím stavu vypnutá a aplikace je tak plně použitelná. Zapíná se přes KB_AI_PROVIDER:

PoskytovatelCo to znamená
noneŽádná AI. Ze serveru nic neodejde. Tohle je výchozí stav.
openaiJakékoli OpenAI-kompatibilní API. OpenAI, OpenRouter, Groq, Mistral, Together — nebo vaše vlastní vLLM, LM Studio, llama.cpp či liteLLM proxy. Adresa, klíč, název modelu. Diktování jde přes tutéž službu.
ollamaVáš vlastní lokální model. Nainstalujte Ollamu, ollama pull gpt-oss:20b, pak nastavte KB_AI_URL=http://IP:11434 a KB_AI_MODEL=gpt-oss:20b. Všechno zůstane ve vaší síti. Základní prompty; přepis hlasu není součástí.
apiVzdálená AI služba kompatibilní s killBottleneck API — adresa a token od vašeho poskytovatele. Bez vlastního GPU a údržby.
customVáš vlastní endpoint dodržující stejný API kontrakt — kontrakt je sepsaný tady.
bash
KB_AI_PROVIDER=ollama
KB_AI_URL=http://192.168.1.10:11434
KB_AI_MODEL=gpt-oss:20b

Připojení poskytovatele s API klíčem (openai) ​

Skoro každý dnešní poskytovatel mluví „tvarem OpenAI", takže tenhle jeden přepínač pokrývá celou tu rodinu. Potřebujete tři věci: základní adresu (obvykle končí /v1), API klíč a přesný název modelu, jak ho váš poskytovatel používá.

bash
KB_AI_PROVIDER=openai
KB_AI_URL=https://openrouter.ai/api/v1
KB_AI_TOKEN=sk-...
KB_AI_MODEL=openai/gpt-4o-mini
SlužbaKB_AI_URLPříklad KB_AI_MODEL
OpenAIhttps://api.openai.com/v1gpt-4o-mini
OpenRouterhttps://openrouter.ai/api/v1openai/gpt-4o-mini
Groqhttps://api.groq.com/openai/v1(název od poskytovatele)
vLLM / LM Studio / llama.cpphttp://IP:PORT/v1(název, který server hlásí)

Adresu pište včetně verze

Adresa musí ukazovat na kořen OpenAI rozhraní. Když vaše služba sedí na vlastní podcestě (třeba liteLLM proxy za https://firma.cz/llm), napište ji celou včetně verze — https://firma.cz/llm/v1. Z holé adresy totiž nejde poznat, jestli služba žije na kořeni a chce /v1 doplnit (tak to má OpenAI), nebo sedí přesně tam a doplnit nechce nic — proto /v1 doplňujeme vždy, když v cestě žádná verze není. Adresu, která už verzi v cestě má (…/v1beta/openai), necháváme být. Spletete se? Otestovat připojení to řekne hned, nedozvíte se to z ticha.

Nastavit to jde i přímo v aplikaci místo .env — Administrace → AI funkce → OpenAI a kompatibilní — a tlačítko Otestovat připojení vám rovnou řekne, jestli klíč platí a jestli takový model existuje.

Jaký model zvolit — změřeno, ne odhadnuto

Změřeno 20. 8. 2026 tak, že se všech šest AI funkcí killBottlenecku (mapa z cíle, upřesňující otázky, podkroky, mapa z textu, chat nad mapou, ranní shrnutí) prohnalo samotným produktem, česky. Cena je to, co těch šest volání skutečně stálo.

ModelProšloMapa z cíleCena za šest funkcí
gpt-4o-mini ⭐6/611,2 s, 8 uzlů0,0011 $ (≈ 0,02 Kč)
gpt-4.1-mini6/66,4 s, 7 uzlů0,0025 $
gpt-4.1-nano6/62,8 s, 7 uzlů0,0005 $
gpt-5-mini6/624,5 s, 7 uzlů0,0120 $
o4-mini6/616,8 s, 7 uzlů0,0329 $
gpt-5-nano3/6 ❌26,2 s, 7 uzlů0,0044 $

Doporučený výchozí je gpt-4o-mini — na něm je celá cesta proklikaná od tlačítka „Navrhnout s AI" po uloženou mapu a AI dopsané podkroky. gpt-4.1-nano je levnější a rychlejší a prošel taky; gpt-4.1-mini je mezi nimi.

⚠️ Uvažujícím modelům se vyhněte (gpt-5-*, o4-*). Jsou 2–4× pomalejší a 5–30× dražší, protože platíte i za přemýšlení, které nikdy neuvidíte — o4-mini z 7 082 výstupních tokenů utratil 5 824 za uvažování. A gpt-5-nano rovnou ztratí tři funkce z šesti: spotřebuje celý limit na přemýšlení a nevrátí nic. killBottleneck to řekne místo tichého nic, ale stavět na tom nejde.

Jiný model si nejrychleji ověříte tlačítkem Otestovat připojení a pak zkouškou Navrhnout plán z cíle: buď se objeví strom, nebo přijde chyba, která řekne proč.

Klíč i peníze jsou vaše

Klíč se uloží na váš server a nikdy se nevydá zpátky do prohlížeče. Dotazy vám účtuje váš poskytovatel, ne my — killBottleneck sám od sebe nikam nic neposílá.

Diktování jde na tutéž službu (/audio/transcriptions, výchozí model whisper-1, změníte ho přes KB_AI_TRANSCRIBE_MODEL). Když chcete přepis provozovat jinde, nastavte KB_AI_TRANSCRIBE_URL a platí ta adresa.

Na devítisekundové české větě přepsaly whisper-1 (1,9 s) i gpt-4o-mini-transcribe (0,7 s) všechna slova správně včetně diakritiky. Druhý je navíc levnější (0,003 $ proti 0,006 $ za minutu) — je to ale jediný vzorek, takže výchozí zůstává whisper-1.

⚠️ „OpenAI-kompatibilní" se týká chatu, ne nutně přepisu. OpenAI /audio/transcriptions má; OpenRouter, vLLM ani LM Studio obvykle ne. killBottleneck se proto služby zeptá na seznam modelů a diktování nabídne, jen když v něm najde nějaký přepisovací — mikrofon, který vždycky skončí chybou, je horší než žádný. Když se u vaší služby model jmenuje jinak (Groq má whisper-large-v3), nastavte ho v Administraci → AI funkce nebo přes KB_AI_TRANSCRIBE_MODEL.

Strop na útratu ​

S vlastním API klíčem stojí každé volání AI peníze, takže jeden člověk smí ve výchozím stavu udělat nejvýš 60 AI operací za hodinu a 20 diktování za hodinu (KB_AI_MAX_PER_HOUR, KB_AI_MAX_TRANSCRIBE_PER_HOUR). Bez stropu by jediný účet — nebo zaseknutá karta v prohlížeči — dokázal kredit vypálit ve smyčce. Nad strop to aplikace srozumitelně řekne a nic se neztratí. Strop platí jen pro openai: lokální Ollama nic nestojí a AI služba přes API má vlastní kvótu.

Jaký model zvolit

gpt-oss:20b je ověřený — na něm se killBottleneck testuje a odpovědi z něj dávají smysl i česky. Počítejte s tím, co potřebuje:

Velikost modelu~14 GB
Rozumný běhgrafická karta s 16 GB paměti a víc
Doba odpovědijednotky až desítky sekund (naměřeno ~23 s pro návrh otázek)

Doporučujeme jen tenhle jeden, protože jen na něm to máme odzkoušené. Jiný model si zkusit můžete a Ollama jich nabízí spoustu — počítejte ale s tím, že to je na vaše riziko. Nejde o „chytrost" modelu: killBottleneck po AI chce strojově čitelnou odpověď (JSON) a menší nebo takzvaně uvažující modely ji občas vrátí useknutou — pak funkce tiše nic neudělá.

Ze změřených: gemma3:12b (~8 GB) obstála a je použitelná na kartě s 12 GB, jen je pomalejší. Jiný model téže velikosti u složitějšího zadání vrátil rozbitou odpověď — proto to „na vlastní riziko" myslíme vážně. Nový model si nejlépe ověříte tak, že zkusíte Navrhnout plán z cíle: buď se objeví strom, nebo se nestane nic.

Bez grafické karty model poběží z procesoru a odpovědi budou trvat minuty; k práci to nestačí.

killBottleneck mluví s Ollamou přímo (/api/chat) — nic mezi tím není a ze sítě nic neodchází.

Kam data odcházejí

S jiným poskytovatelem než none se data mapy posílají na endpoint, který jste nastavili. U ollama mířící na váš stroj je to pořád vaše síť. U api nebo custom je to to, kam jste zamířili. Žádná třetí skrytá varianta neexistuje.

Zvláštní model jen na ranní souhrny ​

Jednořádkové povzbuzení v Mém dni je krátký formátovaný text — bohatě stačí menší a rychlejší model. KB_SUMMARY_PROVIDER / _URL / _MODEL / _TOKEN přebijí obecné nastavení AI jen pro tuhle jednu úlohu. Když je necháte prázdné, použije se obecná konfigurace.

Souhrn se generuje ráno v KB_SUMMARY_HOUR (výchozí 6) jen účtům, které se přihlásily v posledních KB_SUMMARY_ACTIVE_DAYS dnech (výchozí 14, 0 = všem); ostatním se vygeneruje ve chvíli, kdy si aplikaci otevřou.

Co AI dělat nesmí

AI nikdy nevypisuje seznamy vašich úkolů — ty se počítají z dat a jsou proklikávací. Názvy úkolů se před vstupem do promptu čistí. Vypnutí AI vás stojí přesně jednu větu v Mém dni; samotný panel funguje dál.

Registrace a registrační klíč ​

První zaregistrovaný účet se stane správcem. Dál se lidé buď registrují sami, nebo je správce pozve ze Správy.

Když nastavíte KB_SETUP_CODE, vyžaduje ho každá registrace. Klíč rozdáte lidem, které chcete pustit dovnitř. Pozvánka od správce klíč nepotřebuje.

Dostupné z internetu?

KB_SETUP_CODE nastavte dřív, než instanci vystavíte ven. Prázdná hodnota znamená otevřenou registraci.

Přihlášení přes Google ​

Volitelné — uživatelé se pak přihlašují Googlem místo e-mailem a heslem.

  1. V Google Cloud Console: APIs & Services → Credentials → Create credentials → OAuth client ID → Web application.
  2. Do Authorized redirect URIs přidejte: https://VASE-DOMENA/api/oauth2-redirect
  3. Hodnoty vložte do .env:
    bash
    KB_GOOGLE_CLIENT_ID=…apps.googleusercontent.com
    KB_GOOGLE_CLIENT_SECRET=…
  4. docker compose up -d --build — tlačítko se objeví samo.

Prázdné proměnné = přihlášení přes Google je vypnuté a tlačítko se nezobrazuje.

E-mail (SMTP) ​

SMTP se nastavuje v administraci PocketBase, ne v .env:

http://IP-SERVERU:8090/_/ → Settings → Mail settings

Účet superuživatele vznikne při prvním startu; odkaz je v docker compose logs.

Co se změní, když SMTP nenastavíte ​

E-maily jsou ve výchozím stavu vypnuté a instance je tak plně použitelná. Rozdíl je jen tady:

Se SMTPBez SMTP
Pozvánka nového členaodejde e-mailem s odkazemsprávci se ukáže dočasné heslo k předání
„Zapomněli jste heslo?"samoobslužné, odkaz přijde e-mailemnenabízí se — heslo obnoví správce (viz níž)
Upozornění a denní souhrnchodí podle předvoleb každého člověkajen zvoneček v aplikaci

Odkaz na obnovu hesla se bez SMTP schválně neukazuje: server by potvrdil odeslání, ale žádná zpráva by nedorazila a člověk by čekal na mail, který neexistuje.

Zapomenuté heslo bez SMTP ​

Členovi týmu heslo obnoví správce: Správa organizace → u člověka ikona klíče → potvrdit. Objeví se nové dočasné heslo k předání; dosavadní heslo hned přestane platit a dotyčný se odhlásí ze všech zařízení. Že mu heslo někdo změnil, se dozví ve zvonečku.

Správci samotnému takhle heslo nikdo neobnoví — nad ním nikdo není (a aplikace mu proto ani nenabízí obnovu vlastního hesla). Tady se cesty rozcházejí:

  • Hostovaná verze (killbottleneck.com): pošta funguje vždy, takže si správce vyžádá odkaz běžným „Zapomněli jste heslo?“ na přihlašovací stránce. Nic dalšího řešit netřeba.
  • Vlastní server bez SMTP: cesta vede přes administraci PocketBase, ke které máte jako provozovatel přístup:
  1. http://IP-SERVERU:8090/_/ → přihlásit se superuživatelem
  2. kolekce users → najít svůj účet → Change password

Nemáte superuživatele? Vytvořte ho na serveru (jméno služby je z docker-compose.yml):

bash
docker compose exec killbottleneck /app/pocketbase superuser upsert vas@email.cz 'VaseSilneHeslo'

Na co si dát pozor

Konzole na :8090/_/ jede po nešifrovaném HTTP — otevírejte ji jen z místní sítě nebo přes SSH tunel, ne přes internet. Heslo zadané na příkazové řádce navíc zůstane v historii shellu a je chvíli vidět ostatním uživatelům serveru; po použití ho změňte v konzoli a řádek z historie smažte.

Doporučení

Založte si druhý účet s rolí správce a heslo k němu uložte do správce hesel. Obnova přes PocketBase funguje, ale je to práce navíc uprostřed dne, kdy se nikdo nemůže přihlásit.

Notifikační e-maily jsou ve výchozím stavu vypnuté a řídí se předvolbami každého uživatele. Pokud vašim lidem e-maily chodily už před aktualizací a chcete to zachovat, nastavte KB_NOTIFY_EMAIL_DEFAULT=1.

Časové pásmo a opakující se šablony ​

TZ platí pro celou instanci, ne pro jednotlivé uživatele. Určuje, v jakém pásmu se počítá „každé pondělí“ a „v pět ráno“. Tým rozprostřený přes pásma dostane pásmo serveru.

Pokud byl server v hodinu KB_AUTO_HOUR vypnutý, vytvoří se opakující se projekty v nejbližší pozdější hodinu téhož dne — nepřeskočí se potichu.

Limity příloh ​

KB_FILES_MB omezuje nahrané soubory za celou instanci:

  • prázdné — bez limitu; výchozí stav pro self-hosting, je to váš disk
  • číslo — strop v MB (5000 = 5 GB)
  • 0 — nahrávání vypnuté; přílohy jde pořád přidávat jako odkazy, které nezabírají místo a vždycky míří na aktuální verzi souboru

Proč je 0 výchozí u naší hostované verze

Není to úspora místa, ale záměr: cizí soubory u sebe neukládáme. Nedostanou se do našich záloh, nevzniká kolem nich „zpracováváme dokumenty zákazníka" ve smlouvě a zůstávají tam, kde už jsou. U sebe na serveru je to samozřejmě váš disk a vaše rozhodnutí.

Automatizace ​

Týká se vás, jen když cíle poháníte automatizací. KB_PUBLIC_URL je adresa, na kterou se má agent ohlásit zpět — proč prázdná hodnota může vést k tomu, že vzdálený agent volá sám sebe, a proč je KB_ALLOW_PRIVATE_WEBHOOKS vypnuté, je v Proměnných prostředí → Automatizace.

Režim instance ​

KB_HOSTED nechte na vlastním serveru prázdné. Existuje pro instance běžící u poskytovatele vedle jiných zákazníků, kde správce instance nesmí zamířit AI službu do privátní sítě a oťukávat sousedy.

fair-code — self-hosting a interní použití zdarma, přeprodej jako hostovaná služba ne.