# CyberBrain26 — ROADMAP V6

**Verze:** 1.0 (návrh)
**Datum:** 2. 10. 2026
**Stav:** návrh k potvrzení vlastníkem. Nenahrazuje schválenou roadmapu v4.1 ani `ROADMAP_V5.md`. Odděluje ověřený stav, návrh a hypotézu.
**Rozsah:** Kilo jako multi-agent jádro a UX, CyberBrain26 jako lokální bezpečnostní a policy vrstva.

---

> **`status: superseded`**
> **superseded_by:** `.kilo/plans/CyberBrain26cil-031026-v2.md` (schválený směr, 3. 10. 2026)
> **superseded:** 4. 10. 2026
>
> **Tento dokument NENÍ autoritativní plán.** Na otázku „co stavíme a v jakém
> pořadí" odpovídá `.kilo/plans/CyberBrain26cil-031026-v2.md`.
>
> **Fáze F0–F11 v §13 nejsou aktivní plán.** V `-v2.md` mají jiné názvy i jiné
> brány (`F1`–`F4a`, Gate 1/2/3 v §8). Nezaměňuj je.
>
> **Co z tohoto dokumentu ŽIJE a platí dál:**
> §14 bezpečnostní invarianty — identity → policy → permission → approval →
> sandbox → audit, fail-closed, žádný tichý přechod. Tyto citují
> `tests/test_kilo_agent_policy.py` a zůstávají závazné.
>
> Proč se nezmažel: na tento soubor odkazuje 30 zelených testů. Smazat ho by
> znamenalo tiše odpojit testy od jejich důvodu.
>

---

## Abstrakt

Dokument navrhuje, jak přenést CyberBrain26 z režimu „hotová aplikace s vlastní CLI a vlastními agenty“ do režimu „lokální bezpečnostní a policy vrstva pro Kilo agenty“. Výchozí bod je ověřený stav repozitáře ke dni 2. 10. 2026: 57 modulů a 14 079 řádků v `src/cyberbrain26/`, 19 testovacích souborů a 6 924 řádků v `tests/`, 46 necommitnutých položek v pracovním stromu a žádný git remote, tedy žádný běh CI, který by se dal citovat jako důkaz. V5 i v4.1 obsahují bezpečnostní řetěz, který v kódu reálně existuje, ale obsahují i tvrzení o sobě, která neodpovídají kódu; V6 začíná opravou těchto tvrzení, protože jinak se na ně staví bezpečnostní rozhodnutí. Hlavní architektonický posun je ten, že Kilo se stane front-endem a UX potvrzením, zatímco veškerá bezpečnostní logika zůstane v Pythonu za `AuthorizedExecutionService`. Agenti se přestanou psát jako třídy v `agents/orchestrator.py` a začnou se popisovat jako deklarativní soubory `.kilo/agent/*.md` s `mode`, `description` a `permission`, přičemž jim zůstane jen `task` a MCP nástroje `cyberbrain26_*`, nikoli `bash`. Jedenáct rizik, která v této oblasti vznikají nebo která se posouvají, je popsáno samostatně — jde zejména o posun bezpečnostní plochy do deklarativních souborů, o vendor riziko Kilo po akvizici Anacondou, o prompt injection přes Kilo Memory a o LLM-as-judge, jehož výsledek je bez korekce zkreslený kappa deflationem a position biasem. Fáze F0 až F11 jsou navrženy s vstupy, výstupy a gate kritérii; F0 řeší nejprve důvěryhodný baseline, protože bez něj nemá smysl stavět gate aniž by se přitom dálo rozlišit „selhalo“ od „bylo rozbité už předtím“. Dokument nepoužívá název „Agent Guard“ a neobsahuje žádné prohlášení ochrany proti nepřátelskému kódu; sandbox je v celém textu popisován jako redukce blast radius, ne jako absolutní bezpečnost.

---

## 1. Hlavička, stav a značky

### 1.1 Stav dokumentu

- **Datum sestavení:** 2. 10. 2026
- **Stav:** návrh k potvrzení vlastníkem. Nenahrazuje schválenou roadmapu v4.1 (`.kilo/context/Cyberbrain26_master_roadmapv4-1.md`, 2 349 řádků) ani `ROADMAP_V5.md` (288 řádků). Odděluje ověřený stav, návrh a hypotézu.
- **Rozhodovací základ:** rozhodnutí D1–D10 z `docs/product/DECISIONS_LOG_V5.md` a pracovní kontext vlastníka pro V6. Texty rozhodnutí jsou převzaty beze změny, doplněn je pouze kontext a odůvodnění.
- **Metodická zásada:** každé tvrzení o kódu je opatřeno odkazem `file:line` a opatřeno značkou. Tvrzení, které nelze doložit odkazem, není v tomto dokumentu uvedeno jako fact.
- **Způsob práce s dokumentem:** dokument se nepotvrzuje průběžně v průběhu čtení. Je souborem k revizi vlastníkem najednou.

### 1.2 Tabulka značek

| Značka | Význam | Kritérium použití |
|---|---|---|
| **[OVĚŘENO]** | čteno v kódu v tomto repozitáři | tvrzení má ověřitelný odkaz `file:line` v rámci repozitáře `/home/oem/CyberBrain26-v4`; platí k HEAD `90a42e6cee27a6233c9b6e7255f35a772bd4f9a2` včetně necommitnutých změn v pracovním stromu |
| **[VÝZKUM]** | ověřeno veřejným zdrojem | tvrzení má URL a datum přístupu (dotaz 2. 10. 2026); pokud je v dodaném výzkumu výslovně uvedeno, že hvězdičky, licence nebo `pushed_at` nebyly ověřeny, je to uvedeno inline |
| **[NÁVRH]** | navržená změna k potvrzení vlastníkem | návrh, který v kódu ani v předchozí roadmapě neexistuje; vychází z rozhodnutí D1–D10 nebo z výzkumu |
| **[HYPOTÉZA]** | domněnka bez důkazu | tvrzení, které nelze ověřit v kódu ani ve veřejném zdroji; je heuristika, odhad nebo úvaha; nesmí se použít jako podklad pro bezpečnostní rozhodnutí |

Použití značek je inline, ne pouze v hlavičce. Příklad: „`CyberBrain26_AI_Firewall` existuje, ale není v cestě spuštění **[OVĚŘENO]**, a proto je jakýkoli tvrzení, že je firewall v cestě, nepravdivé **[OVĚŘENO]**.“

### 1.3 Krátký stav repozitáře (vstupní předpoklady)

Tyto údaje jsou opakovány, protože z nich vychází celý plán a jsou snadno přehlédnutelné.

| Údaj | Hodnota | Značka |
|---|---|---|
| Větev | `master` | [OVĚŘENO] |
| HEAD | `90a42e6cee27a6233c9b6e7255f35a772bd4f9a2` | [OVĚŘENO] |
| Počet commitů | 4 | [OVĚŘENO] |
| `git remote -v` | prázdný → **CI nikdy neběželo** | [OVĚŘENO] |
| Necommitnuté položky | 46 (28 ` M` + 18 `??`) | [OVĚŘENO] |
| Index | prázdný (`git diff --cached --name-only` prázdný) | [OVĚŘENO] |
| `src/cyberbrain26/` | 57 modulů, 14 079 řádků | [OVĚŘENO] |
| `tests/` | 19 souborů, 6 924 řádků, 459 výskytů `def test_`, 65 tříd `Test*` | [OVĚŘENO] |
| `product/` | untracked | [OVĚŘENO] |
| `security_plane/actions.py` | untracked, 337 řádků | [OVĚŘENO] |
| `kilo.json` v kořeni | neexistuje | [OVĚŘENO] |
| `.kilo/agent/`, `.kilo/command/`, `.kilo/skills/` | neexistují | [OVĚŘENO] |
| MCP server kód | neexistuje | [OVĚŘENO] |
| Nástroje `cyberbrain26_*` | neexistují (jediný výskyt prefixu je `ContextVar` v `actions.py:208`) | [OVĚŘENO] |
| Prázdné package stuby | `core/`, `experience_layer/`, `governance_plane/`, `integration_layer/`, `personal_ai_layer/`, `data_plane/schemas/`, `execution_plane/tools/` | [OVĚŘENO] |

---

## 2. Rozhodnutí D1–D10

Deset rozhodnutí z `docs/product/DECISIONS_LOG_V5.md` a vlastního zadání pro V6. Texty jsou převzaty beze změny; doplněn je kontext a odůvodnění, proč právě toto rozhodnutí. **[NÁVRH]** u každého znamená, že v této části dokumentu popisuji, jak se rozhodnutí promítá do V6, nikoli že rozhodnutí navrhuji — rozhodnutí jsou přijata.

### D1 — Architektura: varianta A

> Kilo je multi-agent jádro a UX. CyberBrain26 je lokální bezpečnostní a policy vrstva. Vlastní `PtahBridge` a `agents/orchestrator.py` se nestávají paralelní alternativou, ale tenkou vrstvou. Nepřidává se druhý orchestration path.

- **Kontext [OVĚŘENO]:** `src/cyberbrain26/agents/orchestrator.py` má 721 řádků a obsahuje `BaseAgent`, `PlannerAgent` a `CoderAgent` jako třídy Pythonu. `src/cyberbrain26/orchestration/ptah_bridge.py` propojuje `cli.run` s dispatcherem a s `AuthorizedExecutionService` (`ptah_bridge.py:195-201`, `ptah_bridge.py:338-342`, `ptah_bridge.py:481-485`).
- **Proč právě to [NÁVRH]:** Kilo už má multi-agent infrastrukturu, worktrees, Task tool, permission model a MCP klienta. Jeho psaní znovu znamená dvě implementace téhož (Task tool vs. `agents/orchestrator.py`), dvě místa kde se může chyba projevit, a podle D10 je druhý orchestration path nepřípustný. Držet Pythonovou vrstvu tenkou znamená, že veškerý bezpečnostní kód zůstává v jednom místě — což je zároveň podmínka auditovatelnosti.
- **Důsledek pro V6 [NÁVRH]:** `agents/orchestrator.py` zůstává jako referenční implementace a jako zdroj testovacích fixture, ale **ne** jako běžná cesta spuštění v režimu Kilo. `PtahBridge` zůstává adaptér pro `cyberbrain run` (D4). Nové podmínky „PtahBridge se nesmí stát alternativou“ jsou zakotvené v §14 (invarianty).
- **Co se tím nevylučuje [NÁVRH]:** to nevylučuje `cyberbrain run` jako druhý vstupní bod (D4) ani to nevylučuje, že bezpečnostní rozhodnutí zůstanou v Pythonu i tehdy, když je klient Kilo.

### D2 — Integrace přes MCP, ne přes forkování Kilo

> CyberBrain26 dodává MCP server, Kilo je klient. Změna Kilo API se dotkne jen toho serveru.

- **Kontext [OVĚŘENO]:** v repozitáři žádný MCP server kód neexistuje. `extension_layer/tool_protocol.py` (48 řádků) je pouze abstraktní adaptér `ToolProtocolProvider` (`:1`, `:21`, `:23-24`) s výslovným komentářem, že MCP verze je zapouzdřena v adaptéru a interní tool contract NESMÍ být totožný s MCP wire contractem. `.mcp.json` (8 řádků, necommitnutý) má jediný MCP server `ptah`, typ `http`, `http://localhost:51820/workspace/%2Fhome%2Foem%2FCyberBrain26-v4`.
- **Proč právě to [NÁVRH]:** MCP je jediné rozhraní, které Kilo podporuje bez forkování. Změna vnitřního API Kilo (viz riziko (ii) v §5) se pak projeví pouze v jednom souboru, který je malý a má jinou odpovědnost než bezpečnostní logika. Proti forkování mluví i tempo změn Kilo API uvedené v §5.
- **Důsledek pro V6 [NÁVRH]:** vzniká nový modul `src/cyberbrain26/integration_layer/mcp_server.py` (nebo obdobně pojmenovaný balíček), který je jediným kusem kódu závislým na MCP SDK. Interní tool contract zůstává oddělený od wire contractu podle `extension_layer/tool_protocol.py:23-24`.
- **Omezení [VÝZKUM]:** oficiální Python MCP SDK `mcp` je ve verzi 2.2.0 (MIT) a má breaking change ve v2 — `FastMCP` bylo přejmenováno na `MCPServer` (`mcp.server.mcpserver.*`), výchozí název serveru je `mcp-server` a `get_context()` byl odstraněn; větev 1.x pokračuje. To je přímý důvod pinovat verzi a neotáčet SDK průběžně.

### D3 — Agenti v `.kilo/agent/*.md` nemají `bash`

> Dostávají jen `task` a MCP nástroje `cyberbrain26_*`. Všechny reálné akce jdou přes `AuthorizedExecutionService` → policy → approval → bubblewrap. Kilo permission je UX potvrzení, autoritativní je bezpečnostní vrstva CyberBrain26. `bash` na hostovi z cesty spuštění kódu zmizí.

- **Kontext [OVĚŘENO]:** dnes existuje jediná cesta spuštění kódu — `AuthorizedExecutionService.execute` (`execution_plane/secure_gateway.py:82-169`), volaná z `CoderAgent.execute` přes `execution_service.execute` (`agents/orchestrator.py:436-443`). `BubblewrapExecutionProvider.execute` (`execution_plane/bubblewrap_provider.py:97`) při chybějící binárce hodí `RuntimeError("refusing to run code without a sandbox")` (`bubblewrap_provider.py:129-134`).
- **Proč právě to [NÁVRH]:** pokud by agent měl `bash`, existovala by druhá cesta ke spuštění příkazu, která obchází `PermissionGateway.evaluate` (`secure_gateway.py:111`), approval (`secure_gateway.py:126-128`) i grant check (`secure_gateway.py:122-125`). To by přímo porušilo D10 („jeden orchestration path“) a invariant „žádný nesandboxovaný fallback“.
- **Důsledek pro V6 [NÁVRH]:** `bash` je v `.kilo/kilo.jsonc` nastaveno na `deny` globálně, ne „jen pro některé agenty“. Důvody jsou dva a oba se v praxi vyskytují: (a) globální deny je stav, který se dá ověřit jedním testem konfigurace, zatímco deny na agenta je stav, který se musí ověřit u každého nového agenta; (b) reálný incident s tímto mechanismem existuje — chyba ve frontmatteru `allowed-tools` místo `tools` v Claude Code nechala subagenta s neomezeným Bash, který lovil credentialy (85 tool callů, 47× Bash) [VÝZKUM, `https://github.com/anthropics/claude-code/issues/27099`, 20. 2. 2026].
- **Upřesnění [VÝZKUM]:** doporučení „subagenti nikdy bash“ není ve veřejných bezpečnostních doporučeních formulováno doslova [HYPOTÉZA]. Přestože toto není obecně vyjádřené pravidlo, je ekvivalentní formulace od Anthropic: „disable the `bash` tool for that agent and give it no custom tool that writes to the sandbox's filesystem“ [VÝZKUM, `https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-security`]. Rozdíl je v motivaci: tam jde o to, aby agent nemohl změnit vlastní pohled na sandbox; v D3 jde o to, aby existovala jediná autorizovaná cesta ke spuštění kódu. D3 je přísnější.

### D4 — `cyberbrain run` CLI zůstává jako druhý vstupní bod

> Není to druhý orchestration path, ale druhý *klient* téhož security plane.

- **Kontext [OVĚŘENO]:** `cli.run` v `src/cyberbrain26/cli.py:449-450`, `PtahBridge(...)` se staví v `cli.py:191-195` (sestavení `cli.py:168-195`), volání `bridge.execute_step` v `cli.py:524`, odmítnutí bez `action` v `cli.py:501-510`, gate na `depends_on` v `cli.py:511-523`, exit kód 1 v `cli.py:542-555`. `DECISIONS_LOG_V5.md:61-108` (D2, „schváleno, implementováno“), bez `--insecure-legacy` (`DECISIONS_LOG_V5.md:66`), důsledek — `run` přestane fungovat pro citlivé akce bez schválení (`DECISIONS_LOG_V5.md:84-86`), a „vratná cesta k tichému průchodu nepřípustná“ (`DECISIONS_LOG_V5.md:108`).
- **Proč právě to [NÁVRH]:** dvě rozhraní proti jedné bezpečnostní rovině jsou testovatelná a umožňují porovnat chování obou klientů na stejném testovacím případu. Dva různé bezpečnostní plány by byly podle D10 nepřípustné; dva klienti téhož plánu jsou v pořádku.
- **Důsledek pro V6 [NÁVRH]:** `cyberbrain run` se testuje jako referenční klient. Každý bezpečnostní invariant se musí projevit i tam. Konkrétně: refuze bez `action`, gate na `depends_on`, exit kód 1 a absence tichého fallbacku se kontrolují v testu, který běží proti CLI, ne pouze proti MCP serveru.
- **Omezení [OVĚŘENO]:** `cyberbrain run` je podle `DECISIONS_LOG_V5.md:112-153` (D3) model-free — `--model` a `--lang` byly odstraněny, `ModelGateway.chat` byl odebrán z CLI (`DECISIONS_LOG_V5.md:88`, `:99`). Tento model-free charakter se v V6 nemění.

### D5 — Řetěz agentů: ty → PromptMaster → Orchestrátor → specializovaní subagenti

> PromptMaster přijme tvůj prompt, vylepší ho pro daný úkol, přeloží do angličtiny a pošle ho orchestrátoru. Předání je přímé, bez ručního gate kroku mezi nimi. Přesto se vylepšený prompt zapíše jako artefakt do `.kilo/context/handoff/` kvůli auditu, ne kvůli schvalování. Komunikace s vlastníkem zůstává česky (AGENTS.md), do LLM kontextu jde anglický artefakt.

- **Kontext [NÁVRH]:** „PromptMaster“ **není** feature Kilo — veřejně neexistuje jako taková funkce [VÝZKUM, `https://kilo.ai/docs`, 2. 10. 2026]. Nejbližší jsou Shared Prompt Libraries (enterprise/cloud) a Enhance Prompt [VÝZKUM]. V6 tedy PromptMaster staví jako vlastní agenta v `.kilo/agent/prompt-master.md`.
- **Proč právě to [NÁVRH]:** oddělení formulace zadání od jeho vykonání má dvě výhody, které jsou obě ověřitelné: (a) formulace se dá auditovat jako artefakt (viz §9.2), (b) sníží se riziko, že model začne plán dřív, než je zadání formulované. Rozhodnutí „bez ručního gate kroku“ odstraňuje zbytečnou latenci a zároveň odstraňuje místo, kde by se schválení dalo obejít.
- **Důsledek pro V6 [NÁVRH]:** `.kilo/context/handoff/` se stane adresářem artefaktů s pojmenováním podle data a úkolu. Zápis je povinný i tehdy, když je předání přímé. Jazyková pravidla jsou rozlišena: s vlastníkem česky (pravidlo `AGENTS.md`), do kontextu modelu anglicky.
- **Riziko, které D5 nevylučuje [NÁVRH]:** PromptMaster vylepšuje zadání, a tedy může zadání i zkreslit. Řetěz „ty → PromptMaster → orchestrátor“ proto potřebuje, aby originální zadání zůstalo dostupné pro audit vedle vylepšeného. Viz §14, invariant „žádné bezpečnostní rozhodnutí v promptu“.

### D6 — PromptMaster nesmí delegovat práci

> Orchestrátor je jediný, kdo volá Task tool a rozděluje úkoly. PromptMaster jen kvalitikuje zadání.

- **Kontext [VÝZKUM]:** v Kilo mají subagenti pevnou omezenou hloubku 1 — subagenti **nemohou** delegovat dál (`task: deny`, issue #8637, PR #8644 a #10137), 2. 10. 2026. D6 tedy vlastně popisuje to, co Kilo už vynucuje, a navíc přidává zákaz, aby PromptMaster nepředstíral delegování.
- **Proč právě to [NÁVRH]:** kdyby PromptMaster delegoval, vznikly by dva plánovače, což je podle D10 druhý orchestration path. Navíc by se zvýšil počet míst, kde se úkol rozdělí, a tím obtížnost auditu.
- **Důsledek pro V6 [NÁVRH]:** `prompt-master.md` má `permission.task = deny` explicitně. Orchestrátor je jediný agent s `permission.task = allow`, a má `mode: primary`.

### D7 — Scope: varianta A

> Jeden uživatelský scénář z `ROADMAP_V5.md:117-128` (P0) + Kilo jádro. Zbytek 20 fáz v4.1 se odsune.

- **Kontext [OVĚŘENO]:** P0 scénář v `ROADMAP_V5.md:117-128` má osm bodů: zobrazit konkrétní akci ke schválení (`:121`), ověřit identitu a policy **před každým podporovaným voláním nástroje** — žádný agent nesmí volat backend sandboxu napřímo (`:122`), zamítnutí / timeout / chybějící schvalovací infrastruktura / nedostupný sandbox = zavření akce (`:123`), workspace + git worktree a diff (`:124`), přerušení nesmí hlásit úspěch (`:125`), lokální persistentní audit (`:126`), historie + vysvětlení proč byla akce povolena nebo zamítnuta (`:127`), model/provider = model-free dle D3 (`:128`). Dále `ROADMAP_V5.md:140` (browser/GUI/MCP execution **nepatří do MVP**) a `ROADMAP_V5.md:151-153` (limity paměti, procesů, CPU, disku, inodeů).
- **Proč právě to [NÁVRH]:** 20 fáz v4.1 (`.kilo/context/Cyberbrain26_master_roadmapv4-1.md:1886-2170`, Phase 0 `:1888` až Phase 20 `:2157`) pokrývá horizontálně 21 oblastí a má nulové provedení. Fáze, které nelze dokončit, poškozují důvěryhodnost plánu více než jejich absence. Jeden scénář, který projde, je informativnější než dvacet scénářů, které jsou jen popsány.
- **Důsledek pro V6 [NÁVRH]:** v4.1 se nestírá. §4.3 mapuje, které části v4.1 V6 přebírá a které se odsouvají. §15 uvádí, že `ROADMAP_V5.md:151-153` (limity) je otevřená položka s vazbou na F7.
- **Rozpor, který je nutné zaznamenat [OVĚŘENO]:** P0 bod `:122` požaduje ověření identity a policy **před každým podporovaným voláním nástroje**, zatímco `ROADMAP_V5.md:140` říká, že MCP execution nepatří do MVP. Tyto dvě věty se nevylučují, ale vyžadují přesné rozlišení: „podporované volání nástroje“ v P0 znamená nástroje podporované CyberBrain26 (tedy `cyberbrain26_*`), nikoli libovolný MCP tool. [NÁVRH] Toto rozlišení musí být uvedeno v textu P0 scénáře, jinak je P0 scénář interně nejednoznačný.

### D8 — Testovací agent použije modelovou konfiguraci Kilo

> Testovací agent použije modelovou konfiguraci Kilo tak, jak ji Kilo používá teď (per-agent `agent.<jméno>.model` z `.kilo/kilo.jsonc`, s možností přepsat v frontmatter agentu — viz §12.4). Nepřidává se externí cloud model.

- **Kontext [VÝZKUM]:** v Kilo existuje klíč `subagent_model` v konfiguraci (PR #10443) a frontmatter agentů podporuje `model` a `variant` [VÝZKUM, `https://kilo.ai/docs`, 2. 10. 2026]. **Autoritativní pasáž pro mechanismus modelu je §12.4** — pokud by se tato věta a §12.4 rozcházely, platí §12.4.
- **[OVĚŘENO]** `agent.<jméno>.model` je **ve schématu** a je **per-agent** (mapa jméno → `AgentConfig` s polem `model`) — tedy deterministicky otestovatelné a auditovatelné v jednom souboru `.kilo/kilo.jsonc`.
- **[OVĚŘENO]** Globální `subagent_model` je **dokumentovaný klíč `kilo.jsonc`** (Kilo Code docs, „Model Selection Guide") a má vlastní pole v UI (Settings → Models → Subagent Model), **ale chybí v publikovaném `$schema`**, který má `additionalProperties: false`. **[NEOVĚŘENO]** zda CLI/validátor na neznámý top-level klíč spadne fatálně, nebo ho tiše ignoruje.
- **[NÁVRH]** D8 řešit přes **`agent.verifier.model`**, ne přes globální `subagent_model`. Důvod: `subagent_model` by prosil **všech** subagenty včetně těch pod testem, což je **opak požadavku D8**. Per-agent klíč dovolí dát LLM-judge jinou modelovou rodinu než agentovi pod testem, a je současně platný v `$schema`.
- **[HYPOTÉZA]** Konkrétní modelové ID není známé a nesmí být vymyšleno → **Gate 0 nesmí vybrat model sám**; modelové ID se doplní přes Settings → Models po rozhodnutí vlastníka. Do té doby zůstává tato položka [HYPOTÉZA].
- **[OVĚŘENO]** Docs: „Invalid selections fail instead of silently falling back" → **neplatné modelové ID selhává místo tichého fallbacku**, což je v souladu s **invariantem 1** (§14, žádný tichý přechod).
- **Proč právě to [NÁVRH]:** D8 je v souladu s invariantem „žádný tichý cloud fallback na placený provider“ (§14) — testovací agent nesmí do LLM-as-judge tahat model, který uživatel neplatí a neprovozuje. Současně to znamená, že testovací agent podléhá stejnému výpadku jako hlavní běh, což je nevýhoda, kterou je nutné v §12.7 řešit explicitně.
- **Následující problém, který D8 nevylučuje [NÁVRH]:** pokud je testovací agent na stejné modelové rodině jako agent, jehož kód posuzuje, dostáváme self-preference bias. Výzkum uvádí metodu bez zlaté reference, která snižuje self-preference bias o 31,5 % [VÝZKUM, `https://arxiv.org/abs/2604.22891`]. Řešení pro D8 je v §12.7 — detekce rodiny a fallback pravidla.
- **Co D8 neřeší [OVĚŘENO]:** D8 neřeší, zda je `.kilo/kilo.jsonc` v tomto repozitáři vůbec správně nakonfigurovaný — to je §12.4 a Gate 0 (§13.3). Kořenový `kilo.json` **neexistuje a nebude vytvářen** (§8.1), takže D8 má co číst jedině v `.kilo/kilo.jsonc`.

### D9 — „Agent Guard“ se v V6 nesmí používat jako název

> „Agent Guard“ jako název/marketingový slib se v V6 nesmí používat, dokud neprojde gate Etapy 0 z `ROADMAP_V5.md:96`. Do té doby se projekt jmenuje „CyberBrain26 — lokální bezpečnostní a policy vrstva pro Kilo agenty“. Etapa 0 nesmí blokovat technickou práci.

- **Kontext [OVĚŘENO]:** pracovní název „CyberBrain Agent Guard“ je v `ROADMAP_V5.md:17`; gate Etapy 0 je v `ROADMAP_V5.md:96`; rozhodovací brány po každé etapě jsou v `ROADMAP_V5.md:240-245`.
- **Proč právě to [NÁVRH]:** název „Guard“ vytváří očekávání ochrany proti nepřátelskému kódu, které současný systém nemá a podle §5 (riziko (i)) ani po přesunu na Kilo mít nebude. `AGENTS.md` to zakazuje i bez D9 („nepopsat Bubblewrap jako ochranu proti libovolnému nepřátelskému kódu“). D9 v tomto směru jen zpřesňuje rozsah zákazu na název produktu.
- **Důsledek pro V6 [NÁVRH]:** F11 je v §13 definována jako volitelná Etapa 0 z V5 (tržní validace), která **neblokuje** F1–F10. Název se v tomto dokumentu nepoužívá ani jednou; v §7 se používá výhradně „bezpečnostní a policy vrstva“.

### D10 — „Žádné tiché přechody“ a „jeden orchestration path“ jsou tvrdé invarianty

> „Žádné tiché přechody“ (`ROADMAP_V5.md:199`) a „jeden orchestration path“ (`ROADMAP_V5.md:196`) jsou pro V6 tvrdé invarianty.

- **Kontext [OVĚŘENO]:** obojí je v `ROADMAP_V5.md`, a `ROADMAP_V5.md:108` v `DECISIONS_LOG_V5.md` říká, že vratná cesta k tichému průchodu je nepřípustná. V kódu tomu odpovídá refuze bez `action` (`cli.py:501-510`), prázdná/neznámá akce = `SecurityError` (`extension_layer/registry_impl.py:304-311`) a deny-by-default pro neznámou akci (`security_plane/permission/__init__.py:190-208`).
- **Proč právě to [NÁVRH]:** tichý přechod je přesně ta vlastnost, která mění systém z „bezpečnostní vrstvy“ na „vizuálně bezpečný systém“. Změna bezpečnostního rozhodnutí musí být viditelná v auditu a v návratovém kódu.
- **Důsledek pro V6 [NÁVRH]:** §14 převádí obojí do explicitního seznamu invariantů a přidává k nim sedm dalších, které z nich vyplývají. F0 obsahuje test, který ověřuje, že se tichý fallback neobjevil — jako regresní pojistka proti tomu, že kdysi někdo přidá `except: pass` na bezpečnostné větvi.

---

## 3. Co je CyberBrain26 V6 v jedné větě a co V6 není

### 3.1 Jedna věta

**CyberBrain26 V6 je lokální bezpečnostní a policy vrstva pro Kilo agenty: Kilo je multi-agent jádro a UX, veškerá bezpečnostní logika (identita → politika → oprávnění → bezpečnostní kontroly → vyhodnocení → audit) zůstává v Pythonu za `AuthorizedExecutionService`, a jediná autorizovaná cesta ke spuštění kódu vede přes policy → approval → sandbox.** [NÁVRH]

### 3.2 Co V6 není — čtyři výslovná „není“

1. **Není to sandbox proti nepřátelskému kódu.** Všechny dostupné mechanismy — namespaces, seccomp, cgroups, Landlock — sdílejí host Linux kernel. Kernel 0-day v syscallu, kterého se dotkne kód agenta, prolne izolaci. Sandboxing je **redukce blast radius, ne absolutní bezpečnost**. [VÝZKUM] Tato věta je v tomto dokumentu použita doslova a znovu, protože `AGENTS.md` vyžaduje bubblewrap nepopisovat jako ochranu proti libovolnému nepřátelskému kódu a `SECURITY.md:215-218` / `PROJECT_STATUS.md:215-218` tentýž bod přiznávají jako otevřený. [OVĚŘENO]

2. **Není to multi-tenant platforma.** Nevzniká izolace mezi uživateli ani mezi tenanty, nevzniká per-tenant identity, per-tenant audit ani per-tenant kvóty. V6 je single-tenant, lokální prototyp. [NÁVRH] Důvod: D7 omezuje scope na jeden uživatelský scénář, a aktuální persistence je prostá SQLite bez šifrování (`data_plane/sqlite_store.py:150`, `PRAGMA foreign_keys/busy_timeout/synchronous=FULL` v `:152-154`; grep `sqlcipher|encrypt|cipher|keyring|at-rest` v `src/` = 0 výskytů) [OVĚŘENO] — což je pro více uživatelů na jednom stroji nedostatečné.

3. **Není to hotový produkt.** `docs/CAPABILITIES.md:140` uvádí „Has CI ever run? No.“, `git remote -v` je prázdný [OVĚŘENO], a `SECURITY.md:235-239` uvádí, že neexistuje žádná nezávislá revize. V6 se neprohlašuje za release-ready a neobsahuje prohlášení typu „production-ready“. [OVĚŘENO] Podle `docs/CAPABILITIES.md:145-146` platí pravidlo „If you cannot cite the line, the capability is not done“ — tento dokument proto nepovažuje žádnou schopnost za hotovou, dokud na ni není odkaz.

4. **Není to compliance certifikace.** V6 se neprohlašuje za shodu s EU AI Act, NIST AI RMF 600-1, MITRE ATLAS ani ISO 42001. NIST AI RMF 600-1 je sice vydán finálně 26. 7. 2024 (IPD 29. 4. 2024), DOI 10.6028/NIST.AI.600-1, a obsahuje přes 200–400 doporučených akcí ve formátu `GV-/MP-/MS-/MG-x.y-zzz` [VÝZKUM, `https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence`, 2. 10. 2026], a MITRE ATLAS má k datu 15. 9. 2026 208 technik, 16 tactics, 40 mitigací a 73 case studies [VÝZKUM, `https://atlas.mitre.org/`, 2. 10. 2026] — ale **soulad** s těmito rámci je tvrzení, které vyžaduje externí revizi, viz §15. V6 je k těmto rámcím **mapován**, ne certifikován. [NÁVRH]

### 3.3 Tři věci, které V6 naopak explicitně je

- Je to **jedno místo pravdy** pro bezpečnostní logiku: veškeré rozhodnutí „smí / nesmí“ se přijímá v Pythonu v `security_plane/` a `execution_plane/`, nikoli v Kilo permission. Kilo permission je UX potvrzení ([D3](§2), [NÁVRH]).
- Je to **fail-closed by default**: neznámá akce → `SecurityError`, chybějící schválení → `SecurityError`, nedostupný sandbox → `RuntimeError` ([OVĚŘENO](§1.3, `registry_impl.py:304-311`, `secure_gateway.py:112-121`, `bubblewrap_provider.py:129-134`)).
- Je to **lokální**: žádný cloud provider v cestě spuštění kódu, žádná síťová závislost pro práci s auditními daty. Výjimkou jsou nástroje výzkumu (`websearch`, `webfetch`) v research agentovi, u nichž je pravidlo tichého cloudu explicitně omezeno v §11.

---



## 4. Porovnání V6 vs ROADMAP_V5 vs v4.1

### 4.1 Přehledová tabulka

| Oblast | v4.1 | ROADMAP_V5 | V6 |
|---|---|---|---|
| **Účel** | Vizionářská architektura 21 oblastí, Phase 0–20 (`.kilo/context/Cyberbrain26_master_roadmapv4-1.md:1886-2170`) | Produkt s pracovním názvem „CyberBrain Agent Guard“ (`ROADMAP_V5.md:17`), vstupní Etapa 0 jako gate názvu (`:96`) | Lokální bezpečnostní a policy vrstva pro Kilo agenty; jeden P0 scénář [NÁVRH, D7, D9] |
| **Orchestrace** | Vlastní Python: `agents/orchestrator.py` (721 řádků) + `PtahBridge` | Stejná vlastní orchestrace, nově s invariantem „jeden orchestration path“ (`ROADMAP_V5.md:196`) | Kilo je jádro; `orchestrator.py` se nestává alternativou, ale tenkou vrstvou (D1, D6) [NÁVRH] |
| **Agenti** | Třídy Pythonu: `BaseAgent`, `PlannerAgent`, `CoderAgent`; `BaseAgent.authorizer` `agents/orchestrator.py:180` | Třídy Pythonu, beze změny | Deklarativní `.kilo/agent/*.md` s `mode` / `description` / `permission`, **bez `bash`** (D3) [NÁVRH] |
| **Bezpečnostní rozhodnutí** | §74 MASTER SECURITY PRINCIPLE `:1874-1882`: `AUTONOMY ONLY ABOVE: IDENTITY → POLICY → PERMISSIONS → SECURITY → EVALUATION → AUDIT → GOVERNANCE` | Stejné pořadí, znovu zapsané v `AGENTS.md` | Stejné pořadí, **kódově realizované a citované**; Kilo permission je UX, ne autorita (D3) [NÁVRH] |
| **Sandbox** | Namespace návrh bez odkazu na implementaci | Limity `ROADMAP_V5.md:151-153`; browser/GUI/MCP execution mimo MVP (`:140`) | Stejná jediná cesta `AuthorizedExecutionService` (`execution_plane/secure_gateway.py:82-169`) → `BubblewrapExecutionProvider` (`execution_plane/bubblewrap_provider.py:97`); chybí seccomp, Landlock, cgroup, PID/disk/inode kvót [OVĚŘENO] |
| **Persistence** | Datová a governance vrstva, návrh | Lokální persistentní audit (`ROADMAP_V5.md:126`) | Stejná; navíc podepsaný audit checkpoint mimo log (F7) [NÁVRH]; DB nešifrovaná (`data_plane/sqlite_store.py:150`) [OVĚŘENO] |
| **Eval / testování** | §10 Security Lab `:2044` | Nevlastní eval harness | `verifier.md` se třemi gaty, promptfoo / Inspect AI; LLM-as-judge **vyloučen z Gate 1** (§12) [NÁVRH] |
| **Deep research** | Phase 11 Deep Research / OSINT `:2057` | Neuvažováno odděleně | `deep-research.md`; `websearch` max 10 výsledků, bez vestavěného deep research režimu → rozklad na poddotazy (§11) [VÝZKUM] |
| **Licence a vendor závislost** | Vlastní, licence produktu neuvedena | Vlastní | **Nová silná závislost na Kilo** (MIT, `github.com/Kilo-Org/kilocode`), akvizice Anacondou 15. 7. 2026 [VÝZKUM] |
| **Instalační stopa** | Python balíček | Python + bubblewrap; Ubuntu 24.04 LTS (`ROADMAP_V5.md:106`) | Python + bubblewrap + **Node runtime** (`npm install -g @kilocode/cli`) [VÝZKUM]; `bwrap` verze se dnes neověřuje (`bubblewrap_provider.py:129`) [OVĚŘENO] |
| **Jazyk komunikace** | neuvedeno | `ROADMAP_V5.md:128` model-free dle D3 | S vlastníkem **česky** (`AGENTS.md`), do kontextu LLM **anglicky** (D5) [NÁVRH] |
| **Brána pokračování** | §76 Phase Exit Criteria `:2172-2185` | Rozhodovací brány po každé etapě `:240-245`; Etapa 0 `:96` jako gate názvu | F0–F11 s vstupem, výstupem a gate kritériem (§13); Etapa 0 z V5 = volitelná F11, neblokuje F1–F10 (D9) [NÁVRH] |

### 4.2 Co V6 přebírá z ROADMAP_V5

- **P0 uživatelský scénář `ROADMAP_V5.md:117-128` — to je scope D7.** Body: `:121` zobrazit konkrétní akci ke schválení; `:122` ověřit identitu a policy **před každým podporovaným voláním nástroje** a žádný agent nesmí volat backend sandboxu napřímo; `:123` zamítnutí, timeout, chybějící schvalovací infrastruktura a nedostupný sandbox = zavření akce; `:124` workspace + git worktree a diff; `:125` přerušení nesmí hlásit úspěch; `:126` lokální persistentní audit; `:127` historie plus vysvětlení, proč akce byla povolena, zamítnuta nebo vyžádala schválení; `:128` model/provider = model-free. [OVĚŘENO] V6 přebírá všech osm bodů beze změny a realizuje je přes dva klienty téhož security plane (§6) [NÁVRH].
- **`ROADMAP_V5.md:196` „Jeden orchestration path.“ a `:199` „Žádné tiché přechody.“** Převzato jako tvrdé invarianty D10 (§14). [OVĚŘENO] → [NÁVRH]
- **`ROADMAP_V5.md:151-153` limity paměti, procesů, CPU, disku a inodeů.** Převzato do F7 hardening. [OVĚŘENO] → [NÁVRH] Dnes nejsou realizované vůbec: `_limited_command` nastavuje jen `RLIMIT_CPU`, `RLIMIT_AS`, `RLIMIT_FSIZE` python skriptem, který pak volá `os.execv` (`execution_plane/bubblewrap_provider.py:220-244`, `:225-232`), tedy limity nastavuje samotný child poté, co už běží; grep v tomto souboru neukazuje žádné `--seccomp`, `cgroup`, Landlock/LSM, PID limit ani disk/inode limit [OVĚŘENO].
- **`ROADMAP_V5.md:96` gate Etapy 0.** Zachováno jako volitelná F11; dle D9 neblokuje technickou práci F1–F10. [OVĚŘENO] → [NÁVRH]
- **`ROADMAP_V5.md:106` D1 Ubuntu 24.04 LTS.** Potvrzeno, ale `docs/product/DECISIONS_LOG_V5.md:16` uvádí stav „čeká na implementaci“ a `:50` a `:53` nechávají otevřené pinování `bwrap` a cgroup/limity/kvóty. [OVĚŘENO] → [NÁVRH] V6 přebírá Ubuntu 24.04 LTS jako cílovou platformu a otevřené body přesouvá do F0 (rozhodnutí o baseline) a F7 (realizace limitů).
- **`ROADMAP_V5.md:240-245` rozhodovací brány po každé etapě.** Převzato do §13 jako struktura gate kritérií (vstup / výstup / gate). [OVĚŘENO] → [NÁVRH]
- **`docs/product/DECISIONS_LOG_V5.md:61-108` D2 — `cyberbrain run` fail-closed.** Žádný `--insecure-legacy` (`:66`), důsledek — `run` přestane fungovat pro citlivé akce bez schválení (`:84-86`), vratná cesta k tichému průchodu nepřípustná (`:108`). [OVĚŘENO] To je základ D4. V6 navíc přebírá existující kódové projevy: refuze bez `action` (`src/cyberbrain26/cli.py:501-510`), gate `depends_on` (`cli.py:511-523`) a exit kód 1 (`cli.py:542-555`) [OVĚŘENO] → [NÁVRH] test proti oběma klientům.
- **`docs/product/DECISIONS_LOG_V5.md:112-153` D3 — `run`/`plan` model-free**, `--model` a `--lang` odstraněny, `ModelGateway.chat` odebrán z CLI (`:88`, `:99`). [OVĚŘENO] Přebírá se do D4 beze změny.
- **`ROADMAP_V5.md:140` browser/GUI/MCP execution nepatří do MVP.** V6 toto omezení **zpřesňuje**: MCP vstupuje jako *security* rozhraní, ne jako *execution* UI. Exekuce zůstává v `execution_plane` a je jediná autorizovaná cesta (`execution_plane/secure_gateway.py:82-169`) [OVĚŘENO] → [NÁVRH]. Tím se vyřeší i potenciální rozpor mezi `:122` (identita a policy před každým podporovaným voláním nástroje) a `:140` (MCP mimo MVP): „podporované volání nástroje“ v P0 znamená nástroje podporované CyberBrain26 (`cyberbrain26_*`), nikoli libovolný MCP tool. [NÁVRH]

### 4.3 Co V6 přebírá z v4.1

- **§74 MASTER SECURITY PRINCIPLE `:1874-1882`** — `AUTONOMY ONLY ABOVE: IDENTITY → POLICY → PERMISSIONS → SECURITY → EVALUATION → AUDIT → GOVERNANCE`. [OVĚŘENO] V6 to zachovává doslova; je to osa §6 a jedno místo pravdy. [NÁVRH]
- **§63 threat model `:1663-1685`** (prompt injection, tool poisoning, zákeřné MCP servery, excessive agency, exfiltration, supply chain) a **§65 zero-trust `:1719`**. [OVĚŘENO] Převzato do registru agentů (§10) a do threat modelu, **rozšířeno o tři nové třídy hrozeb**, které ve v4.1 nejsou: Kilo Memory jako kanál prompt injection, MCP tool poisoning a rug pull, a Kilo jako vendor závislost (§5). [NÁVRH]
- **§75 `:1886-2170` Phase 0–20 — odsouvá se (D7), ale není zrušeno.** [OVĚŘENO] → [NÁVRH]

| Fáze v4.1 | Umístění v V6 |
|---|---|
| Phase 0 Forensic Audit `:1888` | absorbováno do **F0** (důvěryhodný baseline, rozhodnutí o 46 necommitnutých položkách) |
| Phase 1 `:1910`, Phase 2 `:1925` | absorbováno do **F0/F1** (stabilizace, Kilo základ, permission baseline) |
| Phase 3 Security Foundation `:1936` | absorbováno do **F1–F3** (permission baseline, PromptMaster, MCP server) |
| Phase 4 Modular Architecture `:1949-1978` | absorbováno do **F0/F1**, zejména zákaz `:1978` — žádný core module nesmí importovat konkrétní external provider implementation přímo; V6 rozšiřuje zákaz na MCP SDK, které smí importovat jediný adaptér |
| Phase 5 Model Layer `:1982` | odloženo (mimo P0 scope) |
| Phase 6 Agent Layer `:1995` | absorbováno do **F4** (Orchestrátor + registr agentů) |
| Phase 7 Execution Layer `:2006` | absorbováno do **F3/F5** (MCP nástroje, execuce přes `AuthorizedExecutionService`) |
| Phase 8 Data & Memory `:2019` | odloženo, s výjimkou audit persistence (F7) |
| Phase 9 AI Firewall `:2031` | absorbováno do **F7** jako **otázka**, ne jako hotová věc — `AIFirewall` (727 řádků, `security_plane/firewall/__init__.py:155`) není v cestě spuštění ani v egressu [OVĚŘENO] |
| Phase 10 Security Lab `:2044` | absorbováno do **F5** (verifikační agent + eval harness), s výslovným zákazem LLM-as-judge v Gate 1 |
| Phase 11 Deep Research `:2057` | absorbováno do **F6** (`deep-research.md`) |
| Phase 12–20 `:2068`–`:2157` | odloženo (včetně Governance `:2120`, Enterprise `:2134`, Cross-platform `:2146`, Production `:2157`); důvod: předpokládají více uživatelů, více platforem nebo provoz mimo lokalitu, což §3 vylučuje |

- **§76 Phase Exit Criteria `:2172-2185`** — functional, security, privacy, performance, coverage, docs, dependency, migration. [OVĚŘENO] Převzato jako **šablona gate kritérií** v §13. [NÁVRH] V6 ji navíc rozšíří o dvě položky specifické pro Kilo integraci: test proti oběma klientům (MCP i CLI) a test proti tichému fallbacku.

---

---

# Sekce 5. HLAVNÍ RIZIKA: V6 vs V5 vs v4.1

Tato sekce je explicitní požadavek vlastníka — odpovídá na otázku, co může V6 pokazit oproti V5 a současnému prototypu v4.1. Hodnocení pravděpodobnosti a dopadu níže jsou **odhady [HYPOTÉZA]**, nikoli výsledky měření; stav implementace je **ověřený [OVĚŘENO]** přímým čtením kódu. Rizika jsou hodnocena vůči cíli V6, ne vůči v4.1 samotnému.

## 5.1 Souhrnná tabulka rizik

H = vysoká, S = střední, N = nízká. Pravděpodobnost i dopad jsou [HYPOTÉZA].

| Oblast | Pravděpodobnost | Dopad | Vztah k V6 | Jak se V6 staví |
|---|---|---|---|---|
| Bezpečnost | S | H | zhoršuje | Rozhodovací logika zůstává v Pythonu (`security_plane/`, 2 466 řádků v `actions.py` + `permission` + `policy` + `approval` + `audit` + `quality_gates`), deklarativní `.md` agenti jsou popis, ne autorita. Policy test běží nad `.md` jako kódem a ověřuje, že deklarovaná permission je subset serverové. |
| Technický dluh | H | S | nemění | Dluh se neliší, jen se přesouvá: z `.md` do Pythonu, kde už je nástroj na testy (pytest, coverage), typing a refaktor. Necílený vznik nových velkých modulů v `security_plane/` je hlavní riziko této oblasti. |
| Vendor riziko (Kilo) | S | H | zhoršuje | [VÝZKUM] 7 minor verzí za ~8 měsíců, `orchestrator` mode deprecated, MCP SDK v2 přejmenování `FastMCP`→`MCPServer`. [NÁVRH] Integrace izolovaná v jednom MCP adaptačním modulu, závislost jen na `mcp.{name}` config a stabilním frontmatteru, žádný fork; `cyberbrain run` CLI jako jediný použitelný klient při výpadku Kila. |
| Produktové | S | S | zlepšuje | Jeden spustitelný produkt místo dvou klientských cest. [HYPOTÉZA] Menší riziko než u v4.1, kde je `cyberbrain run` i `cyberbrain mcp` vedle sebe a uživatel si vybírá bez srozumitelného pravidla. |
| Procesní | S | S | zlepšuje | Sekce 4 sjednocuje model z V5 (modulární architektura) s Phase 0–4 z v4.1 místo paralelního vývoje dvou plánů. Riziko zůstává v tom, že Phase 0 není hotová a rozhodnutí o 46 necommitnutých položkách visí. |
| Regulační | N | H | nemění | [NÁVRH] Sekce 14 zachovává lokální-first profil a zákaz tichého odesílání dat ke cloudovému poskytovateli; dopad roste jen nepřímo přes závislost na externím CLI, proto je Kilo odstraněno z bezpečnostní rozhodovací cesty. |

## 5.2 Bezpečnostní plocha se posouvá do deklarativních `.md` agentů

**Otázka vlastníka:** je po přesunu logiky z `.md` do Pythonu méně, nebo více auditovatelné?

[OVĚŘENO] Aktuální stav kódu — rozhodovací logiku drží Python, ne markdown:

| Modul | Řádky |
|---|---|
| `src/cyberbrain26/security_plane/actions.py` | 337 |
| `src/cyberbrain26/security_plane/permission/__init__.py` | 328 |
| `src/cyberbrain26/security_plane/policy/__init__.py` | 428 |
| `src/cyberbrain26/security_plane/approval/__init__.py` | 457 |
| `src/cyberbrain26/security_plane/audit/__init__.py` | 324 |
| `src/cyberbrain26/security_plane/quality_gates/__init__.py` | 592 |
| **celkem** | **2 466** |

[OVĚŘENO] Tedy přibližně 2,5 tisíce řádků Pythonu (řádově ~2 000) drží logiku, kterou v čistě markdown variantě držely `.md` soubory.

**Argumenty pro „méně auditovatelné“:** v kódu je implicitní stav, `if` vnořené v desítkách úrovní a výjimky, které nelze přehlédnout při čtení deklarace agenta. Markdown je lineární a kryptický bug v něm je vidět rychleji. Bez `grep` a type checkeru se v `.md` souboru dá ztratit permission, která nikde jinde není.

**Argumenty pro „více auditovatelné“:** Python je strojově ověřitelný — existuje na něj pytest, coverage, mypy a review diffu. Markdown není kód, takže se na něj vztahuje jen eye review, jehož pokrytí nelze změřit. Testy v `quality_gates/` a `permission/` dnes dokážou vyjádřit invarianty, které v deklaraci `.md` nelze vyjádřit vůbec.

**Závěr:** čistě v počtu řádků je to přesun problému, ne jeho řešení — auditovatelnost získáváme jen tehdy, pokud má ty invarianty napsané jako testy. [NÁVRH] Proto V6 přidává **policy test nad `.md` jako kódem**: deklarace agenta se parseuje a kontroluje jako vstupní formát, ne jako autorita. Dvě tvrzení, která musí test držet:

1. **Žádný agent nemá `bash`.** Deklarativní permission set agentů je striktně podmnožinou sady, kterou server povoluje; `bash` a jiné efektové nástroje jsou přes frontmatter nedosažitelné a dosáhne se jich jen přes `AuthorizedExecutionService` s explicitním approval průchodem.
2. **Deklarovaná permission je subset serverové.** Každá permission uvedená v `.md` musí existovat v serverovém registru; chybějící nebo neznámá permission je chyba loadu, ne tiše ignorovaná položka.

Tím se `.md` vrátí do role deklarace s kontrolovanou gramatikou: bezpečnostní rozhodnutí zůstává v `security_plane/`, kde na něj lze spustit test, a deklarace je pouze návrh, který server při načtení ověří a případně odmítne.

## 5.3 Kilo jako závislost

[VÝZKUM] Chronologie zjištěná z veřejných zdrojů, stav k 2. 10. 2026:

| Událost | Datum |
|---|---|
| Anaconda akvizice Kilo Code | 15. 7. 2026 |
| CLI 1.0 | 3. 2. 2026 |
| MCP SDK v2 — přejmenování `FastMCP` → `MCPServer` | 3. 2. 2026 |
| `orchestrator` mode deprecated | 2. 4. 2026 |
| VS Code rozšíření GA | 2. 4. 2026 |
| Kilo CLI **v7.6.2** (běžící verze na tomto stroji) | [OVĚŘENO] ověřeno runtime 2. 10. 2026 |

Od CLI 1.0 do běžící verze **v7.6.2** [OVĚŘENO: ověřeno runtime na tomto stroji 2. 10. 2026 — dříve uvedená hodnota 7.8.3 byla chybná] uplynulo ~8 měsíců a 6 minor verzí, tedy zhruba jeden release měsíčně [VÝZKUM]. Během stejného okna se změnilo jméno MCP SDK třídy, `orchestrator` mode byl deprecated a rozšíření dosáhlo GA. Jde o tempo a typ změn, které jsou běžné před i po akvizici, ale které nelze ignorovat, protože V6 staví na Kilo jako na vrstvě klienta.

[NÁVRH] Důsledek pro architekturu, ve třech pravidlech:

1. **Integrace jen v jednom MCP adaptačním modulu — nikdy fork.** Veškerá vazba na Kilo CLI se izoluje do jediného modulu; zbytek systemu zná jen abstraktní rozhraní nástrojů. Jakýkoli fork Kila by znamenal vlastní bezpečnostní audit cizího kódu a je vyloučen.
2. **Závislost jen na `mcp.{name}` config a stabilním frontmatteru.** Sjednocení `FastMCP`→`MCPServer` se nesmí dotknout našeho kódu: jméno serveru, pole nástrojů a `tools/capabilities` jsou jediné body styku, a i ty čteme přes konfigurační mapu, ne přes import SDK.
3. **Pokud Kilo zmizí, `cyberbrain run` CLI (D4) je jediným použitelným klientem.** Řádky CLI jsou v tomto roadmapu chápány jako feature s vlastními gate kritérii, ne jako alternativa „kdybysme Kilo neměli“ — offline scénář, který tím pokrýváme, je reálný, nikoli hypotetický.

---

## 5.4 Prompt injection a prompt injection přes Kilo Memory

**Nové riziko V6, které ve v4.1 neexistuje** — označuji výslovně, protože se vlastním pojmenováním schová do stejné kategorie jako „prompt injection“ obecně, ale útočí na jinou vrstvu.

[OVĚŘENO] Kilo Memory: nástroje `kilo_memory_save` / `kilo_memory_recall`, opt-in na projekt, lokální úložiště v `~/.local/share/kilo/memory/`, project-scoped, 4 režimy (`search`, `typed`, `digest`, `catalog`). **Personal/user-level memory není podporována** [VÝZKUM] — to zmenšuje blast radius (jiný projekt paměť nečte), ale ne odstraňuje riziko, protože sdílená je v rámci projektu a napříč agenty.

[VÝZKUM] Podklady k riziku, s URL a datem:

| Zdroj | Datum | Co z něj plyne |
|---|---|---|
| Cross-agent memory poisoning — `https://arxiv.org/abs/2608.00426` | 1. 8. 2026 | Škoda se propaguje do sdílené paměti a **při škodě není viditelná komunikační hranice** — zpráva už byla zapsána jako „paměť“. MAPLE-Guard snižuje ASR 38,2 % → 0,9 % (LongMemEval) a 34,7 % → 0,2 % (AppWorld). |
| Memory poisoning s přívlastkem — `https://arxiv.org/abs/2606.30566` | červen 2026 | Detekce dosahuje AUC 0,956–0,99, ale **100 % FP na benignních případech** → samostatné blokování paměti není použitelné, jen by zablokovalo běžný provoz. |
| Misattribution gap — `https://arxiv.org/pdf/2605.22842v1` | 27. 5. 2026 | Všechny filtry hodnotí jednotlivé vstupy jako „safe“, ale **složený výstup porušuje politiku** → per-item kontrola nestačí, je potřeba kontrola na výstupu. |
| FARMA — `https://arxiv.org/abs/2607.05029` | červenec 2026 | Falsifikace reasoning logu, ASR až 100 %. |
| Lethal trifecta, Simon Willison — `https://simonwillison.net/2025/Jun/16/the-lethal-trifecta` | 16. 6. 2025 | Součet uniklých soukromých dat + přístup k nestrženému obsahu + odchozí kanál = injekce se stane exfiltrací. |
| OWASP **ASI06** Memory & Context Poisoning; MITRE ATLAS `ATLAS-2026.09` (208 technik) | 15. 9. 2026 | Normalizované názvosloví: `AML.T0080` AI Agent Context Poisoning, subtechniky `.000` Memory a `.001` Thread. |

[NÁVRH] Pět pravidel, která musí V6 držet:

1. **Kilo Memory je cache, ne zdroj pravdy.** Obsah paměti se nikdy nepoužije jako autorita pro bezpečnostní rozhodnutí; pouze jako kontext, který podléhá stejnému policy checku jako vstup od uživatele.
2. **Zákaz `kilo_memory_save` pro agenty s nedůvěryhodným vstupem.** Kdokoliv bere data z PromptMasteru, PromptInjectionAudit nebo jiných externích zdrojů, má zápis do paměti zakázán na úrovni permission setu, ne na úrovni důvěry v promptu.
3. **Provenance inspirovaná CaMeL.** Každý paměťový záznam nese původ (kdo, přes jaký nástroj, kdy); záznam bez provenance se načte jako nedůvěryhodný a nesmí ovlivnit policy.
4. **Prompt egress jako druhá linie, ne jako náhrada vstupní kontroly.** Protože filtry na vstupu vykazují 100 % FP, výstupní kontrola je povinná vrstva, ne volitelné posílení.
5. **Kontrola seskupeného výstupu místo per-item.** Misattribution gap znamená, že schvalovat položky samostatně je v tomto modelu nebezpečné; schválení musí být nad výsledkem, ne nad součtem.

## 5.5 `bash` agenta při chybě v `permission`

Scénář: nástroj `bash` má plná host práva; chyba v `permission` — příliš široký glob v `allow` nebo chybějící blok `deny` — by mohla umožnit běh kódu přímo na hostu místo sandboxu.

[OVĚŘENO] Přesný stav po F1: `.kilo/kilo.jsonc` **existuje a je konfigurovaný**; `.kilo/agent/` **existuje** a obsahuje `promptmaster.md`, `orchestrator.md`, `verifier.md`. [OVĚŘENO] **MCP server v repu stále NEEXISTUJE** — `src/cyberbrain26/mcp/` není a `mcp` SDK není v `dependencies` ani v žádném extra v `pyproject.toml`; to je výstup F3. [OVĚŘENO] Kořenový `kilo.json` se **nevytváří** (§8.1) — `.kilo/kilo.jsonc` má v precedence před kořenovým souborem a oba by byly deep-merge, tedy dva překrývající se zdroje pravdy. Tvrzení „žádný `.kilo/agent/` ani `kilo.json` v repu neexistuje“ tedy po F1 **neplatí** a riziko je nyní **živé**, ne jen dopředné; řeší ho §8.2 + Gate 0 (§13.3). [OVĚŘENO] Jediná cesta exekuce je `BubblewrapExecutionProvider` (`bubblewrap_provider.py:97`), kde `RuntimeError("refusing to run code without a sandbox")` (`:129-134`) znamená, že bez sandboxu se kód nespustí vůbec — fail-closed je správně a nesmí se oslabit.

[VÝZKUM] Podklady:

| Zdroj | Datum | Co z něj plyne |
|---|---|---|
| Anthropic, self-hosted sandboxes — `https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-security` | 2025–2026 | Doporučení je radikální: „disable the `bash` tool … give it no custom tool that writes to the sandbox's filesystem“ — sandbox bez `bash` a bez vlastního zapisovacího nástroje. |
| Incident `allowed-tools` místo `tools` — `https://github.com/anthropics/claude-code/issues/27099` | 20. 2. 2026 | Překlep v konfiguraci nechal subagenta lovit credentialy: 85 tool callů, z toho 47× Bash. Klíčové: chyba v poli konfigurace se projevila jako plný přístup, ne jako selhání loadu. |
| OWASP MCP Top 10 | 2025–2026 | `MCP02 Privilege Escalation via Scope Creep` — růst scope nástroje je sám o sobě eskalace. |
| CSA Agentic MCP Best Practices | 2026 | Scope má být na úrovni jednotlivého nástroje, ne celého serveru. |

[NÁVRH] Opatření:

1. **Scope na úrovni toolu, nikoli celého MCP serveru.** Server, který vrací i jeden `bash`-like nástroj, nesmí být přidělen agentovi, který naopak `bash` nesmí.
2. **Pinning konfigurací `permission` per agent (D3).** Permission set je součástí deklarace agenta a mění se jen přes review, ne za běhu; jinak je chyba v `allow` globu trvalá a těžko dohledatelná.
3. **JIT eskalace.** Jakékoli rozšíření scope — i jednorázové — vyžaduje schválení v okamžiku požadavku s auditním záznamem; implicitní dědění scope od hostitelského agenta je zakázáno.
4. **Negativní testy na konfiguraci.** Načtení agenta musí odmítnout neznámou permission i `allow` glob mířící na citlivé cesty — jako chyba loadu, ne jako varování (viz incident `allowed-tools` výše).

## 5.6 MCP tool poisoning a rug pull

Riziko, které nelze odhalit kontrolou našeho kódu: útočník nemusí změnit implementaci nástroje, stačí změnit jeho `description` — text, který model čte jako instrukci.

[VÝZKUM] Podklady:

| Zdroj | Datum | Co z něj plyne |
|---|---|---|
| Invariant Labs, MCP Tool Poisoning | 1. 4. 2025 | Skryté instrukce v poli `description` nástroje; tři podoby: **tool poisoning** (instrukce v popisu), **rug pull** (změna popisu *po* schválení a instalaci), **shadowing** (změna popisu důvěrného nástroje, aby jej přepsal). `https://owasp.org/www-community/attacks/MCP_Tool_Poisoning` |
| OWASP MCP Top 10 | 2025–2026 | `MCP03 Tool Poisoning` a `MCP04 Software Supply Chain` jako samostatné položky top 10. `https://owasp.org/projects/mcp-top-10` |
| MITRE ATLAS | 2025–2026 | Technika `AML.T0110` AI Agent Tool Poisoning, subtechniky `.000`/`.001`/`.002` (tool poisoning / rug pull / shadowing). |

Kořen problému: **trust gap mezi connect-time a runtime** — uživatel schvaluje popis nástroje v okamžiku připojení, ale prompt běží s aktuálním popisem, který už nikdo neviděl.

[NÁVRH] V6:

1. **Snapshot při connect-time.** Název a popis každého nástroje se při připojení MCP serveru uloží jako immutable snapshot s hashem; hash vstupuje do auditní stopy jako součást identity nástroje.
2. **Změna popisu = změna politiky.** Rozdíl mezi uloženým a aktuálním hashem vyžaduje nové schválení a zápis do auditu; nástroj se do té doby nepoužije (fail-closed, ne varování).
3. **`mcp-scan` jen read-only a lokálně.** Ve výchozím stavu odesílá metadata na `invariantlabs.ai`, což je v našem threat modelu únik dat; povolit výhradně s `read-only` a `--local-only`, jinak nástroj nepoužívat.

## 5.7 Node runtime jako instalační závislost

[VÝZKUM] Kilo CLI je npm balíček `@kilocode/cli` → jeho instalace vyžaduje Node.js i npm. Pro `cyberbrain run` CLI (D4) však stačí samotný Python; žádný kód v tomto bodě nepotřebuje runtime Kila.

[NÁVRH] V6 rozdělí instalační stopu na dvě vrstvy:

| Vrstva | Obsah | Požadavky |
|---|---|---|
| **Základ** | `cyberbrain run` CLI, MCP server, security plane, sandbox | Python 3.11+ a `bwrap` |
| **Volitelná** | Kilo jako řídicí klient | navíc `npm install -g @kilocode/cli` a `.mcp.json` |

Důsledek: instalace základu nesmí tahat Node runtime, a CI ani dokumentace nesmí uvádět `npm` jako podmínku pro běh. Testy, které vyžadují Kilo, se označí jako volitelné a nesmí blokovat hlavní gate.

## 5.8 `PtahBridge` bez authorizeru a mrtvý kód

[OVĚŘENO] `PtahBridge` nepřiřazuje authorizer — grep `authorizer|Authorizer` v `src/cyberbrain26/orchestration/ptah_bridge.py` = 0 výskytů. Přitom adaptér existuje: `DispatcherAuthorizer` v `src/cyberbrain26/agents/orchestrator.py:108-146` (port `:90`), zatímco `BaseAgent.authorizer` zůstává `None` (`:180`). Chybějící authorizer vede k odmítnutí, ne k autorizaci (`orchestrator.py:220-253`, `:233-236`). **Busem doručené `*_TASK_REQUEST` jsou tedy odmítnuty, ne autorizovány** [OVĚŘENO] — fail-closed je správné, ale znamená to, že busová cesta pro tasky je fakticky nefunkční, ne jen neautorizovaná.

Mrtvý kód [OVĚŘENO]:

- `src/cyberbrain26/control_plane/api/__init__.py` — 450 řádků, **0 importů z `src/`**; jediný import v repu je `tests/test_api_gateway.py:20`.
- `src/cyberbrain26/control_plane/registry/__init__.py` — 246 řádků, 0 importérů v repu; `extension_layer/registry_impl.py` používá `InMemoryAgentRegistry` z `extension_layer/agent_registry.py:31`, ne z control_plane.

[NÁVRH] F9 odstavitelné:

1. **Authorizer pro busem tasky.** Buď PtahBridge dostane injektovaný authorizer, nebo chybějící authorizer zůstane `None`→`deny` jako dnes — ale rozhodnutí musí být záměrné a zapsané, ne vedlejší důsledek.
2. **Smazat duplicitní moduly.** `control_plane/api` a `control_plane/registry` jako duplicita s `extension_layer` — kandidáti na smazání, ne na dlouhodobé údržování. Smazat až po ověření, že `tests/test_api_gateway.py` nepokrývá cestu, kterou někdo používá.

## 5.9 Vlastní orchestrátor ≠ paralelní path

[D3/D6] Orchestrátor rozděluje úkoly přes Task tool, ale **nesmí** se stát druhou orchestration cestou. Rozhodnutí je architektonické: dvě cesty znamenají dvě sady auditních stop a dva zdroje pravdy pro to, co bylo povoleno.

[NÁVRH] V6 architektura:

1. **Jediný orchestration path je Kilo Task tool.** Veškeré rozdělení práce jde touto cestou; alternativní plánování v našem kódu neexistuje.
2. **Orchestrátor je primary agent**, ne speciální runtime režim: frontmatter `mode: primary` plus explicitní pravidla delegace, s tvrdým limitem **žádné rekurze hloubky > 1** (sub-agent nesmí dělit práci dál).
3. **Nepoužívat Kilo `Orchestrator Mode`** — deprecated od 2. 4. 2026, viz §5.3; závislost na deprecated režimu by vnesla funkční riziko do bezpečnostně kritické cesty.
4. **CaMeL** (`https://arxiv.org/abs/2503.18813`, 25. 3. 2025) je inspirací pro provenance vrstvu v F7 — každý delegovaný úkol nese původ a odpovídající policy rozhodnutí.

## 5.10 Coverage `fail_under = 60`

[VÝZKUM] Aktuálně cca 66 % branch coverage, s `fail_under = 60` v `pyproject.toml:233`. Komentář v `pyproject.toml:225-232` to číslo záměrně popisuje jako nástroj na zastavení **regrese**, nikoli jako aspiraci.

[NÁVRH] Pro bezpečnostní projekt je 60 % celkové krytí nedostatečné:

1. **Oddělit security plane od zbytku.** `fail_under` = **80 % pro security plane** (identity → politika → oprávnění → sandbox), **70 % celkem**.
2. **Doplnit chybějící testy**, prioritně: deklarativní agenti (§5.2) a fail-closed větev bez bwrap (`.github/workflows`, kolem `:175-198`).
3. **Security review při poklesu.** Jakýkoli pokles pod threshold je review podmínka pro merge, ne jen červená pipka v CI.
4. **Zvyšovat po malých krocích.** Jak výslovně požaduje komentář v `pyproject.toml`, nikdy ve stejném commitu, který jinde sníží naměřenou hodnotu.

---

## 6. Cílová architektura V6

[OVĚŘENO] Diagram popisuje požadovaný cílový stav; jednotlivé kroky jsou roadmapové, ne existující implementace.

```text
 Kilo CLI  /  VS Code
 (Kilo Memory, git worktrees, Task tool)
        │
        │  žádné `bash`, žádný přímý shell
        ▼
 ┌──────────────────────────────────────────────────────────┐
 │ MCP server CyberBrain26 — `cyberbrain26_*` nástroje      │
 └──────────────────────────────────────────────────────────┘
        │
        │                          ┌───────────────────────────┐
        │                          │ `cyberbrain run` CLI (D4) │
        │                          │ druhý klient, stejná      │
        │                          │ security plane            │
        │                          └────────────┬──────────────┘
        │                                       │
        ▼                                       ▼
 ┌──────────────────────────────────────────────────────────────┐
 │ security plane (jediné místo pravdy, Python)                   │
 │                                                              │
 │  identita → politika → oprávnění → bezpečnostní kontroly →      │
 │             vyhodnocení → audit                               │
 └───────────────────────────┬──────────────────────────────────┘
                             ▼
              AuthorizedExecutionService
                             │
                             ▼
        BubblewrapExecutionProvider  (fail-closed)
        bez bwrap: RuntimeError("refusing to run code
                     without a sandbox")
        bubblewrap_provider.py:129-134
                             │
                             ▼
                  ┌────────────────────┐
                  │  auditd            │  ground truth
                  │  mimo PID namespace│  (nelze přepsat
                  └────────────────────┘   zevnitř sandboxu)
```

[NÁVRH] Tři závěry:

1. **Jedno místo pravdy.** Veškerá logika „smí / nesmí" zůstává v Pythonu — `security_plane/permission/__init__.py:91` (`ACTION_SCOPE_MAP`), `:170-188` (explicitní deny pro nescopeované sensitivní akce), `:190-208` (deny-by-default pro neznámé akce) a `execution_plane/secure_gateway.py:82-169`. Kilo `permission` v `.kilo/kilo.jsonc` je pouze UX potvrzení, nikoli místo rozhodování.
2. **Kdo rozhoduje autoritativně.** Kilo `permission` (allow / ask / deny) je vstupní filtr pro UX. Autoritativní je bezpečnostní vrstva CyberBrain26, kterou Kilo konfigurací přepsat nemůže; `allow` v `.kilo/kilo.jsonc` neobejde ani identitu, ani policy, ani sandbox.
3. **Co je mimo DIL.** Pravdu o tom, co se skutečně stalo, může přepsat jen `auditd` běžící mimo PID namespace. `security_plane/audit/__init__.py:271` je uchovávání lokální evidence, ne ground truth — zevnitř DIL je přepisatelná. `AIFirewall` (`security_plane/firewall/__init__.py:155`) musí být buď zapojen do cesty, nebo smazán (§5.8); mezitřetí stav, kdy existuje, ale nikdo ho nevolá, je nejhorší možný.

## 7. Katalog OSS modulů — reuse rozhodnutí

Poznámka k poli „verze (datum)": výzkum potvrdil čísla verzí, nikoli data vydání; kde datum nebylo
výzkumem potvrzeno, je uvedeno `—`. Pole „stav licence" vyjadřuje, zda bylo možné licenci jednoznačně
přiřadit ke známé permisivní licenci; u `není ověřena` je právní posouzení závazný krok před jakýmkoli
zapojením. Verdikt je rozhodnutí pro V6, ne verdikt kvality knihovny.

| Knihovna / nástroj | Verze (datum) | Licence | Stav licence | Verdikt | Vrstva V6 | Proč |
|---|---|---|---|---|---|---|
| PydanticAI | 2.53.0 (—) | Apache-2.0 | ověřená | použij opatrně | orchestration | [VÝZKUM] Nejlepší typování a DI pro Pydantic-based V6, ale přichází s vlastním execution loopem a tool vrstvou → hrozí druhá autoritativní cesta paralelně k našemu orchestrátoru. Použít jen jako schéma/validace, ne jako běžící agent loop. |
| OpenAI Agents SDK | 0.22.3 (—) | MIT | ověřená | nedoporučuj | sbližující se jen jako inspirace | [VÝZKUM] Vázaný na OpenAI API a cloudové handoffy → únik lokálních dat ven a vlastní policy vrstva, která koliduje s naším security plane. |
| LangGraph | 1.2.12 (—) | MIT | ověřená | použij opatrně | orchestration | [VÝZKUM] Explicitní graf je deterministický a auditovatelný, ale stav grafu se ukládá mimo naši perzistenci; musí být podřízen našemu policy checkpointu, ne paralelní zdroj pravdy. |
| Inspect AI | 0.3.275 (—) | MIT | ověřená | použij | eval | [VÝZKUM] Eval harness s nástroji a scory; jako základ eval vrstvy použitelný, ale izolace musí zůstat na Bubblewrap, ne na jejich runneru. |
| CrewAI | 1.15.23 (—) | MIT | ověřená | nedoporučuj | — | [VÝZKUM] Role-play pattern bez bezpečnostní obory; směšuje LLM personu s důvěryhodnou rolí, tedy vytváří implicitní autoritu z textu. |
| Agno | 3.1.0 (—) | MPL-2.0 | ověřená | nedoporučuj | — | [VÝZKUM] Built-in guardrails volají cloudové modely (OpenAI) → přímé porušení lokálního požadavku z §1. |
| AutoGen | — | MIT | ověřená | nedoporučuj | — | [VÝZKUM] Udržován v maintenance mode; každý nový kód nad ním je slepá ulička bez bezpečnostních záruk. |
| OpenAI Swarm | — | MIT | ověřená | nedoporučuj | — | [VÝZKUM] Autoři sami označují „educational only"; neprodukční kód, u něhož není bezpečnostní model. |
| Semantic Kernel | — | MIT | ověřená | nedoporučuj | — | [VÝZKUM] Přesouvá se do Microsoft Agent Framework; stejný tým a směr, příliš těžký, duplikuje naši policy vrstvu. |
| DSPy | 3.4.0 (—) | MIT | ověřená | nedoporučuj | — | [VÝZKUM] Optimalizuje prompty do nečitelné podoby → prompt nelze auditovat, revidovat v diffu ani připojit k bezpečnostnímu pravidlu. |
| Mastra | — | Apache-2.0 | ověřená | nedoporučuj | — | [VÝZKUM] TypeScript/Node stack mimo Python scope (§5.7) — znovu bychom zavedli Node runtime jako instalační závislost. |
| Oso | — | Apache-2.0 | ověřená | nedoporučuj | — | [VÝZKUM] Projekt je deprecated; neudržovaná policy vrstva je přesný opak toho, čo v6 potřebujeme. |
| promptfoo | — | MIT | ověřená | použij | eval | [VÝZKUM] Deklarativní YAML testy promptů, dobře auditovatelné v diffu a běží lokálně bez služby. |
| DeepEval | 4.2.7 (—) | Apache-2.0 | ověřená | použij opatrně | eval | [VÝZKUM] Sada metrik je užitečná, ale část evaluatorů volá externí LLM API → data ven; používat jen režim offline. |
| Giskard | 3.0.1 (—) | Apache-2.0 | ověřená | použij opatrně | eval | [VÝZKUM] Doplňkově k promptfoo/Inspect; těžký závislý stack, smysl dává až s reálnými test datasety, ne na hypotetických. |
| Ragas | 0.4.3 (—) | Apache-2.0 | ověřená | použij opatrně | eval | [VÝZKUM] Pokrývá výhradně RAG metriky; mimo scope, pokud nemáme RAG pipeline. |
| OpenAI Evals | — | MIT | ověřená | použij opatrně | eval | [VÝZKUM] Malý referenční framework; použitelný jako offline sada, ne jako běžící runner. |
| Opik | 2.2.87 (—) | Apache-2.0 | ověřená | použij | observability | [VÝZKUM] Self-hosted je výchozí režim a je OpenTelemetry kompatibilní → sedí s lokálním provozem. |
| AgentOps | 0.4.21 (—) | MIT | není ověřena | nedoporučuj | — | [VÝZKUM] Vyžaduje cloudové API key a jejich server → lokální audit stopa přechází do cizích rukou. |
| OpenLIT | 1.45.0 (—) | Apache-2.0 | není ověřena | použij opatrně | observability | [VÝZKUM] Jemná instrumentace GenAI volání, ale přináší vlastní storage i UI → duplikuje naši observability vrstvu. |
| Langfuse | 4.16.0 (—) | MIT (OSS core) | není ověřena | použij opatrně | observability | [VÝZKUM] Rozdělení OSS/EE a remote evaluace jsou pasti; přípustný výhradně self-hosted s lokálním ingestem. |
| Phoenix (Arize) | 20.19.0 (—) | Apache-2.0 | není ověřena | použij opatrně | observability | [VÝZKUM] OpenTelemetry nativní, ale edice/licence je třeba právně potvrdit; nasazovat až po ověření, ne jako první volbu. |
| OpenTelemetry GenAI semconv | — | Apache-2.0 (specifikace) | ověřená | použij | observability | [VÝZKUM] Schéma nás sjednotí s externími nástroji bez vendor locku; sjednocující, ne běžící závislost. |
| mem0 | — | Apache-2.0 | ověřená | použij opatrně | memory | [VÝZKUM] Praktická extrakce faktů, ale implicitní vkládání do promptu je přesně prompt-injection vektor (§5.4). |
| Graphiti (Zep) | — | Apache-2.0 | není ověřena | použij opatrně | memory | [VÝZKUM] Temporální graf nejlépe sedí na naše vztahy, ale Zep Cloud je výchozí → musí být provozováno plně self-hosted. |
| Cognee | — | MIT | ověřená | raději ne | memory | [VÝZKUM] Příliš široký scope (ingest → graf → pipeline) a koliduje s oddělením research/eval; překryv místo doplnění. |
| sqlite-vec | 0.1.9 (—) | Apache-2.0 / MIT | ověřená | použij | persistence | [VÝZKUM] Nulová externí služba, vektory žijí v SQLite → ladí se s naším jediným souborem. |
| sqlite-vss | — | Apache-2.0 | ověřená | nedoporučuj | persistence | [VÝZKUM] Projektově není v aktivním vývoji; pokud potřebujeme vektory, sqlite-vec stačí. |
| Presidio | — | MIT | ověřená | použij | security plane | [VÝZKUM] Lokální PII detekce před odesláním promptu do LLM → sedí přesně do bezpečnostního pořadí (§1). |
| detect-secrets | — | Apache-2.0 | ověřená | použij | security plane | [VÝZKUM] CI brána proti commitu tajných dokladů; pasivní a auditovatelná, bez přidání runtime složky. |
| semgrep | 1.179.0 (—) | LGPL-2.1 | ověřená | použij | security plane | [VÝZKUM] Nejlepší poměr signálu k nákladům pro SAST; pravidla v repu jako jediné místo pravdy. |
| bandit | 1.9.4 (—) | Apache-2.0 | ověřená | použij | security plane | [VÝZKUM] Lehká kontrola `subprocess`/`eval`/dynamického importu, tedy přesně našich rizikových vzorů. |
| pip-audit | 2.10.1 (—) | Apache-2.0 | ověřená | použij | security plane | [VÝZKUM] CVE kontrola závislostí nad naším lock souborem; odpovídá `fail_under` discipline (§5.10). |
| Landlock | — | GPL-2.0 (Linux) | ověřená | použij opatrně | security plane | [VÝZKUM] Silnější file-I/O izolace ne path sandbox, ale je to kernel závislost → podmíněné jádro; Bubblewrap zůstává baseline. |
| nsjail | — | BSD-3-Clause | ověřená | použij opatrně | security plane | [VÝZKUM] Alternativní izolace se selektivními namespace; testovat jako druhý provider, ne jako náhradu bez testů. |
| bubblewrap | — | GPL-2.0 | ověřená | použij | execution | [OVĚŘENO] Už jediné místo pravdy pro izolaci DIL — `src/cyberbrain26/execution_plane/bubblewrap_provider.py:129-134` vyhodí `RuntimeError` bez bwrapu, tedy fail-closed správně. [OVĚŘENO] Bubblewrap ale není ochrana proti libovolnému nepřátelskému kódu; je to izolace procesu. |
| gVisor | — | Apache-2.0 | ověřená | raději ne | security plane | [VÝZKUM] User-space kernel je reálná izolace, ale overkill pro single-tenant lokální prototyp; velká režie a vlastní ABI. |
| Firecracker | — | Apache-2.0 | ověřená | raději ne | execution | [VÝZKUM] Mikrovm míří na více nájemníků a nebezpečný multi-tenant workload; u nás běží jeden vlastní proces. |
| Podman / runc | — | Apache-2.0 | ověřená | raději ne | execution | [VÝZKUM] Rootless kontejner přidává daemon a image pipeline bez bezpečnostního přírůstku; kontejnery nejsou v deklarovaných závislostech. |
| ToolHive | — | Apache-2.0 | není ověřena | použij opatrně | orchestration | [VÝZKUM] Řeší reálný problém — pinning, sandbox a evidence MCP serverů — ale je mimo naše stávající MCP rozhraní; kandidát k ohodnocení, ne hotové zapojení. |
| mcp-scan | — | Apache-2.0 | není ověřena | raději ne | security plane | [VÝZKUM] V default režimu stahuje a odesílá definice serverů mimo prostředí = únik dat; používat výhradně v plně lokálním/offline režimu. |
| mcp SDK | 2.2.0 (—) | MIT | ověřená | použij | orchestration | [VÝZKUM] Nutný kompatibilní základ pro MCP klienta, ale každý tool musí projít naším authorizerem, ne SDK logikou. |
| FastMCP | 4.0.10 (—) | Apache-2.0 | ověřená | použij opatrně | orchestration | [VÝZKUM] Pohodlné psaní našich serverů, ale nesmí se stát autoritou pro oprávnění, jinak vznikne druhá policy cesta (§5.9). |
| auditd | — | GPL-2.0 (Linux) | ověřená | použij | observability | [OVĚŘENO] Ground truth mimo PID namespace (§6) — jediné místo, kde nelze přepsat naši lokální evidenci zevnitř sandboxu. |
| inotify | — | MIT (utilita) | ověřená | použij | observability | [OVĚŘENO] Pasivní detekce změn audit logu; reakce musí být fail-closed, ne informační. |
| tamperlog | — | Apache-2.0 | není ověřena | raději ne | observability | [VÝZKUM] Pokrývá file integrity, ne naši sekvenční audit stopu; duplikace, ne doplnění. |
| auditchain | — | — | není ověřená | raději ne | observability | [VÝZKUM] Řetězování auditu jako služba; není jasné, kdo je autoritou, když už ground truth je auditd. |
| immudb | — | Apache-2.0 | ověřená | raději ne | persistence | [VÝZKUM] Konzistentní databáze s kryptografickým důkazem; řeší problém, který single-tenant lokální prototyp nemá. |
| Cedar | — | Apache-2.0 | ověřená | použij opatrně | policy | [VÝZKUM] Formálně ověřený authorization jazyk, reálná alternativa k ručním mapám scope, ale zavádí vlastní evaluátor, který musí být podřízen našemu deny-by-default. |
| OpenFGA | — | Apache-2.0 | ověřená | použij opatrně | policy | [VÝZKUM] Silný model, ale je to replikační store + trvalý server; pro lokální single-user profil je to služba navíc. |
| Cerbos | — | Apache-2.0 | ověřená | použij opatrně | policy | [VÝZKUM] Policy jako kód s vlastními testy — auditovatelná, ale opět runtime služba vedle našeho Python plánu. |
| Casbin | — | Apache-2.0 | ověřená | použij opatrně | policy | [VÝZKUM] Nejmenší z této trojice (knihovna, ne server), plně lokální; jediný reálný kandidát na nahrazení ručních map scope. |
| Ollama | — | MIT | ověřená | použij | research | [VÝZKUM] Nejjednodušší lokální modelové API pro vývoj a testy; pro finální běh nahradit produkčním serverem. |
| llama.cpp | — | MIT | ověřená | použij | research | [VÝZKUM] Přesné GGUF predikce i na CPU; použitelné i jako deterministický stub provider pro testy. |
| vLLM | — | Apache-2.0 | ověřená | použij opatrně | research | [VÝZKUM] Vysoký throughput na GPU, ale přidává server, fronty a vlastní sandboxing promptů, který by se neshodoval s naším. |
| SGLang | — | Apache-2.0 | ověřená | raději ne | research | [VÝZKUM] Funkčně dužitá proti vLLM bez výhody pro single-tenant; zbytečná složitost. |
| Redis | — | RSALv2 / SSPL | není ověřená | nedoporučuj | persistence | [VÝZKUM] Licence je v repo metadatech NOASSERTION a není permissive OSI → právně ověřit; navíc přidává trvalou službu, kterou lokální prototyp nepotřebuje. |
| LiteLLM | 1.103.2 (—) | NOASSERTION | není ověřená | raději ne | orchestration | [VÝZKUM] Proxy vrstva by vyřešila fallbacky, ale licence je evidována jako NOASSERTION → právní potvrzení je podmínka, jinak zůstává neauditovatelným rizikem. |
| Bifrost | — | — | není ověřená | raději ne | orchestration | [VÝZKUM] Alternativní LLM gateway; proti LiteLLM v repozitáři není důvod riskovat další závislost. |
| Composio | — | SaaS | — | nedoporučuj | — | [VÝZKUM] Centrální remote registr nástrojů = exfilratační kanál a cizí dependency graph mimo naši kontrolu. |
| Cisco AI Defense | — | SaaS (proprietární) | — | nedoporučuj | — | [VÝZKUM] Kontrola promptů v cizí síti; lokální požadavek porušen a auditovatelnost je mimo náš dosah. |
| OpenRouter | — | SaaS (proprietární) | — | nedoporučuj | — | [VÝZKUM] Veškerý prompt i odpověď prochází třetí stranou; neodpovídá požadavku z §1. |
| Portkey | — | MIT + SaaS | není ověřená | raději ne | — | [VÝZKUM] Nízká aktivita projektu v posledním roce; gateway by navíc byla mimo hranice auditu. |
| Braintrust | — | SaaS (proprietární) | — | nedoporučuj | — | [VÝZKUM] Eval platforma v cloudu; eval data jsou data uživatele a patří do lokálního prostředí. |
| PromptLayer | — | SaaS (proprietární) | — | nedoporučuj | — | [VÝZKUM] Totéž co Braintrust, jiný dodavatel, stejný problém přesunu dat mimo hranice. |
| LangSmith (LangChain) | — | SaaS (proprietární) | — | nedoporučuj | — | [VÝZKUM] Přímé porušení lokálního požadavku z §1; auditovatelný je cizí server, ne naše prostředí. |
| self-hosted varianty (Langfuse / Opik / PromptLayer) | — | smíšené | není ověřena | použij opatrně | observability | [VÝZKUM] Self-hosting je přípustný jen tehdy, když je i verze a konfigurace auditovatelná a aktualizace jsou naše, ne cizí SaaS pipeline. |

**Co V6 nesmí přidat:** CrewAI role-play bez bezpečnostní obory; Agno s built-in guardrails volajícími cloudové OpenAI API; mcp-scan v default režimu (odesílá definice serverů mimo = únik dat); Phoenix před právním ověřením edice a licence; LangSmith a všechny SaaS (Composio, Cisco AI Defense, OpenRouter, Braintrust, PromptLayer) — porušení lokálního požadavku; DSPy (optimalizuje prompty do neauditovatelné podoby); Redis (NOASSERTION licence + přidává trvalou službu); gVisor/Firecracker/runc/Podman (overkill pro single-tenant prototyp); Microsoft Agent Framework / Semantic Kernel (příliš těžké, duplikují policy); AutoGen (maintenance mode); OpenAI Swarm (autoři uvádějí „educational only"); Oso (deprecated); Mastra (TypeScript mimo scope); Ragas (jen RAG); AgentOps (vyžaduje cloud); DeepEval a Giskard (doplňkově k promptfoo/Inspect, ne místo nich); sqlite-vss (není v aktivním vývoji); Portkey (nízká aktivita); LiteLLM (licence NOASSERTION → ověřit právně, jinou nepoužívat); Bifrost (bez důvodu proti LiteLLM).

# Sekce 7 hotovo

---

## 8. Kilo konfigurace V6

### 8.1 `.kilo/kilo.jsonc` (nový — [NÁVRH])

[OVĚŘENO] Umístění rozhodl vlastník: Kilo konfigurace bude v **`.kilo/kilo.jsonc`**, nikoli v kořenovém `./kilo.json`. Důvod: precedence od nejnižší je remote well-known → global `~/.config/kilo/` → `KILO_CONFIG` → project root `./kilo.json[c]` → **`.kilo/`** → `KILO_CONFIG_CONTENT` → managed; soubory se **deep-merge** (klíč po klíči, ne replace) a `.kilo/` verze má přednost. Docs: „Project config: `kilo.jsonc` in your project root, or `.kilo/kilo.jsonc` for a cleaner setup. The `.kilo/` version takes priority if both exist." Kořenový `kilo.json` **neexistuje a nebude vytvářen** — jinak by vznikly dva překrývající se zdroje pravdy (§13.3). [OVĚŘENO] `.kilo/` není v kořenovém `.gitignore` (ignoruje ho jen `.git/info/exclude`, a to jen `worktrees/` a `agent-manager.json`) → konfigurace i agenti budou commitnutelné, což je zamýšlené. [OVĚŘENO] `.kilo/kilo.jsonc` v repu existuje a je **konfigurovaný pro F1** — obsahuje `subagent_depth: 1`, `default_agent: "orchestrator"`, `permission` baseline (včetně tvrdého `bash: deny` a `external_directory: deny`) a `mcp.cyberbrain26` explicitně vypnutý (`{ "enabled": false }`) = fail-closed, ne tichý fallback. Tvrzení „3 řádky, jen `$schema`“ platilo PŘED provedením F1 a už neplatí. `.kilo/` přitom není v kořenovém `.gitignore` — je untracked, tedy commitnutelný (viz věc výše).

[OVĚŘENO] Původní návrh této podsekce byl proti reálnému JSON schématu Kilo neplatný a Kilo by ho vůbec nenačetlo: chybný klíč `permissions` (správně `permission`, singulár, a `Config` má `additionalProperties: false`), neplatné top-level `"mode": "primary"` (top-level `mode` je objekt `agent → AgentConfig` označený `@deprecated Use 'agent' field instead`; řetězec `"primary"` patří pouze do `agent.<jméno>.mode` nebo do frontmatteru `.kilo/agent/*.md`, enum `subagent|primary|all`), neexistující podobjekty `allow`/`ask`/`deny` jako seznamy, MCP `type: "stdio"` (enum je přesně `["local"]` / `["remote"]`; STDIO se v UI jmenuje „Local (STDIO)") a `command`/`args` jako dvojice objektů (ve schématu je `command` **pole řetězců**, command i args dohromady), a neexistující klíč `features`. Nahrazeno validní konfigurací:

```jsonc
{
  "$schema": "https://app.kilo.ai/config.json",

  // F1: tvrdá runtime pojistka pro D6 a invariant 3 "jeden orchestration path".
  // Default je sice 1, ale je zapsán explicitně, aby byl součástí auditu konfigurace.
  "subagent_depth": 1,

  // Orchestrátor je jediný primární agent tohoto projektu (D6).
  "default_agent": "orchestrator",

  "permission": {
    // Pravidla se vyhodnocují v konfiguračním pořadí a VYHRÁVA POSLEDNÍ SHODA
    // (https://kilo.ai/docs/customize/agent-permissions, staženo 2026-10-02).
    // Proto catch-all musí být PRVNÍ a výjimky až za ním.
    "*": "ask",

    // D3: žádný agent v tomto repozitáři nemá běh na hostovi.
    "bash": "deny",
    "external_directory": "deny",
    "agent_manager": "deny",
    "doom_loop": "deny",

    // Globální zákaz delegace. Orchestrátor si konkrétní subagenty
    // výslovně povolí ve svém frontmatteru (D6).
    "task": { "*": "deny" },

    // MCP nástroje nejsou "výjimka z bezpečnosti" — jsou to brány do security plane.
    // Kilo jen promptuje uživatele; autorizaci provádí Python v
    // AuthorizedExecutionService (execution_plane/secure_gateway.py:82-169).
    "cyberbrain26_*": "ask"
  },

  "mcp": {
    // Výstup fáze F3. V F1 server v repu ještě neexistuje
    // [OVĚŘENO: src/cyberbrain26/mcp/ NEEXISTUJE, mcp SDK není v pyproject.toml],
    // proto je explicitně vypnutý = fail-closed, ne tichý fallback.
    "cyberbrain26": { "enabled": false }
  }
}
```

- [OVĚŘENO] `bash: deny` je tvrdý invariant D3 — nikdo nemá běh na hostovi. Vyjádřeno na serverové úrovni, aby to nebilo stav, který se musí ověřovat u každého nového agenta.
- [OVĚŘENO] `cyberbrain26_*` = **`ask`, ne `deny`** — a to je věcná oprava původní verze §8.1. `deny` by vyjadřovalo „Kilo těm nástrojům vůbec nesmí dovolit", což je jiná kategorie tvrzení než „Kilo nemá pravomoc autorizovat". `deny` by D3/D4 řetězec učinil **nerealizovatelným**: fail-closed, ale mrtvý — žádná autorizace by se nikdy nevyhodnotila. `ask` pouze promptuje uživatele, zatímco autorizaci provádí Python v `AuthorizedExecutionService` (`execution_plane/secure_gateway.py:82-169`) — Kilo je pouze UX filtr, ne místo rozhodování (§14).
- [OVĚŘENO] `subagent_depth: 1` je **platné top-level pole** (`"subagent_depth": {"minimum":0,"type":"integer","description":"Maximum subagent nesting depth. Defaults to 1, which prevents subagents from launching subagents."}`). Je tvrdá **runtime** pojistka pro D6 a invariant 3 „jeden orchestration path" (§14) — silnější než spoléhat, že každý `.md` správně nastaví `task: deny`. Zapsáno explicitně (i když je to default), aby bylo součástí auditu konfigurace.
- [OVĚŘENO] `default_agent: "orchestrator"` — top-level `default_agent` je string a musí odkazovat na primary agenta. Nahrazuje neplatné top-level `"mode": "primary"`.
- [OVĚŘENO] Paměť Kilo se **není konfigurovatelná klíčem `features.memory`** — `features` ve schématu neexistuje vůbec. Zapíná se příkazem `/memory on|off` nebo Settings → Context. Původní `features.memory.project` byl smyšený klíč. `kilo_memory_save`/`kilo_memory_recall` jsou platné permission klíče (skalár i glob oba OK).
- [NEOVĚŘENO] Rozpor v precedence pravidel: dokumentace Kilo na třech nezávislých stránkách uvádí **last match wins** (v konfiguraci vyhrává poslední shoda), zatímco vestavěná skill `kilo-config` tvrdí **first match wins**. Tento plán počítá s dokumentací (last match wins) — proto je catch-all `"*"` psáno **první** a výjimky až za ním. Rozpor není vyřešen; převezi se do revize (§15).
- [OVĚŘENO] `mcp.cyberbrain26: { "enabled": false }` — server je výstup **F3**, ne F1: [OVĚŘENO] `src/cyberbrain26/mcp/` neexistuje, `mcp` SDK není v `pyproject.toml` dependencies ani v žádné extra sekci; grep `cyberbrain26_` přes celé `src/` dává jedinou shodu, a to je název `ContextVar` v `security_plane/actions.py:208`, ne nástroj. Vypnutí je explicitní, ne tichý fallback.
- [OVĚŘENO] Praktické omezení: Kilo cachuje project-level `.kilo/kilo.jsonc` při prvním načtení worktree a **nečte ho znovu při každém promptu** („Kilo caches project-level `kilo.jsonc` / `kilo.json` (in `.kilo/`) when it first loads a workspace, and does not re-read it on every prompt."). Po změně `.kilo/kilo.jsonc` je nutné reload okna nebo nová CLI session, jinak se změna neprojeví (§13.14).
- [NÁVRH] Pravidla se vyhodnocují v konfiguračním pořadí a vyhrává poslední shoda, proto je catch-all `"*": "ask"` v §8.1 psán první a výjimky (D3 zákazy) až za ním. `task` je globálně zablokovaný a Orchestrátor si výslovně povolí konkrétní subagenty ve svém frontmatteru (D6).

[OVĚŘENO] **Globální konfigurace existuje a D3 na ní závisí.** `~/.config/kilo/kilo.jsonc` (98 řádků) obsahuje `bash` a `external_directory` jako object-mapy se 74+4 allow-patterny a definuje i agenta `orchestrator`. Projektové `"bash": "deny"` tyto globální allow patterny zcela přepisuje (project > global v deep merge) — ověřeno srovnáním `kilo debug config` běhu v repu a mimo něj. **Důsledek: D3 (`bash: deny`) platí POUZE pokud se `.kilo/kilo.jsonc` skutečně načte.** Kdyby se nenačetl, globální konfigurace by povolila 74 bash patternů. [NÁVRH] Gate 0 proto musí kladně ověřit v `kilo debug config`, že `bash == "deny"` a že `permission_origins.bash.local` je vyplněné — existence souboru sama o sobě nestačí. [OVĚŘENO] Žádné jiné zdroje pravdy neexistují: `/etc/kilo/` chybí, `KILO_CONFIG`/`KILO_CONFIG_CONTENT`/`KILO_CONFIG_DIR` nenastavené, `.kilocode/` a `.opencode/` neexistují, `~/.config/kilo/` neobsahuje credentials.

### 8.2 Registry `.kilo/agent/*.md` ([NÁVRH])

[OVĚŘENO] Hloubka delegace je vynucena **dvěma nezávislými mechanismy**: (1) `subagent_depth: 1` globálně v `.kilo/kilo.jsonc` (§8.1) — **runtime** pojistka, kterou **nelze přepsat v `.md` souboru agenta**, protože `subagent_depth` je top-level config pole a frontmatter ho neobsahuje; (2) `task: deny` ve frontmatteru každého subagenta — deklarativní a auditovatelná pojistka, která se dá zkontrolovat v repozitáři. Mechanismus (2) bez (1) by selhal při chybě v `.md`; mechanismus (1) bez (2) by nechal chybu v `.md` nevšimnutou. Proto jsou oba povinné.

[OVĚŘENO] Agenti se načítají z `.kilo/agent/*.md` i `.kilo/agents/*.md` (oba vzory jsou podporované; `.kilo/agent/` je kanonický). Precedence agent markdown souborů: builtin → global config → project config → global `*.md` → project `.kilo/agent/*.md` (poslední = nejvyšší).

| Soubor | Role | `mode` | `permission` (zkráceně) | Proč |
|---|---|---|---|---|
| `promptmaster.md` | PromptMaster | primary | task=deny, bash=deny, kilo_memory_save=ask, ostatní=ask | Kvalitikuje prompt; nesmí delegovat (D6), nesmí spouštět kód |
| `orchestrator.md` | Orchestrátor | primary | bash=deny; task=explicitní allowlist `{"*": "deny", "verifier": "allow", ...}` (nikoli globální `allow`); cyberbrain26_*=ask, ostatní=ask | Jediný delegátor (D6); rozděluje úkoly, řídí security plane |
| `verifier.md` | Verifikační agent | subagent | task=deny, bash=deny, read=ask, webfetch=ask, cyberbrain26_*=ask | Read+verify; nikdy nevytváří změny sám. Exekuce/testy **jen** přes `cyberbrain26_*` glob přes MCP, nikoli přímé spouštění |
| `deep-research.md` | Deep research | subagent | task=deny, bash=deny, websearch=ask, webfetch=ask | Pouze čte a hledá; odstiňuje od exekuce |
| `security-auditor.md` | Bezpečnostní audit | subagent | task=deny, bash=deny, read=ask, cyberbrain26_*=ask | Audit kódu; `semgrep` a podobné nástroje **jen** přes MCP (`cyberbrain26_*` glob), nikdy přímo |
| `implementer.md` | Implementace kódu | subagent | task=deny, bash=deny, edit=ask | Psát kód jen přes approved edit workflow |
| `tester.md` | Testy a verifikace | subagent | task=deny, bash=deny, read=ask, cyberbrain26_*=ask (např. `cyberbrain26_run_pytest`) | Spouští testy **jen** přes `cyberbrain26_*` glob přes MCP; `bash` je `deny` |
| `documenter.md` | Dokumentace | subagent | task=deny, bash=deny, edit=ask | Dokumentuje, nikdy nehackuje runtime |
| `refactorer.md` | Refaktor | subagent | task=deny, bash=deny, edit=ask | Refaktorování jen s approval |
| `code-reviewer.md` | Code review | subagent | task=deny, bash=deny, read=ask | Jen čte a hodnotí diff |
| `threat-modeler.md` | Threat model | subagent | task=deny, bash=deny, read=ask | Analyzuje hrozby, nevytváří kód |
| `sandbox-exec.md` | Sandbox a exekuce | subagent | task=deny, bash=deny, cyberbrain26_*=ask | Koordinuje exekuci přes MCP, ale nikdy bez security plane |
| `migration.md` | Persistence a migrace | subagent | task=deny, bash=deny, edit=ask | Databáze/schémata, jen s approval |
| `release.md` | Release a CI | subagent | task=deny, bash=deny, read=ask, cyberbrain26_*=ask | Tag, build, nikdy ruční push |
| `supply-chain.md` | Dependency a supply chain | subagent | task=deny, bash=deny, read=ask, cyberbrain26_*=ask (např. `cyberbrain26_run_pip_audit`) | Audit závislostí **jen** přes `cyberbrain26_*` glob přes MCP |

[NÁVRH] `task: allow` globálně je **nepřípustné** — Orchestrátor má `task` jako explicitní allowlist objekt ve tvaru `{"*": "deny", "verifier": "allow", "tester": "allow", ...}`, což je podporovaný tvar schématu i dokumentace (Custom Subagents → Restricted Orchestrator) a je to zároveň D6. Globální `allow` by delegoval i vše, co do allowlistu nepatří.

[NÁVRH] `bash: deny` je **u všech** agentů — nikdo nemá běh na hostovi (§14 invariant 6). Všechny exekuční nástroje jdou přes `cyberbrain26_*` → `AuthorizedExecutionService` → policy → approval → `BubblewrapExecutionProvider`. [OVĚŘENO] Permission klíče `cyberbrain26_*` jsou globy ve tvaru `{server}_{tool}` a jsou platné i tehdy, když MCP server `cyberbrain26` ještě neexistuje (viz §8.1).

[OVĚŘENO] **`.kilo/agent/*.md` je deklarativní konfigurace bezpečnostní hranice, ne dokumentace.** Proto je `.kilo/agent/` součástí Gate 0 policy-testu (§13.3) jako **kód**, ne jako text k lidské revizi.

# Sekce 8 hotovo

---

## 9. Řetěz agentů
`PromptMaster → Orchestrátor → subagenti` (D5). Každý subagent = `mode: subagent, task: deny, bash: deny` (hloubka 1, viz §8.2).

[OVĚŘENO] Hloubka delegace 1 je vynucena **dvěma nezávislými mechanismy**: (1) `subagent_depth: 1` globálně v `.kilo/kilo.jsonc` (§8.1) — **runtime** pojistka, kterou subagent **nemůže přepsat v `.md` souboru**, protože `subagent_depth` je top-level config pole a frontmatter ho neobsahuje; (2) `task: deny` ve frontmatteru každého subagenta — **deklarativní** pojistka, auditovatelná v Gate 0 (§13.3). Mechanismus (2) bez (1) by selhal při chybě v `.md`; mechanismus (1) bez (2) by nechal chybu v `.md` nevšimnutou. Proto jsou oba povinné.

### 9.1 PromptMaster
- **Odpovědnost:** vezme tvůj prompt (česky), vylepší ho pro daný typ úkolu, přeloží do angličtiny, připraví artefakt pro Orchestrátora.
- **Frontmatter:** `mode: primary`, `description: "Přijímá uživatelský prompt, vylepšuje ho a připravuje anglický artefakt pro Orchestrátora"`, `permission: { task: deny, bash: deny, kilo_memory_save: ask, ... }` (ostatní `ask`). [OVĚŘENO] `mode` je **frontmatter pole** agenta (enum `subagent|primary|all`), **ne** top-level konfigurace — serverová analogie je `default_agent` v `.kilo/kilo.jsonc` (§8.1). `task: deny` (nesmí delegovat, D6), `bash: deny`, `kilo_memory_save: ask`, ostatní `ask`.
- **Pravidla co nesmí:** nesmí spouštět kód ani volat `bash`; nesmí číst citlivé soubory mimo workspace (`read` jen na `.kilo/`, `roadmapy`, veřejné dokumenty — ne na `security_plane/key*` ani na tokeny); nesmí volat žádný `cyberbrain26_*` exekuční nástroj; nesmí samotý spouštět žádného subagenta.
- **Co může:** `read`/`grep`/`glob` na dokumentaci a `.kilo/context/`; `kilo_memory_recall` pro kontext techto verzí; `kilo_memory_save` pro artefakt (s approval).
- **Formát výstupu:** dva bloky — (a) krátká česká odpověď pro uživatele, (b) anglický artefakt předaný Orchestrátoru. Artefakt obsahuje: `task_id`, `task_type`, `security_classification` (public/normal/sensitive), `declared_actions` (seznam akcí, které task může vyvolat), `origin_prompt` (CZ, uvozen, že je to input), `enhanced_prompt` (EN), `constraints` (D1–D10 + invarianty).
- **Zápis artefaktu:** artefakt se nezapisuje PromptMasterem. PromptMaster jej předá Orchestrátorovi jako return text; **Orchestrátor** volá MCP `cyberbrain26_write_handoff(artefact)` → projde `AuthorizedExecutionService` → `audit` (`security_plane/audit/__init__.py:271`). Artefakt jde do `.kilo/context/handoff/<task_id>.prompt.md`. Nikoli jako approval (D5), pouze jako audit. [NÁVRH]

### 9.2 Orchestrátor
- **Frontmatter:** `mode: primary`, `description: "Jediný delegátor — rozděluje úkoly, řeší security plane a fail-closed exekuci"`; `permission: { bash: deny, task: { "*": "deny", "verifier": "allow", "tester": "allow", ... }, cyberbrain26_*: ask, ... }` (ostatní `ask`). [OVĚŘENO] `task` **není** globální `allow` — je to explicitní allowlist objekt `{jméno agenta: "allow"}` s `{"*": "deny"}` catch-all, což je podporovaný tvar schématu i dokumentace (Custom Subagents → Restricted Orchestrator) a je to D6. `bash: deny` platí stejně jako pro všechny ostatní agenty. `mode` je frontmatter pole, ne top-level konfigurace; serverová část je `default_agent: "orchestrator"` v `.kilo/kilo.jsonc` (§8.1) a `subagent_depth: 1` zabraňuje tomu, aby subagenti delegovali dál.
- **Odpovědnost:** (1) přijmout artefakt z PromptMastera; (2) rozhodnout, který subagent spustit (volá Task tool — hloubka 1, protože subagenti mají `mode: subagent` a `task: deny`, a Kilo jim delegovat dál nedovolí); (3) **cross-check**: před každým spuštěním subagenta ověřit, že deklarované akce jsou v `permissions/action_map` a v `security_plane/actions.py` (pomocí `cyberbrain26_check_vocabulary`) — nikdy nepustit subagenta, jehož `declared_actions` obsahují nehlasovanou akci; (4) spouštět verifikačního agenta podle §12 (Gate 1 před změnou); (5) spouštět deep-research agenta při změně plánu nebo při nejistotě `confidence < 0,85`; (6) hlásit uživateli stav `background` tasků a shrnuje.
- **Výslovně — Kilo `Orchestrator Mode` je deprecated od 2. 4. 2026** (`https://kilo.ai/docs/code-with-ai/agents/orchestrator-mode`). Proto je CyberBrain26 Orchestrátor **primary agent s explicitními pravidly delegace**, nikoliv Kilo Orchestrator Mode ([VÝZKUM]).
- **Pravidla delegace:** (a) každému subagentovi předá jen artefakt, ne volný prompt; (b) subagent nikdy nemá `task: allow` — Kilo brání hloubky >1; (c) před exekucí každý subagent musí projít `cyberbrain26_authorize_action` (registry_impl.py:192-286) — identita → permission → policy → approval; (d) pokud subagent chce psát soubor mimo `.kilo/context/handoff/` a `.kilo/plans/`, musí projít Gate 1 a mít `edit`; (e) Orchestrátor sám neskrývá exekuci — všechna spuštění jsou v audit logu.

### 9.3 Komunikační tok
```
uživatel → [prompt CZ] → PromptMaster
  → (enhanced artefakt .kilo/context/handoff/) → Orchestrátor
    → (Task tool, hloubka 1) → subagent (mode: subagent, task: deny)
      → MCP cyberbrain26_* → AuthorizedExecutionService (secure_gateway.py:82-169)
        → PermissionGateway.evaluate (permission/__init__.py:170-225)
          → approval: _wait_for_approval (secure_gateway.py:126-128, approval/__init__.py:271)
        → BubblewrapExecutionProvider (bubblewrap_provider.py:97) [fail-closed, RuntimeError :129-134]
          → auditd jako ground truth
```
Každý šipka = jeden bezpečnostní checkpoint. `cyberbrain run` CLI (D4) vstoupí na stejný tok na úrovni `AuthorizedExecutionService`, tedy oba klienti (Kilo MCP i CLI) sdílejí jednu security plane. [NÁVRH]

---


## 10. Registr specializovaných agentů a subagentů
Na každou speciální činnost existuje vlastní agent; všechny jsou `mode: subagent, task: deny, bash: deny` (hloubka 1, viz §8.2). Žádný z nich nesmí volat `bash` ani žádat další delegaci.

| Specializovaná činnost | Soubor (.kilo/agent/...) | `mode` | Co smí | Co nesmí | Kdo ho spouští | Jaký `cyberbrain26_*` nástroj volá | Jaký gate/projde |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Research / Deep research | `deep-research.md` | subagent | `websearch` + `webfetch` + `read` + `grep`; výsledky uloží do `.kilo/context/` | nikdy exekuce kódu; nikdy `bash`; nesmí tahat interní/privátní URL — bezpečnostní oddělení evidence od exfiltration (viz §5.4) | Orchestrátor (při změně plánu nebo `confidence < 0,85`) | `cyberbrain26_write_handoff` | Gate 0: schválení výstupu do `.kilo/context/handoff/` + audit |
| Bezpečnostní audit | `security-auditor.md` | subagent | jen čtení kódu, hledá zranitelnosti a misuse patterny | nesmí psát ani editovat; nesmí `bash`; nesmí spouštět cizí kód | Orchestrátor (před bezpečnostně citlivou změnou, D3) | `cyberbrain26_check_vocabulary`, `cyberbrain26_run_semgrep`, `cyberbrain26_list_actions` | read-only gate: žádný `edit`; výstup jen report, Gate 1 pouze doporučení |
| Implementace kódu | `implementer.md` | subagent | `edit` pouze s approval, dělí změnu na malé kroky | nikdy `bash`; nikdy testy mimo `cyberbrain26_run_pytest`; nesmí obejít Gate 1 | Orchestrátor (po Gate 1) | `cyberbrain26_authorize_action` (před každou změnou, registry_impl.py:192-286) | Gate 1: schválení editace — identita → permission → policy → approval |
| Testy a verifikace | `tester.md` | subagent | spouští testy, analyzuje výstup, reportuje | nikdy ruční `bash`; nesmí „opravit“ test, aby prošel | Orchestrátor (po každé změně) | `cyberbrain26_run_pytest`, `cyberbrain26_run_inspect` | Gate 2: verifikace přes `AuthorizedExecutionService` → audit |
| Dokumentace | `documenter.md` | subagent | `edit` v `docs/`, `README*`, roadmapech | nesmí měnit kód, testy ani security plane; nikdy `bash` | Orchestrátor | — (pouze schválený `edit`) | Gate 1: schválení editace |
| Refaktor | `refactorer.md` | subagent | `edit` se zachováním veřejného rozhraní | nikdy `bash`; nesmí měnit chování; nesmí commitnout bez diff review | Orchestrátor | `cyberbrain26_authorize_action` | Gate 1 + **povinný diff review** před commitem |
| Code review | `code-reviewer.md` | subagent | čte diff, hodnotí kvalitu, bezpečnost, riziko | **nikdy `approved`** — nepodepisuje vlastní změnu; nikdy `bash`; nesmí psát | Orchestrátor (Gate 1 před každou změnou) | — (read-only) | read-only gate: bez `edit`; závěr je podklad pro Gate 1 |
| Threat model | `threat-modeler.md` | subagent | analyzuje hrozby, trust boundaries, abuse case | **nikoli implementuje** — žádný `edit`; nikdy `bash` | Orchestrátor (při nové funkci nebo nové hranici) | `cyberbrain26_list_actions`, `cyberbrain26_check_vocabulary` | review gate: threat model musí existovat před návrhem Gate 1 |
| Sandbox a exekuce | `sandbox-exec.md` | subagent | volá exekuci, vrací výstup, hlásí selhání | **žádná akce mimo bezpečnostní tok**; nikdy fallback mimo `BubblewrapExecutionProvider`; nikdy `bash` | Orchestrátor | `cyberbrain26_execute` → `AuthorizedExecutionService` | celý řetěz §9.3: permission → approval → Bubblewrap (fail-closed) + **extra review** |
| Persistence a migrace | `migration.md` | subagent | schéma DB, migrační skripty, rollback plán | **nikoli ruční SQL mimo sandbox**; nesmí `DROP`/mazat data bez explicitního approval; nikdy `bash` | Orchestrátor (při změně schématu) | `cyberbrain26_run_migration` | Gate 1 pro změnu schématu + Gate 2 rollback plán |
| Release a CI | `release.md` | subagent | tag, build, sestavení release notes z audit logu | **nikoli ruční push**; nesmí přeskáčout selhané gate; nikdy `bash` | Orchestrátor (po zeleném CI) | `cyberbrain26_check_ci_status` | CI gate: build + `cyberbrain26_check_ci_status` = zelený |
| Dependency a supply chain audit | `supply-chain.md` | subagent | audit závislostí, licence, známé CVE | **nikoli instalovat** ani upravovat lock; nesmí přidat závislost s neauditovaným third-party slovníkem; nikdy `bash` | Orchestrátor (před každým novým závislostním plánem) | `cyberbrain26_run_pip_audit`, `cyberbrain26_check_vocabulary` (third-party) | Gate 1 pro novou závislost + **extra review** před schválením |

[NÁVRH] Princip „agile na míru rizika“: činnosti s nejvyšší dopadovostí mají nejtěžší brány. **Sandbox a exekuce (9)** a **Supply chain (12)** vyžadují extra review před schválením — jsou to jediné dvě činnosti, které mohou ovlivnit runtime nebo bezpečnostní závislosti jiných částí. Naopak **bezpečnostní audit (2)** a **code review (7)** jsou čistě analytické a běží bez exekuce (read-only, bez `edit`, bez `bash`), takže jejich brána je nejlehčí a nezatěžuje tok. Zbývající činnosti (1, 3–6, 8, 10, 11) procházejí standardním Gate 1 / Gate 2 podle §12.
---

## 11. Deep research agent a politika deep research

[VÝZKUM] Kilo nemá vestavěný deep research mode; `websearch` je omezený na max 10 výsledků, `type: auto|fast|deep`, `livecrawl: fallback|preferred`, `contextMaxCharacters`, provider `KILO_WEBSEARCH_PROVIDER` (`exa|parallel|kilo-exa`). Proto deep research musí být složen z agenta + skillu.

### 11.1 Agent `deep-research.md`

- `mode: subagent`, `task: deny`, `bash: deny` (hloubka 1, viz §8.2).
- Nástroje: `websearch`, `webfetch`, `read`, `grep`.
- **Pravidlo výstupu:** rozdělit výsledek do dvou částí — **„Ověřeno s URL a datem“** (každý claim má konkrétní URL + datum) vs **„Hypotéza“** (domněnka bez důkazu). [NÁVRH]
- **Paralelizace:** protože `websearch` vrací max 10 výsledků, dotaz se rozkládá na poddotazy (≥3) a Orchestrátor spouští ≥3 research subagenty paralelně (hloubka 1, respektovat `task: deny`).
- **Zápis:** výstek uložit jako artefakt `.kilo/context/handoff/<task>.research.md` přes `cyberbrain26_write_handoff` → audit.

### 11.2 Politika deep research

[VÝZKUM] Politika: deep research se spouští (a) při každé změně tohoto plánu; (b) při každém úkolu, kde `confidence < 0,85`; (c) před signifikantní politikou/bezpečnostní změnou. `websearch`/`webfetch` jsou jediné nástroje s **explicitním** cloud egressem — tichý cloud fallback je zakázan (§14). Citlivé dotazy (credentialy, klíče, interní architektura) se nevyhledávají.

## 12. Verifikační / testovací agent

### 12.1 Agent `verifier.md`

- `mode: subagent`, `task: deny`, `bash: deny`, `cyberbrain26_*=ask`.
- Nástroje: `read`, `grep`, `glob`, `cyberbrain26_run_pytest`, `cyberbrain26_run_semgrep`, `cyberbrain26_check_vocabulary`, `webfetch` (pro CVE).

### 12.2 Dvoufázový + jeden LLM-judge flow

[VÝZKUM] Základ z výzkumu (kappa deflation, position bias, markdown bias). Minimální podmínky, které musí plán garantovat:

1. **Gate 1 — deterministický PŘED změnou:** pytest (zelená baseline), baseline snapshot přes promptfoo nebo Inspect, hash stávajícího audit chainu, semgrep na dotčených souborech, potvrzení fail-closed testu bez bwrap (`ci.yml:175-198`).
2. změna
3. **Gate 2 — deterministický PO změně:** totéž + `git diff`, coverage (`pyproject.toml:233` `fail_under=60`, nově navrhovaných 80 % security plane v §5.10).
4. **Gate 3 — LLM-as-judge s jiným LLM** nad diffem.

### 12.3 Pravidla pro LLM-as-judge (povinná pole [NÁVRH], žádný bypass)

- Nikdy LLM judge jako Gate 1 — musí přijít po deterministickém Gate 1 i 2.
- Reportovat **κ (Kohenovo kappa) ne přesnou shodu** — raw shoda nadhodnocuje o 33–41 pp vs κ (`https://arxiv.org/abs/2606.19544`).
- **AB/BA swap** proti position biasu (konzistence ~60 % → ~85 %).
- **Styl/length audit** — markdown bias 73–97 % u modelů vs 57 % u lidí (`https://arxiv.org/abs/2604.23178`); verbosity bias kladný u Llama/Gemini (+0,24–+0,44), záporný u Claude Sonnet 4 (−0,12).
- **Nepoužívat judge hodnotící vlastní modelovou rodinu.**
- Report jako artefakt na disku (`kilo_memory_save` → `cyberbrain26_write_handoff`), nikoliv jen do konverzace.

### 12.4 Riziko D8 — neznámá rodina modelu v testu

[D8] Testovací agent (verifier) použije model nakonfigurovaný pro svou roli v `.kilo/kilo.jsonc` / frontmatteru; pokud není specifikován, Kilo má default. Klíčové zjištění o Kilo konfiguraci modelu:

- [OVĚŘENO] `agent.<jméno>.model` je **ve schématu** a je **per-agent** — existuje `agent` jako mapa jméno → `AgentConfig` s polem `model`. Deterministicky otestovatelné a auditovatelné v jednom souboru.
- [OVĚŘENO] Globální `subagent_model` je **dokumentovaný klíč `kilo.jsonc`** (Kilo Code docs, „Model Selection Guide": „Subagent model — The default model for subagents launched by the `task` tool. Configured with the `subagent_model` key in `kilo.jsonc`") a má vlastní pole v UI (Settings → Models → Subagent Model), **ale chybí v publikovaném `$schema`**, který má `additionalProperties: false`. [NEOVĚŘENO] zda CLI/validátor na neznámý top-level klíč spadne fatálně, nebo ho tiše ignoruje.
- [NÁVRH] **D8 řešit přes `agent.verifier.model`**, ne přes globální `subagent_model`. Důvod: `subagent_model` by prosil **všech** subagenty včetně těch pod testem, což je opak požadavku D8. Per-agent klíč dovolí dát judge jinou modelovou rodinu než agentovi pod testem, a je současně platný v `$schema`.
- `subagent_model` zůstává [NEOVĚŘENO] / volitelná varianta pro případ, že vlastník chce mít default subagent model globálně; v takovém případ musí být současně i explicitně ověřeno, že validátor neznámé top-level klíče přijímá.
- [HYPOTÉZA] **Konkrétní modelové ID není známé** a nesmí být vymyšleno. Gate 0 proto **nesmí vybrat model sám** — modelové ID se doplní přes Settings → Models po rozhodnutí vlastníka; do té doby zůstává tato položka [HYPOTÉZA].
- [OVĚŘENO] Docs: „Invalid selections fail instead of silently falling back" → **neplatné modelové ID selhává místo tichého fallbacku**, což je v souladu s invariantem 1 (§14, žádný tichý přechod). Naopak tichý fallback by porušil právě D8 i invariant 1.

[NÁVRH] Povinný kontrolní seznam před Gate 1: (a) identifikovat provider + model z `.kilo/kilo.jsonc` (`agent.verifier.model`, případně `subagent_model`) **plus** frontmatteru agenta — frontmatter má přednost; (b) pokud rodina modelu není známa nebo ID není doplněno → **požadovat od vlastníka potvrzení** před spuštěním Gate 1, nikoli pokračovat na defaultu; (c) pokud je to stejný model/rodina jako systém pod testem → **zamítnout jako judge** a vyžadovat externí/human review (§12.3).

# Sekce 11–12 hotovo

---

## 13. Fáze roadmapy V6

Číslované fáze F0–F11. Každá fáze má **název | vstup | výstup | gate**. Pořadí a obsah níže je [NÁVRH]; stav vstupů a doložené reference jsou [OVĚŘENO] tam, kde jsou uvedeny jako ověřené.

### 13.1 Přehledová tabulka fází

| Fáze | Název | Vstup | Výstup | Gate |
| --- | --- | --- | --- | --- |
| **F0** | Čistá základna a důvěryhodný baseline | 46 necommitnutých položek (28 `M` + 18 `??`), 4 commity (HEAD `90a42e6`), prázdný remote | auditní seznam všech necommitnutých změn se stale/workaround taggingem; opravy nesrovnalostí docs vs kód | zelená CI (první běh vůbec) |
| **F1** | Kilo základ | `.kilo/` bez `permission` | `.kilo/kilo.jsonc` (§8.1), `.kilo/agent/`, `.kilo/command/`, `.kilo/skills/`, `.kilo/context/handoff/` | policy-test nad `.md` jako kódem: `bash: deny` u všech, `subagent_depth: 1`, `task: allow` jen u Orchestrátora a jako allowlist |
| **F2** | PromptMaster | F1 | `promptmaster.md` | artefakt s `declared_actions`, žádná delegace |
| **F3** | MCP server | `extension_layer/tool_protocol.py` | `cyberbrain26_*` nástroje | žádné `bash`, autorizace před provozem |
| **F4** | Orchestrátor + registr agentů | F2, F3 | `orchestrator.md` + tabulka §10 | hloubka delegace 1, všichni `bash: deny` |
| **F5** | Verifikační agent + eval harness | F4 | `verifier.md` + promptfoo/Inspect | deterministický Gate 1/2 v `ci.yml` zelený |
| **F6** | Deep research agent | F4 | `deep-research.md` + politika §11 | politika deep research vynucena |
| **F7** | Hardening | 7 mezer (`SECURITY.md:107-182`) | 9 oprav (a)–(i) | žádný fail-open sandbox bypass |
| **F8** | Uživatelský scénář P0 | `ROADMAP_V5.md:117-128` | jeden end-to-end flow | demo P0 zelené < 2 min |
| **F9** | Odstranění mrtvého kódu | audit F0 | pročištěná `control_plane/` | žádné 0-import moduly |
| **F10** | Dokumentace a bezpečnostní list | F7, F8 | `SECURITY_ONE_PAGER_V6.md` | threat model V6 pokryt |
| **F11** | Etapa 0 z V5 (volitelná) | `ROADMAP_V5.md:96` | tržní validace | neblokuje F1–F10 (D9) |

### 13.2 F0 — Čistá základna a důvěryhodný baseline

Vstup: 46 necommitnutých položek (28 `M` + 18 `??`), 4 commity (HEAD `90a42e6`), prázdný remote. [OVĚŘENO]

Výstup: (a) auditní seznam všech necommitnutých změn s tagem `stale` / `workaround`; (b) opravy nesrovnalostí docs vs kód — `docs/SECURITY_ONE_PAGER.md:197`, `docs/CAPABILITIES.md:137`, `PROJECT_STATUS.md:84-87,178-180,203-218`, `SESSION_HANDOFF.md:103,109` (vše zastaralé, viz §1 note). [NÁVRH]

Gate: zelená CI. [OVĚŘENO] **Pozor: CI nikdy neběželo** — prázdný remote znamená, že nelze tvrdit „CI je zelená“; remote se musí nastavit a CI spustit poprvé. `dependency-audit` má dnes `continue-on-error: true` (`ci.yml:223`) → v F0 přehodnotit na `false`. Povinné: `pip install --require-hashes` lockfile `ci.yml:239-243` zůstává jediným trust ancorem. [OVĚŘENO]

### 13.3 F1 — Kilo základ

Vstup: `.kilo/` s `.kilo/kilo.jsonc` obsahujícím jen `$schema` — žádný `permission`, žádný `agent/`, `command/`, `skills/`. Kořenový `kilo.json` neexistuje a **F1 ho nevytváří**. [OVĚŘENO]

Výstup: `.kilo/kilo.jsonc` (§8.1) — **ne** kořenový `kilo.json` — dále `.kilo/agent/` + `.kilo/command/` + `.kilo/skills/` + `.kilo/context/handoff/`, permission baseline s `bash: deny`, `subagent_depth: 1` a `default_agent: "orchestrator"` (§8.1). [NÁVRH]

Gate: **Gate 0 je policy-test nad `.kilo/agent/*.md` jako kódem** — deterministický test v `ci.yml`, **ne lidská revize** — protože `.kilo/agent/*.md` je deklarativní konfigurace bezpečnostní hranice (§8.2). Test kontroluje: (a) žádný agent nemá `bash` jinak než `deny`; (b) `permission` každého agenta je **subsetem** serverové `permission` v `.kilo/kilo.jsonc` — nikdy `allow` tam, kde server má `deny`; (c) `task: allow` má **jen** Orchestrátor a je to **explicitní allowlist objekt** (`{"*": "deny", ...: "allow"}`), nikoli globální `allow`; (d) žádný agent nemá `cyberbrain26_*` jako `deny` (jinak by D3/D4 řetězec byl mrtvý) ani jako `allow` (musá být `ask`); (e) frontmatter je validní YAML a `mode` ∈ {`primary`, `subagent`, `all`}; (f) `.kilo/kilo.jsonc` projde schématem `https://app.kilo.ai/config.json` — `Config` má `additionalProperties: false`, takže prezentace odpovídající ve schématu je součástí konfigurace, ne lidský ísudek. Navíc `bash: deny` a hloubka delegace 1 (§8.1, §8.2) a Kilo se chová podle §8.1 — před gate je nutný reload Kilo session (§13.14). [OVĚŘENO] Runtime brána používá `kilo debug config`, který vrací **čistý JSON** včetně `permission_origins` (rozlišuje `global` vs `local` zdroj každého pravidla) — je to nejspolehlivější zdroj pravdy, protože `kilo agent list` **není JSON** a při pipeování do `json.load` spadne. [OVĚŘENO] `kilo config check` existuje jako read-only validátor, ale **vrací exit code 0 i na chybě konfigurace** (ověřeno: s vloženým neznámým top-level klíčem vypsal `Unrecognized key: ...` a stále skončil 0). [NÁVRH] Brána proto musí kontrolovat **text výstupu**, ne exit code — jinak by byla tichou bránou, což zakazuje invariant 1 (§14). [NEOVĚŘENO] Původní hypotéza §13.14, že neznámý top-level klíč vyvolá fatální `InvalidError`, se **nepotvrdila**; validátor chybu hlásí v textu, nikoli fatálně. [NÁVRH]

[OVĚŘENO] **Tento Gate 0 test už existuje a prochází**: `tests/test_kilo_agent_policy.py`, 31 testů, `31 passed` (spuštěno 2. 10. 2026). Je **samostatný** — importuje pouze stdlib + `yaml` + `pytest` a **neimportuje nic z `src/cyberbrain26`**; čte pouze `.kilo/`. Obsahuje **meta-test**, který ověřuje schopnost testu selhat: v throwaway kopii `.kilo/agent/` se zmutuje `deny → allow` a `ask → deny` a testy skutečně selhaly (meta-test fixtures se zapisují jen do `tmp_path`). Pravidla jsou **role-aware** a rozlišují dvě množiny: **`NON_EXECUTING_AGENTS`** (dnes `promptmaster`, §9.1) — `bash` musí být `deny` **nebo** `ask`, nikdy `allow`, přičemž **`deny` je preferované**, protože `ask` by umožnilo uživateli schválit exekci a obešlo by D6; **`EXECUTION_PATH_AGENTS`** (dnes `orchestrator` a `verifier`, §9.2) — `bash` musí být `ask`, protože `deny` by tu byla skutečná chyba. [OVĚŘENO] Test zároveň vypisuje nezařazené agenty (`unclassified_agent`) a pokrytí Gate 0/F1; při tomto spuštění hlásil `1/8` z 8 plánovaných agentů, protože `tester` a `documenter` se přidávají až ve F4.

[OVĚŘENO] **Kořenový `kilo.json` se NEVYTVÁŘÍ**: `.kilo/kilo.jsonc` má přednost (deep-merge, ne replace) a dva soubory by byly dva překrývající se zdroje pravdy. 

### 13.4 F2 — PromptMaster

Vstup: F1. Výstup: `promptmaster.md` (§9.1, D6). [NÁVRH]

Gate: PromptMaster přijímá ukázkový prompt, vygeneruje artefakt, `task` zůstává `deny` (nesmí nikomu delegovat); artefakt obsahuje `declared_actions`. [NÁVRH]

### 13.5 F3 — MCP server

Vstup: `extension_layer/tool_protocol.py` — 48 řádků, zatím jen abstrakce (`tool_protocol.py:1,21,23-24`). [OVĚŘENO]

Výstup: `cyberbrain26_*` nástroje — read-only sada, `cyberbrain26_authorize_action`, `cyberbrain26_execute`, `cyberbrain26_check_vocabulary`, `cyberbrain26_list_actions`, `cyberbrain26_run_*` (testy/audit), `cyberbrain26_write_handoff`, `cyberbrain26_approve_action`. Žádné `bash` v serveru. [NÁVRH]

### 13.6 F4 — Orchestrátor + registr agentů

Vstup: F2 + F3. Výstup: `orchestrator.md` (§9.2) + tabulka registrů agentů (§10). [NÁVRH]

Gate: hloubka delegace 1; subagenti nemají `task: allow`; `bash: deny` všemi; každé exekuční volání prochází `cyberbrain26_authorize_action`. [NÁVRH]

### 13.7 F5 — Verifikační agent + eval harness

Výstup: `verifier.md` (§12.1) + promptfoo/Inspect harness + deterministický Gate 1/2 zabudovaný do `ci.yml`. [NÁVRH]

Gate: fail-closed test bez bwrap zelený (`ci.yml:175-198`); baseline snapshot existuje a je uložen; semgrep běží na dotčených souborech. [NÁVRH]

### 13.8 F6 — Deep research agent

Výstup: `deep-research.md` (§11.1) + politika deep research (§11.2). [NÁVRH]

### 13.9 F7 — Hardening

Vstup: 7 mezer z `SECURITY.md:107-182`. [OVĚŘENO]

Výstup: [NÁVRH] (a) provenance inspirovaná CaMeL (`https://arxiv.org/abs/2503.18813`); (b) nsjail seccomp-bpf (volba mezi kandidáty v §7); (c) Landlock s detekcí kernel ABI 4 — **abort, ne fail-open**; (d) podepsaný audit checkpoint mimo log — [HYPOTÉZA] buď tamperlog/auditchain, nebo vlastní `checkpoint` v `audit/__init__.py:271`; (e) PII redakce před egressem přes Presidio; (f) zákaz tichého cloud fallbacku (D10 / invariant „žádné tiché přechody“); (g) prompt egress jako druhá linie proti injection (§5.4); (h) zapojit `AIFirewall` (`firewall/__init__.py:155`, 727 řádků) do cesty, nebo ho smazat — třetí stav „nechat ležet“ není přípustný; (i) opravit `PtahBridge` authorizer (`ptah_bridge.py`, `orchestrator.py:108-146,180,220-253`) a odstranit `control_plane/api` + `control_plane/registry` (§5.8). [OVĚŘENO + NÁVRH]

Gate: žádný `RuntimeError("refusing to run code without a sandbox")` neprojde bez explicitního review — tj. fail-closed chyba nesmí být obejita jako „neomezující“. [NÁVRH]

### 13.10 F8 — Uživatelský scénář P0

Vstup: `ROADMAP_V5.md:117-128`. [OVĚŘENO]

Výstup: jeden jasný flow — příkaz → zobrazení konkrétní akce ke schválení (`:121`) → identita + policy **před každým** voláním (`:122`) → fail-closed při chybějícím sandboxu (`:123`) → git worktree + diff (`:124`) → persistovaný audit (`:126`) → historie (`:127`). [NÁVRH]

Gate: demo P0 zelené pod 2 minutami; všechny mezery identifikované v §5 jsou v tomto flow buď ozanulované, nebo explicitně prohlášené za mimo scope. [NÁVRH]

### 13.11 F9 — Odstranění mrtvého a duplicitního kódu

`control_plane/api/__init__.py` — 450 řádků, 0 importů z `src/`, jediný referent `tests/test_api_gateway.py:20`. `control_plane/registry/__init__.py` — 246 řádků, 0 importérů; `extension_layer/agent_registry.py:15` už používá `InMemoryAgentRegistry`. [OVĚŘENO] Výstup: smazat nebo reálně zapojit; gate = žádný modul s 0 importéry ve `src/`. [NÁVRH]

### 13.12 F10 — Dokumentace a bezpečnostní list

Výstup: `SECURITY_ONE_PAGER_V6.md` — oddělit ověřený stav od nových rizik V6 (Kilo jako závislost, Kilo Memory, prompt injection); a `docs/SECURITY_ONE_PAGER.md` doplněný o nové threaty V6 z §11. [NÁVRH]

### 13.13 F11 — (volitelně) Etapa 0 z V5

Gate z `ROADMAP_V5.md:96`: ≥ 5 respondentů, ≥ 3 pilotní tasky, ≥ 2 placené nabídky. [OVĚŘENO] **F11 neblokuje F1–F10** (D9). [OVĚŘENO] Jde výhradně o tržní validaci „Agent Guard“ — název se nesmí používat, dokud gate neprojde. [OVĚŘENO]

### 13.14 Sekvenční závislosti

[NÁVRH] F0 → F1 → {F2, F3} → F4 → {F5, F6} → F7 → F8 → {F9, F10}; F11 je nezávislá.

Dvě tvrdá omezení pořadí:

- **F7 a F8 nesmějí běžet dřív, než je hotov Gate 1 + Gate 2 z F5.** Žádný LLM judge před deterministickým baseline (§12.2) — jinak by hardening i P0 demo byly ověřovány jen LLM úsudkem.
- **F0 nelze přeskočit.** Bez commitnutého/otagovaného baseline nemá smysl audit chain, snapshot ani diff v Gate 2 — baseline by byl definován až podle právě změněného kódu.
- **F1 gate vyžaduje reload Kilo session.** [OVĚŘENO] Kilo cachuje project-level `.kilo/kilo.jsonc` při prvním načtení worktree a nečte ho znovu při každém promptu. Bez reloadu okna nebo nové CLI session by gate validoval jinou konfiguraci, než se fakticky běží — tedy by ověřoval soubor, ne to, co Kilo skutečně používá. [NÁVRH]

---


## 14. Nezměnitelné invarianty

> Výčet „co se nesmí“ — každou položku stručně s odůvodněním a odkazem na rozhodnutí/zákon. Označeno [NÁVRH].

1. **Žádný tichý přechod** (`ROADMAP_V5.md:199`) — žádný fallback na méně bezpečný režim ani provider bez vědomí uživatele. [NÁVRH]
2. **Žádný nesandboxovaný fallback** (bezpečnostní pořadí v `AGENTS.md`) — všechny exekuce jdou přes `BubblewrapExecutionProvider` (`bubblewrap_provider.py:97`); `RuntimeError("refusing to run code without a sandbox")` (`:129-134`) musí zůstat. [NÁVRH]
3. **Jeden orchestration path** (`ROADMAP_V5.md:196`) — žádná paralelní orchestration cesta; Kilo Task tool je jediný delegátor, Orchestrátor je primary agent (§9.2). [NÁVRH]
4. **Žádný tichý cloud fallback na placený provider** — `ModelGatewayConfig.default_provider="litellm"` + tichý fallback (`SECURITY.md:144-150`) zakázán; výzkum LiteLLM `enforce_fallback_model_access`. [NÁVRH]
5. **Žádné bezpečnostní rozhodnutí v promptu** — prompt nesmí obsahovat „smíšťovací“ instrukce (§5.4, ASI01). [NÁVRH]
6. **Žádné `bash` u agentů** (§8.2, D3) — nikdo nemá `bash` ani v `.kilo/kilo.jsonc`, ani ve frontmatteru; `bash: deny` je vynuceno dvěma nezávislými mechanismy (§8.2). [NÁVRH]
7. **Žádné prohlášení ochrany proti nepřátelskému kódu** (`AGENTS.md`, `SECURITY.md:237-239` honest status) — sandbox je redukce blast radius, ne absolutní bezpečnost. [NÁVRH]
8. **Žádný LLM judge jako Gate 1** (§12.3) — jen jako Gate 3, nikdy jako jediný. [NÁVRH]
9. **Žádné mazání ani přepisování cizích změn v pracovním stromu** (`AGENTS.md`, `git stash` zakázán v Agent Manager) — všech 46 necommitnutých položek zachováno. [NÁVRH]
10. **Žádný `git stash`** — vyloučit v `.kilo/kilo.jsonc`/`.kilo/` a v `setup-script.sh`. [NÁVRH]
11. **Jedna security plane pro oba klienty** (D4) — `cyberbrain run` CLI a Kilo MCP sdílejí `AuthorizedExecutionService`, ne dva paralelní pásma. [NÁVRH]
12. **Tvrdý invariant hloubky 1** — subagenti nemohou delegovat dál (Kilo od 2026-04). [NÁVRH]

### 14.1 CI fail-closed kontroly

Každý job v `ci.yml` má mít **fail-closed** kontrolu proti porušení invariantu. Příklady:

| Invariant | Fail-closed kontrola |
|---|---|
| #3 jedna orchestration path | `grep -L '"*": "deny"' .kilo/agent/verifier.md` a `grep '"subagent_depth": 1' .kilo/kilo.jsonc` — verifier nesmí delegovat, hloubka vynucena i runtime |
| #6 žádné `bash` | `grep '"bash"' .kilo/kilo.jsonc` — musí být `deny`; plus policy-test nad `.kilo/agent/*.md` (§13.3) |
| #2 sandbox | `ci.yml:175-198` — fail-closed test bez bwrap |
| #8 žádný LLM judge jako Gate 1 | kontrola, že Gate 3 nenásleduje přímo po změně |
| #10 žádný `git stash` | `grep -rn "git stash" .kilo/ setup-script.sh` — musí být prázdný |

## 15. Co je otevřené, co je hypotéza

### 15.1 Co požaduje externí bezpečnostní revzi [HYPOTÉZA]

| Položka | Co je potřeba prověřit | Zdroj |
|---|---|---|
| (a) audit `AIFirewall` | Projití 727 řádků `firewall/__init__.py:155` před zapojením do cesty | `SECURITY.md:151-156` |
| (b) review provenance/kontrolů CaMeLu | Schválit model provenance a policy kontroly inspirované CaMeL | `ROADMAP_V6.md:410` |
| (c) security review CSP pro `LiteLLM` | Licence `NOASSERTION`; potvrdit, že CSP neroutí data ven | `SECURITY.md:148-150` |
| (d) review `tamperlog`/`auditchain` | Zkontrolovat, zda lze použít jako audit checkpoint před commitem | `product/approvals.py:24-27` |
| (e) review `mcp-scan --local-only` | Ověřit, že lokální scan neproniká mimo workspace | ASI01, §5.4 |
| (f) review `ToolHive` | Izolace MCP serverů — potvrdit, že neobchází bubblewrap | §5.6 |
| (g) review externích eval judgeů | Předschválit proti `Reliability without Validity` (position/styl bias) | §12.3, `arxiv.org/abs/2606.19544` |

### 15.2 Co je odhad / neověřené [HYPOTÉZA]

| Položka | Proč je neověřeno |
|---|---|
| (a) hvězdičky/licence v §7 | Mechanismus ruční evidence; většina není ověřenách |
| (b) `ModelGatewayConfig` fallback | Přesné podmínky `litellm` fallbacku nejsou v kódu podrobně popsané |
| (c) hloubka 1 v Kilo | Pexactý limit `task: deny` v subagentech potřebuje ruční ověření při implementaci |
| (d) `inspect_external_egress` | Dead code (`firewall/__init__.py:277`); nikdo nepoužívá |
| (e) „~66 % branch coverage“ | Odhad; ověřeno jen z `pyproject.toml:233` (`fail_under = 60`) |
| (f) „~6 minor verzí mezi CLI 1.0 a běžící v7.6.2“ | Běžící verze na tomto stroji je `7.6.2` [OVĚŘENO] — ověřeno runtime 2. 10. 2026. Samotné **tempo a počet releasů** jsou odhad vyčtený jen z verzovacího logu Kilo na GitHubu, proto zůstávají [HYPOTÉZA] |
| (g) `Ollama`/`llama.cpp`/`vLLM` jako lokální modely | Nejsou v kódu |
| (h) parametry `Cedar` WASM binding pro Python | Nejsou v kódu |
| (i) `auditd` jako ground truth | Nevyžaduje se jako dependency, ale jako systémový prvek provoze |

---

## 16. Zdroje

Skupina 16.1 je primární a je platná k HEAD `90a42e6cee27a6233c9b6e7255f35a772bd4f9a2` včetně necommitnutých změn pracovního stromu. Skupiny 16.2–16.15 jsou veřejné zdroje ověřené 2. 10. 2026 **[VÝZKUM]**, není-li uvedeno jiné datum — v takovém případě je uvedeno datum vydání, události nebo revize, nikoli datum přístupu.

### 16.1 Lokální repozitář

Odkazy `file:line` v tomto dokumentu nejsou URL. Jde o čtení kódu v lokálním repozitáři `/home/oem/CyberBrain26-v4` — `src/cyberbrain26/`, `tests/`, dokumenty — ověřeno **read-only 2. 10. 2026** **[OVĚŘENO]**. Nejčastěji citované soubory: `security_plane/firewall/__init__.py`, `execution_plane/secure_gateway.py`, `execution_plane/bubblewrap_provider.py`, `security_plane/permission/__init__.py`, `security_plane/audit/__init__.py`, `agents/orchestrator.py`, `extension_layer/registry_impl.py`, `extension_layer/tool_protocol.py`, `data_plane/sqlite_store.py`, `cli.py`, `product/approvals.py`, `pyproject.toml`, `ci.yml`, `SECURITY.md`, `PROJECT_STATUS.md`, `docs/CAPABILITIES.md`, `docs/product/DECISIONS_LOG_V5.md`, `ROADMAP_V5.md`, `.kilo/context/Cyberbrain26_master_roadmapv4-1.md`.

### 16.2 Kilo Code

| Zdroj | URL / poznámka | Datum |
|---|---|---|
| Repozitář Kilo Code | `https://github.com/Kilo-Org/kilocode` | průběžně |
| Orchestrator mode | `https://kilo.ai/docs/code-with-ai/agents/orchestrator-mode` | **deprecated 2. 4. 2026** |
| Akvizice Anacondou | `https://www.anaconda.com/press/anaconda-acquires-kilo-code` | 15. 7. 2026; 3M+ uživatelů |
| Incident orchestrator | `https://github.com/anthropics/claude-code/issues/27099` | 2026-02-20 |
| Self-hosted sandbox security (disable bash) | `https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-security` | — |
| JSON Schema `Config` (autoritativní) | `https://app.kilo.ai/config.json` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| Agent permissions (formát, precedence, patterny, `task` globy) | `https://kilo.ai/docs/customize/agent-permissions` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| Custom subagents (`mode`, `permission`, frontmatter, restricted orchestrator, precedence) | `https://kilo.ai/docs/customize/custom-subagents` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| Auto-approving actions (seznam permission klíčů, MCP `{server}_{tool}`, caching `.kilo/kilo.jsonc`) | `https://kilo.ai/docs/getting-started/settings/auto-approving-actions` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| Settings (precedence config souborů, `.kilo/` má přednost, deep-merge) | `https://kilo.ai/docs/getting-started/settings` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| Model selection guide (`subagent_model` jako dokumentovaný klíč `kilo.jsonc`; chybí ve `$schema`) | `https://kilo.ai/docs/code-with-ai/agents/model-selection` | staženo 2. 10. 2026 **[OVĚŘENO]** |
| CVE | CVE-2025-54795, CVE-2026-25725 (Claude Code) | — |

[OVĚŘENO] **Runtime verifikace na tomto stroji 2. 10. 2026:** Kilo CLI `/usr/local/bin/kilo` ve verzi **7.6.2**; ověřeno příkazy `kilo config check` (čistě), `kilo debug config` (čistý JSON, 215 řádků), `kilo agent list` (neJSON) a `kilo debug agent orchestrator` (resolved config agenta). Konfigurace `.kilo/kilo.jsonc` se načítá bez chyby; `permission_origins` potvrzuje `local` původ všech sedmi bezpečnostních pravidel.

### 16.3 MCP SDK a bezpečnost MCP

| Zdroj | Verze / licence | Datum / poznámka |
|---|---|---|
| `mcp` (Python SDK) | 2.2.0, MIT | breaking change `FastMCP` → `MCPServer` |
| FastMCP | 4.0.10, Apache-2.0 | předchůdce |
| OWASP MCP Top 10 | `https://owasp.org/projects/mcp-top-10` | MCP03 Tool Poisoning, MCP04 Supply Chain |
| Invariant Labs `mcp-scan` | — | 1. 4. 2025 |
| ToolHive (Stacklok) | Apache-2.0 | izolace MCP serverů |
| MCP Registry, Docker MCP Gateway | oficiální | — |

### 16.4 Výzkum AI security

| Zdroj | URL | Datum / poznámka |
|---|---|---|
| CaMeL (Google Research) | `https://arxiv.org/abs/2503.18813`, kód `https://github.com/google-research/camel-prompt-injection` | 25. 3. 2025, rev. 24. 6. 2025 |
| Claude Code sandboxing | `https://www.anthropic.com/engineering/claude-code-sandboxing` | 20. 10. 2025 |
| Beyond permission prompts | `https://claude.com/blog/beyond-permission-prompts-making-claude-code-more-secure-and-autonomous` | — |
| Microsoft Spotlighting | Hines et al. | 19. 3. 2024, rev. 10. 4. 2025 |
| PromptArmor | — | 21. 7. 2025 |
| „Lethal trifecta“ (S. Willison) | `https://simonwillison.net/2025/Jun/16/the-lethal-trifecta` | 16. 6. 2025 |
| OWASP Top 10 for Agentic Applications | `https://genai.owasp.org/2025/12/09/owasp-top-10-for-agentic-applications-…/` | 9.–10. 12. 2025 |
| OWASP MCP Top 10 | `https://owasp.org/projects/mcp-top-10` | viz 16.3 |
| MITRE ATLAS | `https://atlas.mitre.org/`, data `https://github.com/mitre-atlas/atlas-data` | vydání `ATLAS-2026.09`, 2026-09-15 |
| CSA „Agentic MCP Security Best Practices“ | — | 2026-04-19 |
| Slopsquatting | Trend Micro; CSA note; Seth Larson | 2025-06-18; 2026-04-19; únor 2025 |
| Claude Code plan mode + acceptEdits | `https://code.claude.com/docs/en/permissions`, `https://claude.com/…/security` | — |
| Gemini CLI Plan Mode | `https://geminicli.com/docs/cli/plan-mode` | — |

### 16.5 LLM-as-judge

| Zdroj | URL / poznámka | Datum |
|---|---|---|
| Reliability without Validity | `https://arxiv.org/abs/2606.19544` (position/style bias) | duben 2026 |
| Judging the Judges | `https://arxiv.org/abs/2604.23178` | — |
| Self-preference | `https://arxiv.org/abs/2604.22891` | — |
| Yamauchi et al., ACL GEM | AB+BA swap | 2026 |

### 16.6 Poisoning paměti agentů

| Zdroj | URL | Datum |
|---|---|---|
| Základní práce | `https://arxiv.org/abs/2608.00426` | 1. 8. 2026 |
| Detekce | `https://arxiv.org/abs/2606.30566` | — |
| Misattribution gap | `https://arxiv.org/pdf/2605.22842v1` | — |
| FARMA | `https://arxiv.org/abs/2607.05029` | — |

### 16.7 Normalizace a rámce rizik

| Zdroj | URL | Datum |
|---|---|---|
| NIST AI RMF GenAI | `https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence` | — |
| NIST AI 600-1 (PDF) | `https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf` | 26. 7. 2024 |

### 16.8 Eval nástroje

Inspect AI 0.3.275 (MIT, UK AISI) · promptfoo (npm) · DeepEval 4.2.7 · Giskard 3.0.1 · Ragas 0.4.3 · OpenAI Evals · LangSmith, Braintrust, PromptLayer (self-hosted) · Phoenix (Arize).

### 16.9 Observability

Opik 2.2.87 (Apache-2.0) · OpenLIT 1.45.0 (Apache-2.0) · Langfuse 4.16.0 · OpenTelemetry GenAI semconv.

### 16.10 Paměť a persistence

mem0 · Graphiti (Zep) · Cognee · `sqlite-vec` 0.1.9 (31. 3. 2026) · `sqlite-vss`.

### 16.11 PII a supply chain

Presidio (MIT) · scrubadub · detect-secrets (Apache-2.0) · semgrep 1.179.0 (LGPL-2.1) · bandit 1.9.4 · pip-audit 2.10.1 · SBOM (CycloneDX/SPDX) · SLSA.

### 16.12 Policy a autorizace

OPA/Rego (Apache-2.0) · Cedar (Apache-2.0) · OpenFGA (Apache-2.0) · Cerbos · Casbin · immudb.

### 16.13 Audit

`auditd` · `inotify` · tamperlog · auditchain.

### 16.14 Sandboxing

bubblewrap (LGPL) · nsjail (Apache-2.0) · Landlock (ABI 1–6, síťová kontrola od ABI 4) · gVisor · Firecracker · Podman · runc · systrace (deprecated).

### 16.15 Modely a LLM gateway

Ollama · llama.cpp · vLLM · SGLang · Redis (nízký dopad) — modely jsou [HYPOTÉZA], v kódu nejsou (§15.2 g).
LiteLLM 1.103.2 (licence `NOASSERTION`, proto security review — §15.1 c) · Bifrost (Apache-2.0).

---

## Závěr

- **Hlavní závěr:** Přenos bezpečnosti na Kilo jako front-end je proveditelný, ale pouze tehdy, pokud bezpečnostní rozhodnutí zůstanou v Pythonu za `AuthorizedExecutionService` a pokud Kilo zůstane nástrojem UX, ne autoritou. V5 a v4.1 obsahují tvrzení, která neodpovídají kódu; F0 musí nejprív zjistit skutečný stav, jinak se bezpečnostní závěry staví na plánu, jehož stav není ověřený. Cílem V6 je [NÁVRH] 12 invariantů a F0–F11 s fail-closed gate kritérii, nikoli prohlášení ochrany proti nepřátelskému kódu.
- **5 hlavních rizik:** (1) bezpečnostní plocha se posouvá do deklarativních `.kilo/agent/*.md` a `.kilo/kilo.jsonc`, kde ji nelze fail-closed prosadit stejně jako v Pythonu; (2) vendor riziko a deprecace Kilo — akvizice Anacondou (15. 7. 2026), `orchestrator mode` deprecated (2. 4. 2026), plánování dopadu není v tomto dokumentu řešeno; (3) prompt injection a memory poisoning — je třeba rozlišovat `provenance` od `sanity` (CaMeL), ale i po sanitizaci zůstává Gate 3 LLM-as-judge, jehož kappa je zkreslená a jehož výsledek je bez korekce nespolehlivý; (4) sandbox je redukce blast radius, ne izolace — sdílený host kernel znamená, že bubblewrap/Landlock nechrání proti kernel 0-day ani proti škodlivému kódu běžícímu uvnitř; (5) neprověřené a nepropojené a neprověřené bezpečnostní plochy — `AIFirewall` je mimo cestu spuštění, `inspect_external_egress` je dead code, licence a hvězdičky v §7 jsou převážně neověřené a LiteLLM má `NOASSERTION`.
- **Co potřebuje rozhodnout vlastník:** D1–D10 jako vstup do F0 (schválení identity a oprávnění jako gate, nebo audit bez gate); zda `Gate 3` zůstává a je-li LLM-as-judge s korekcí jediným nápravou; zda se CSP LiteLLM vůbec používá kvůli `NOASSERTION`; zda se přijme externí bezpečnostní revize položek §15.1 (a)–(g) jako podmínka F2; a zda se CyberBrain26 vůbec posouvá na Kilo, nebo zůstává vlastní CLI.

**Otevřená poznámka — co nebylo ověřeno:** tento dokument rozlišuje ověřený stav, návrh a hypotézu značkami (§1.2). Položky, které zůstaly odhadem nebo nebyly doloženy důkazem, jsou vypsány v §15.2 „Co je odhad / neověřené [HYPOTÉZA]“ a v celé sekci 15 „Co je otevřené, co je hypotéza“. Tyto položky nejsou podkladem pro bezpečnostní rozhodnutí; §15.1 navíc uvádí, co je stále předmětem externí bezpečnostní revize.

# Konec dokumentu
