From dddcaa7b6263519698175d40d1763d2fd0c426d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 20:35:59 +0200 Subject: [PATCH 1/7] Docs: the Environment browser's architecture for apps and forks (0191 addendum) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matěj asked for one document that says how Lazurio thinks about the Environment browser and how it fits T3 Code, Lazurio MausBot and Codex Desktop, to be followed whenever a fork is updated or upstream or Codex Desktop ships a new version. manual/environment-browser.md: - the principles: one browser per Environment with shared sign-ins; agents work through the agent-browser fork; people see a tab only through the Platform's view; management from the Launchpad; a tab lives while something holds it; Environment boundaries; - who owns what, and how a tab is born and ends; - the host app contract; - each app in turn: T3 Code as the main target, MausBot with the same contract, Codex Desktop as a conscious compromise; - the fork-update rules, and upstream T3 Code's direction as of today (its own browser on the T3 server, which the fork must point at the Environment browser or turn off). The decision register's 0191 gains the 2026-10-11 evening addendum (points 24-27) recording Matěj's rules, and manual/README.md lists the document. Co-Authored-By: Claude Opus 5.5 --- manual/README.md | 4 + manual/decision-register.md | 2 +- manual/environment-browser.md | 253 ++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 manual/environment-browser.md diff --git a/manual/README.md b/manual/README.md index 706a5e9e..c8877b7a 100644 --- a/manual/README.md +++ b/manual/README.md @@ -36,6 +36,10 @@ Maintenance agent před zásahem ověřuje: - [Servisní připravenost agentů](agent-service-readiness.md) — návrh společné acceptance pro neinteraktivní servis, nezávislou obnovu a dostupnost modulu přes běžnou URL; rozlišuje dnešní hranice a cílovou automatickou konvergenci. +- [Prohlížeč Environmentu](environment-browser.md) — jedna architektura + prohlížeče Environmentu pro Launchpad, T3 Code, Lazurio MausBot a Codex Desktop: + principy, kdo co vlastní, smlouva hostitelské aplikace a pravidla pro + aktualizace forků a nové verze upstreamu (dodatek 0191 z 2026-10-11). - `manual/external-app-integrations.md` — kanonický standard napojení na externí aplikace: lokálně kurátorované MCP servery a CLI místo cloudových konektorů, tracked katalog integrací v repu Organizace, žebříček výběru, diff --git a/manual/decision-register.md b/manual/decision-register.md index 917114b4..86186f89 100644 --- a/manual/decision-register.md +++ b/manual/decision-register.md @@ -124,7 +124,7 @@ frameworku se sem nepřenášejí). | 0188 | **První spuštění Environmentu: prohlídka po skutečném rozhraní k GitHubu v Nastavení, obsah podle druhu Environmentu a oprava v Chatu.** Matěj (Organization Admin) 2026-10-04 po pěti kolech wireframu s Aničkou (spoluzakladatelka, owner design systému a UX shellu); plán DEV-6644. Navazuje na 0091, 0153, 0178, 0185 a 0187. (1) **Prohlídka, ne formulář.** Kdo poprvé otevře svůj Environment (osobní, pracovní nebo vlastní počítač), dostane prohlídku po skutečném rozhraní: kroužek kolem prvku a bublina vedle; kliká sám. Pořadí: ozubené kolo → Nástroje → Připojit u gh, volitelně Composio, pak Tento Environment → stáhnout Organizaci nebo připravit osobní prostor, nakonec Apps, Chat, Automate a „Nastavení je vždycky tady“. Člověk se tak naučí, že napojení a obsah Environmentu patří do Nastavení. Prohlídka jde kdykoli ukončit. (2) **Bez GitHubu nic nefunguje.** Dokud chybí GitHub nebo obsah, říká to jednořádkový banner v Apps i v hlavičce sloupce shellu, tedy i v Chatu a Automate, i po zavření prohlídky; tlačítko vede do Nastavení a akci tam rovnou spustí. Rozhraní forků se nemění. (3) **Obsah podle druhu Environmentu.** Osobní Environment drží jen osobní prostor (Personalspace), pracovní jen svou Organizaci, vlastní počítač (instalace na localhostu) své Organizace i osobní prostor. Týmové a automatizované Environmenty připravuje jejich hosting; prohlídka se jich netýká. Platí 0091 a 0153: osobní VM nemá repozitáře Organizací a pracovní Environment Personalspace nemountuje. (4) **Stejné jádro jako CLI.** Organizaci stáhne `lazurio organization install ` s rolí člověka v Organizaci, osobní prostor `lazurio personalspace install`; Launchpad volá totéž jádro. Výběr se řídí živou rolí člověka ověřenou na GitHubu: Builder a Steward stahují s `--role builder` a `--role steward`, takže restricted sloty jen pro Admina a jejich potomci se vynechají bez jediné provider operace; plnou instalaci bez `--role` dostane jen ověřený Admin. Když roli nejde ověřit, instalace nezačne (fail closed). Personalspace se připravuje jen na osobním Environmentu a na localhostu: existuje-li na GitHubu, jen se naklonuje, jinak se založí ze šablony Lazuria jako soukromý repozitář. Stažení obsahu je samostatná operace, nikdy součást aktualizace produktu. (5) **Oprava v Chatu odkazem.** Když se příprava zastaví, „Vyřešit v Chatu“ otevře odkaz, který nese jen jméno připraveného zadání; text dodá Launchpad téhož Environmentu, takže cizí odkaz nic nepodstrčí. Chat otevře nové vlákno ve složce Lazurio a zadání jen vloží; odeslat ho musí člověk. Do rozhraní T3 Code se kvůli tomu nezasahuje. (6) **Texty pro kancelářského člověka.** Bubliny mají nejvýš 10–12 slov: proč a co se stane, nic technického, žádné nadpisky ani pokyny „klikni na…“ (kam, ukazuje kroužek). Nastavení nemá úvodní odstavce, podrobnosti patří do návodu (Guide). Nástroje mají svůj skutečný název, aby šel vyhledat a seděl s tím, co říká agent, a pod ním jednu větu, k čemu jsou; stav je Připojeno nebo Nepřipojeno. (7) **Připojený nástroj se pro agenty zapne sám**, aby po přihlášení rovnou fungoval; vypnout ho jde dál ručně. **Provedení:** Launchpad a jádro obsahu v Lazurio/LazurioPlatform (směr F9 content-sync), hlavička sloupce shellu podle 0187. Podklady: wireframe HumanAndMachine-ai/prototypes-lazurio#16. **Dodatek 2026-10-08 (0162, plán DEV-6626): aplikace se připojují v Apps → Připojené aplikace; upřesňuje bod 1.** Do Nastavení dál patří přihlášení nástrojů včetně Composio účtu. Jednotlivé aplikace se připojují na stránce Připojené aplikace a krok prohlídky „Připoj své aplikace“ vede tam. **Dodatek 2026-10-09 (0162, plán DEV-6626):** stránka, na kterou vede krok prohlídky „Připoj své aplikace“, se jmenuje Integrace. | | 0189 | **Chat začíná v Lazurio Folderu; předání z Launchpadu nenese model, platí výchozí model T3 Code.** Matěj (Organization Admin) rozhodl 2026-10-04 po vyzkoušení „+ Nový modul“ na Remote Environmentu, kde se vlákno otevřelo v kořeni Organizace a s naposledy zvoleným slabým modelem. (1) **Všechno začíná v Lazurio Folderu.** Každé vlákno, které Launchpad, průvodce nebo prompt otevírá v Chatu, se otevře v projektu Lazurio Folderu (kořen Folderu daného Environmentu), ne v kořeni Organizace ani v Modulu. Prompt sám řekne, pro kterou Organizaci (jméno a GitHub login) a na čem se pracuje; Agent pak scope určí podle `AGENTS.md`. (2) **Předání promptu odkazem nese jen text a složku**, nikdy model ani reasoning effort. T3 Code otevře takové vlákno s **výchozím modelem z Nastavení** (poskytovatel, model, effort), ne s modelem, který zůstal v poli pro zprávu. (3) **Výchozí model drží Environment jako dobrou volbu i do budoucna.** Doporučení (dnes: přihlášený Codex → GPT 6.1 Sol, effort high; přihlášený Claude → Opus 5.5, effort high) žije na jednom místě a mění se jedním PR, když vyjde lepší model; vlastní volbu člověka nepřepisuje. Kdo doporučení vlastní a jak se kontroluje (Platforma s Doctor kontrolou, Machines rollout, nebo verze forku T3 Code), je otevřené v Lazurio/LazurioPlatform#178 s doporučením Platformy; volba se zapíše jako dodatek tohoto rozhodnutí. **Provedení:** Lazurio/LazurioPlatform#178 (cwd = kořen Folderu, prompt jmenuje Organizaci, výchozí model při přípravě Environmentu), Lazurio/t3code#39 (vlákno z odkazu s výchozím modelem z Nastavení). **Vztah k dřívějším rozhodnutím:** zpřesňuje předání promptu z 0185 (S16) pro Launchpad Platformy z 0167; nic neruší. **Dodatek 2026-10-05 (Matěj zvolil Platformu, Lazurio/LazurioPlatform#178; plán DEV-6644): výchozí model drží aktuální Platforma; uzavírá otevřenou otázku bodu 3.** (a) **Doporučení žije jednou v Platformě.** Doporučený výchozí model podle přihlášeného poskytovatele je na jednom místě v Lazurio/LazurioPlatform vedle instrukcí Folderu a vychází s každým vydáním Platformy; změna doporučení je jeden PR a jedno vydání. (b) **Jiná volba člověka se nepřepisuje.** Platforma si pamatuje hodnotu, kterou do výchozího modelu T3 Code sama zapsala, a aktualizace Platformy a `lazurio doctor` ho změní jen tehdy, když není nastavený nebo v něm pořád je přesně tahle zapsaná hodnota. Kdo si vybere jiný model, tomu ho Platforma nikdy nepřepíše. Kdo si v Nastavení T3 Code sám vybere právě doporučený model, toho Platforma od svého vlastního zápisu nerozezná a bere ho jako „podle doporučení“: s dalším doporučením se posune také (Matěj 2026-10-05 tuto výjimku výslovně přijal; rozlišit ji by vyžadovalo značku ve forku T3 Code nebo sledování souboru s nastavením). (c) **Doctor hlídá.** `lazurio doctor` upozorní, když je výchozí model starší nebo slabší než doporučení, nebo když jeho poskytovatel na Environmentu není přihlášený. **Zamítnuté varianty:** Machines při každém nasazení (každá změna by čekala na rollout a Machines by vlastnil produktovou preferenci) a verze forku T3 Code (svázané s přestavbou na upstream; fork neví, ke kterému poskytovateli se Operátor přihlásil). | | 0190 | **Dashboard podle wireframu na stacku Platformy: dnešní rozhraní Dashboardu je MVP a staví se znovu, doména a provoz zůstávají, Dashboard hostuje shell Lazuria a pořadí Organizací určuje člověk.** Matěj (Organization Admin) 2026-10-05; plán DEV-6645. Navazuje na 0178, 0179, 0185, 0186 a 0187. (1) **Rozhraní znovu, jádro zůstává.** Dashboard má vypadat a fungovat podle wireframu shellu: osobní Dashboard (Přehled, Organizace, Přidat organizaci, Nastavení účtu) a Dashboard Organizace (Přehled, Environmenty, Diagnostika a Nastavení Organizace se sekcemi). Dnešní rozhraní (HTML skládané na serveru ze šablon, jeden velký styl a vložené skripty) se zahodí. Zůstává, co je ověřené testy a nese pravidla Dashboardu: napojení na GitHub, zrcadlo členství, přihlášení, data, API účtu, přístup k modulům, diagnostika, infrastruktura a vydávací linka. (2) **Stejný stack jako Launchpad Platformy.** Bun v přesné verzi, přísný TypeScript, Biome a `bun test`; stránka bez frameworku vykreslovaná TypeScriptem v prohlížeči, české a anglické texty s typovanými klíči a tokeny design systému převzaté beze změny. Server je tabulka cest a JSON API nad doménou; o přístupu, navigaci a viditelnosti dál rozhoduje jen server. (3) **Dashboard hostuje shell.** Rail a hlavička sloupce v Dashboardu jsou tytéž prvky jako v Apps, Chatu a Automate. Stránka Dashboardu nepatří žádnému Environmentu; v Dashboardu Organizace hlavička sloupce jmenuje Organizaci a ozubené kolo vede do Nastavení Organizace; na osobním Dashboardu je aktivní logo. Účet dává shellu Dashboard sám, bez brány Environmentu. Platforma vydává shell jako ověřitelný artefakt každého vydání a Dashboard používá jedno připnuté vydání. (4) **Pořadí Organizací určuje člověk.** Na stránce Organizace v Dashboardu si seřadí své Organizace; pořadí patří k jeho účtu a podle něj řadí avatary Organizací rail ve všech aplikacích (0185) i úvodní přesměrování. (5) **Wireframe a design systém.** Kde se rozcházejí, platí design systém (vybraný stav je tichá plocha, obecným vstupem do Nastavení Organizace je jen ozubené kolo v hlavičce sloupce, bez další položky sloupce, bez nadpisků a verzálek); přímé odkazy na konkrétní místo, jako „Přístup k modulu“ z Apps (0185), zůstávají. Sekce, kterou role nevidí, se nezobrazuje. Dashboard ukazuje jen změřené hodnoty: dostupnost, vytížení ani historii neukazuje jako fakt, dokud je nic neměří. (6) **Přechod.** Nové rozhraní se nejdřív ověří na preview; produkce se přepne, až ho Matěj přijme v prohlížeči (0178), a staré rozhraní se pak smaže. Body 1, 2, 4 a 6 rozhodl Matěj; body 3 a 5 z nich plynou podle 0179, 0185 a 0187 a jejich provedení navrhl Task Agent. **Provedení:** HumanAndMachine-ai/Dashboard (`docs/dashboard-v2.md`) a Lazurio/LazurioPlatform (dodatek F36: stránka, která nepatří žádnému Environmentu, účet od hostitele, artefakt shellu). | -| 0191 | **Prohlížeč a plocha Environmentu: jedno Chromium na Environment se sdílenými přihlášeními, okno pro každé vlákno a pohled se sledováním a převzetím v pravém panelu aplikací, ne čtvrtý mód.** Matěj (Organization Admin) 2026-10-05. Navazuje na 0162, 0172, 0175, 0146, 0178 a 0179. (1) **Jeden prohlížeč na Environment.** Na každém Remote Environmentu běží jeden prohlížeč Environmentu: Chromium s jedním trvalým profilem. Přihlášení v něm jsou schopnost Environmentu stejně jako `gh` nebo Composio (0162): sdílí je všechna vlákna a chaty, Task Agenti v Codexu, T3 Code i Claude Code, boti i Buddy. Uvnitř Environmentu se přihlášení neoddělují: žádný kontejner, profil pro vlákno ani sandbox. Kdo potřebuje jiná přihlášení, dostane jiný Environment (0172 bod 2). Přihlášení patří Environmentu, na kterém prohlížeč běží: vestavěný prohlížeč Codexu nebo desktopového T3 Code na notebooku drží přihlášení toho počítače, ne Remote Environmentu. (2) **Jedna obrazovka.** Environment má jednu virtuální obrazovku; běží na ní prohlížeč Environmentu i aplikace, které si na Environment člověk nainstaluje. Plocha Environmentu je pohled na celou obrazovku, pohled vlákna je pohled na jedno okno prohlížeče. (3) **Okno pro každé vlákno.** Každé vlákno pracuje ve vlastním okně téhož prohlížeče, takže se vlákna navzájem nepřepínají a člověk vidí práci jednoho vlákna. Okno zavírá agent; po nečinnosti se uklidí. Začíná se nejjednodušší variantou a ladí se podle provozu. (4) **Ovládání přes CLI.** Agenti ovládají prohlížeč Environmentu přes CLI `agent-browser` popsané v návodech Lazurio Folderu (0162: CLI-first), ne přes MCP server ani vlastní nástroj Lazuria. Lazurio staví na hotových, zdokumentovaných open source nástrojích a vlastní mašinérii přidává, jen když nástroj danou věc neumí. (5) **Sledování a převzetí.** Agent pošle do chatu odkaz na pohled svého okna na `browser...lazurio.io` (osobní Environment `browser..lazurio.io`), za bránou Environmentu a jen z tailnetu (0146). Člověk ho otevře v pravém panelu Codex Desktopu připojeného přes SSH, v pravém panelu webového T3 Code nebo Launchpadu, v tabu nebo na telefonu, sleduje, jak agent kliká, a při přihlášení, 2FA nebo CAPTCHA převezme ovládání. Kdo projde bránou Environmentu, vidí všechna jeho okna a smí je převzít. (6) **Trezor.** Prohlížeč Environmentu má rozšíření Bitwarden napojené na kolekci Environmentu v trezoru Organizace. (7) **Týmový Environment.** Osobní přihlášení do webů se tam neblokují: lidé vědí, že je Environment sdílený, a přihlásit se je jejich vědomá volba. Platforma říká, že přihlášení vidí celý Team a že sem patří týmové a firemní účty nebo účty, které je v pořádku s Teamem sdílet. Pravidlo 0168 pro `gh` platí dál. (8) **Plocha a Computer Use (druhá vlna).** Plocha Environmentu je dostupná na `desktop...lazurio.io` jako webová vzdálená plocha přes WebSocket; člověk na ní instaluje a používá aplikace. Agenti na ní pracují přes Computer Use jeden po druhém, protože myš a klávesnice jsou na ploše jedny; prohlížeč běží paralelně dál. Webové T3 Code má v pravém panelu položku Browser (pohled vlákna) a ve druhé vlně Desktop; desktopová aplikace T3 Code má vlastní prohlížeč a tímto rozhodnutím se nemění. (8a) **Pravý panel, ne čtvrtý mód.** Prohlížeč a plocha nejsou další položkou přepínače Apps · Chat · Automate (0179, 0185). Jsou to pohledy na Environment v pravém panelu aplikací, jak ho mají Codex Desktop, T3 Code i Lazurio MausBot: webové T3 Code ho má v panelu Browser, Launchpad dostane vlastní pravý panel, ve kterém si člověk ručně otevře prohlížeč Environmentu (všechna okna) nebo plochu. Každá aplikace do svého panelu vkládá tytéž adresy `browser.` a `desktop.`; vlastní prohlížeč ani plochu si žádná aplikace nestaví. (8b) **Jedna cookie brány na Environment.** Sezení brány Environmentu zůstává jedno pro všechny adresy jedné Mašiny (cookie s doménou `...lazurio.io`, 0146), aby pohledy vložené v pravém panelu jiné aplikace téhož Environmentu fungovaly bez dalšího přihlášení; přihlašovací stránka Lazurio Auth se v rámečku zobrazit nedá. Je to vědomá výjimka z pravidla prefixu `__Host-` pro cookies relying party (0179 bod 7) pro bránu Environmentu; zbytkové riziko, že sourozenecká adresa podstrčí cookie stejného jména, je omezené, protože ji cizí brána nerozšifruje. (9) **Vlastnictví a pořadí.** Machines dodají systémové balíčky (obrazovka, Chromium, později desktopové prostředí a vzdálená plocha) a pevné adresy `browser.` a `desktop.` v bráně; LazurioPlatform vlastní službu prohlížeče, pohled, nastavení `agent-browser` a návody Folderu (0144, 0161). Pořadí: první prohlížeč, druhá plocha s Computer Use, třetí Lazurio MausBot, který přejde na prohlížeč Environmentu místo vlastních profilů. Cílem je Linux Remote Environment (Ubuntu); základní Environment má 8 GiB RAM, náročnější práce dostane větší Environment. (10) **Předání jinému člověku.** Pracovní Environment jednoho operátora se jinému člověku nepřeřadí, dokud není profil prohlížeče Environmentu vymazaný, aby přihlášení předchozího operátora nepřešla na nástupce (0175). Dokud pro to není nástroj, vymaže profil při předání ručně ten, kdo Environment přeřazuje, podle návodu LazurioPlatform; bez vymazaného profilu se přeřazení nedělá. Ukončit relace u poskytovatelů, které nechce nechat běžet, může předchozí operátor sám. Týmového Environmentu, který je sdílený záměrně, ani osobního Environmentu s jedním Ownerem se to netýká. **Odloženo:** odhlášení z jednotlivých webů, přehled přihlášení a automatické vymazání profilu. **Co se nemění:** Publikace dál patří Operátorovi (0103); možnost agenta klikat v přihlášené aplikaci není souhlas se zápisem do ní a zápisy do napojených externích aplikací drží své brány podle `manual/external-app-integrations.md`. Personalspace a cross-org izolace platí dál (0091). **Stav:** jde o cíl; nic z toho zatím není nasazené. Volba konkrétního Chromium buildu, vzdálené plochy (kandidát Selkies, záloha KasmVNC) a nástroje pro Computer Use je technická a patří do issues owning repozitářů. **Dodatek z 2026-10-06 (pohled pro lidi, schránka a passkey; Matěj po pilotu):** (11) **Jedna záložka člověka = jedna vzdálená záložka.** Pohled pro lidi už není „prohlížeč v prohlížeči“; dashboard `agent-browser` se sezeními a záložkami uvnitř zůstává jen pilotní. Adresa `browser...lazurio.io` otevře novou vzdálenou záložku a `…/t/` je okno přesně do jedné záložky prohlížeče Environmentu. Záložky dělá aplikace, ve které člověk pracuje: T3 Code, ChatGPT a Codex Desktop, webový prohlížeč nebo telefon. Pohled má jen tenkou lištu (zpět, vpřed, obnovit, adresa) a titulek s ikonou přebírá ze stránky. Nová záložka člověka je nová vzdálená záložka. Zavřená záložka člověka zavře po krátké lhůtě i vzdálenou, pokud ji nepoužívá agent. Každá vzdálená záložka je vlastní okno prohlížeče Environmentu, protože se kreslí jen viditelná okna. (12) **Pop-upy a nové záložky.** Okno, které stránka otevře jako pop-up (přihlášení přes Google, okno rozšíření jako Bitwarden), se ukáže ve stejné záložce člověka nad stránkou a po zavření zmizí. Záložku, kterou stránka otevře jako novou, otevře T3 Code jako novou záložku panelu; jinde ji pohled nabídne jedním klikem. (13) **Spolupráce místo převzetí.** Agent a člověk klikají a píšou ve stejné záložce současně; ovládání se nepředává. (14) **Jediné přihlášení je brána.** Pohled nemá vlastní token; jedinou admission je sezení brány Environmentu (bod 8b). (15) **Schránka a klávesnice.** Vložení (Cmd nebo Ctrl+V) vloží text ze schránky člověka, kopírování vrátí text do jeho schránky a klávesy chodí se správnými kódy. (16) **Nic mimo stránku nesmí pohled zablokovat.** Dialogy stránek, výběr souboru a HTTP přihlášení ukáže pohled jako součást stránky. Žádosti o oprávnění (poloha, kamera, notifikace) prohlížeč rovnou odmítá. Na ostatní okna mimo stránku je plocha Environmentu (bod 8). (17) **Passkey přes Bitwarden Environmentu.** Cílem je, aby Bitwarden Environmentu (bod 6) držel jeho passkey i hesla v kolekci Environmentu a při přihlášení se nabídl. Passkey jsou tak preferovaná cesta přihlašování agentů i lidí. Passkey z telefonu přes QR kód a Bluetooth na Remote Environmentu fungovat nemůže. Do nasazení Bitwardenu prohlížeč Environmentu žádosti o passkey hned odmítá bez nativního okna, aby weby nabídly jinou cestu. (18) **Co dodatek mění v dřívějších bodech.** Bod 5: agent posílá do chatu odkaz na svou záložku `browser...lazurio.io/t/` (osobní Environment `browser..lazurio.io/t/`), ne holou adresu, protože holá adresa vždy založí novou vzdálenou záložku. Kdo projde bránou Environmentu, smí otevřít kteroukoli jeho záložku podle její adresy a pracovat v ní spolu s agentem; „převezme ovládání“ a „smí je převzít“ v bodě 5 i převzetí v názvu rozhodnutí nahrazuje spolupráce (bod 13). Bod 3: vlákno má tolik oken, kolik má záložek, protože každá vzdálená záložka je vlastní okno (bod 11); vlákna se dál navzájem nepřepínají. Bod 8a: pohled „prohlížeč Environmentu (všechna okna)“ se ruší, protože pohled pro lidi ukazuje vždy jen jednu záložku; přehled všech oken Environmentu dává jen plocha (`desktop.`, bod 8). Pravý panel Launchpadu otevírá prohlížeč stejně jako ostatní aplikace: holá adresa `browser.` v něm založí novou vzdálenou záložku a odkaz agenta `…/t/` otevře jeho záložku. Ostatní body 1–10 platí beze změny. **Stav dodatku:** pilotní dashboard zůstává jen na pilotním Environmentu; ostatní Environmenty dostanou prohlížeč až s tímto pohledem. Pohled je tenká služba LazurioPlatform nad Chrome DevTools protokolem (obraz a vstup jedné záložky); `agent-browser` zůstává nástrojem agentů. **Dodatek z 2026-10-09 (prohlížeč jiného Environmentu, osobní věci a označení pohledu; Matěj):** (19) **Věc patří do svého Environmentu.** Agent pracuje v prohlížeči Environmentu, kam věc patří. Osobní věci operátora (osobní e-mail, datová schránka, banka, osobní domény) a jejich přihlášení patří jen do osobního Environmentu, věci Organizace do jejího. Pracuje-li agent přes SSH v jiném Environmentu, platí tam hranice a `AGENTS.md` toho Environmentu. V prohlížeči Environmentu Organizace agent osobní věci neřeší a o přihlášení osobních účtů nežádá, protože přihlášení v něm patří Environmentu a jdou s ním dál, i při plném sdílení podle 0192; požádá-li o to člověk, agent mu to řekne a navrhne osobní Environment. Technicky se přihlášení neblokují a vědomá volba člověka na týmovém Environmentu (bod 7) platí dál. (20) **Prohlížeč jiného Environmentu v pravém panelu.** T3 Code a Launchpad smí v pravém panelu ukázat záložku prohlížeče jiného Environmentu. Poznají ji podle adresy `browser.<…>.lazurio.io/t/` a vloží její pohled přímo, s barevným rámečkem a označením toho Environmentu. Technicky to jde u všech Environmentů, kam má člověk přístup. Kdo záložku uvidí, dál rozhoduje brána toho Environmentu a přihlášení člověka (bod 8b); když sezení chybí, panel nabídne přihlášení v novém tabu prohlížeče, ve kterém člověk aplikaci otevřel. Kromě vlastního Environmentu proto pohled smí vložit jen T3 Code nebo Launchpad jiného Environmentu, který o něj žádá; aplikace Organizací ho vložit nesmí. (21) **Agent otevírá prohlížeč jen tam, kde ho ovládá.** Prakticky agent otevře a ovládá prohlížeč Environmentu, na kterém běží jeho příkazy. Z osobního Environmentu tak přes SSH otevírá prohlížeče pracovních Environmentů svého operátora a jejich záložky mu ukazuje v pravém panelu. Pohled jiného Environmentu nikdy nenačítá v prohlížeči svého Environmentu (pohled v pohledu), protože by tím prohlížeč jednoho Environmentu získal sezení brány druhého. Tuto hranici drží pravidlo pro agenty v návodech Folderu, ne technický zákaz: Matěj 2026-10-09 rozhodl prohlížeč Environmentu technicky neomezovat. Zbytkové riziko vědomě přijal: kdo v prohlížeči Environmentu otevře adresu jiného Environmentu nebo v něm spustí T3 Code či Launchpad se záložkou jiného Environmentu a přihlásí se, uloží sezení cizí brány do profilu toho prohlížeče. Kdo takové přihlášení najde, odhlásí ho. (22) **Každý pohled říká, čí je.** Pohled má vlevo nahoře vždy viditelnou ikonu Organizace nebo člověka a označení „ · “, u osobního Environmentu „Osobní · “. Označení se odvozuje z adresy pohledu a začíná jím i titulek tabu, takže je vidět i v holém tabu prohlížeče, v ChatGPT Desktopu nebo na telefonu. (23) **Co dodatek mění v dřívějších bodech.** Bod 8a: aplikace vkládá do panelu adresy `browser.` svého Environmentu a podle bodu 20 i jiných Environmentů. Bod 8b platí dál: sezení brány má každý Environment vlastní. Bod 7 platí dál pro vědomou volbu člověka; agent ji podle bodu 19 sám nevyvolává. Ostatní body platí beze změny. **Stav dodatku:** bod 19 a nová záložka pro novou stránku jsou v návodech Folderu (LazurioPlatform #289 a #290). Označení pohledu, jeho vkládání a záložky jiného Environmentu v panelu T3 Code se připravují v plánu DEV-6646. | +| 0191 | **Prohlížeč a plocha Environmentu: jedno Chromium na Environment se sdílenými přihlášeními, okno pro každé vlákno a pohled se sledováním a převzetím v pravém panelu aplikací, ne čtvrtý mód.** Matěj (Organization Admin) 2026-10-05. Navazuje na 0162, 0172, 0175, 0146, 0178 a 0179. (1) **Jeden prohlížeč na Environment.** Na každém Remote Environmentu běží jeden prohlížeč Environmentu: Chromium s jedním trvalým profilem. Přihlášení v něm jsou schopnost Environmentu stejně jako `gh` nebo Composio (0162): sdílí je všechna vlákna a chaty, Task Agenti v Codexu, T3 Code i Claude Code, boti i Buddy. Uvnitř Environmentu se přihlášení neoddělují: žádný kontejner, profil pro vlákno ani sandbox. Kdo potřebuje jiná přihlášení, dostane jiný Environment (0172 bod 2). Přihlášení patří Environmentu, na kterém prohlížeč běží: vestavěný prohlížeč Codexu nebo desktopového T3 Code na notebooku drží přihlášení toho počítače, ne Remote Environmentu. (2) **Jedna obrazovka.** Environment má jednu virtuální obrazovku; běží na ní prohlížeč Environmentu i aplikace, které si na Environment člověk nainstaluje. Plocha Environmentu je pohled na celou obrazovku, pohled vlákna je pohled na jedno okno prohlížeče. (3) **Okno pro každé vlákno.** Každé vlákno pracuje ve vlastním okně téhož prohlížeče, takže se vlákna navzájem nepřepínají a člověk vidí práci jednoho vlákna. Okno zavírá agent; po nečinnosti se uklidí. Začíná se nejjednodušší variantou a ladí se podle provozu. (4) **Ovládání přes CLI.** Agenti ovládají prohlížeč Environmentu přes CLI `agent-browser` popsané v návodech Lazurio Folderu (0162: CLI-first), ne přes MCP server ani vlastní nástroj Lazuria. Lazurio staví na hotových, zdokumentovaných open source nástrojích a vlastní mašinérii přidává, jen když nástroj danou věc neumí. (5) **Sledování a převzetí.** Agent pošle do chatu odkaz na pohled svého okna na `browser...lazurio.io` (osobní Environment `browser..lazurio.io`), za bránou Environmentu a jen z tailnetu (0146). Člověk ho otevře v pravém panelu Codex Desktopu připojeného přes SSH, v pravém panelu webového T3 Code nebo Launchpadu, v tabu nebo na telefonu, sleduje, jak agent kliká, a při přihlášení, 2FA nebo CAPTCHA převezme ovládání. Kdo projde bránou Environmentu, vidí všechna jeho okna a smí je převzít. (6) **Trezor.** Prohlížeč Environmentu má rozšíření Bitwarden napojené na kolekci Environmentu v trezoru Organizace. (7) **Týmový Environment.** Osobní přihlášení do webů se tam neblokují: lidé vědí, že je Environment sdílený, a přihlásit se je jejich vědomá volba. Platforma říká, že přihlášení vidí celý Team a že sem patří týmové a firemní účty nebo účty, které je v pořádku s Teamem sdílet. Pravidlo 0168 pro `gh` platí dál. (8) **Plocha a Computer Use (druhá vlna).** Plocha Environmentu je dostupná na `desktop...lazurio.io` jako webová vzdálená plocha přes WebSocket; člověk na ní instaluje a používá aplikace. Agenti na ní pracují přes Computer Use jeden po druhém, protože myš a klávesnice jsou na ploše jedny; prohlížeč běží paralelně dál. Webové T3 Code má v pravém panelu položku Browser (pohled vlákna) a ve druhé vlně Desktop; desktopová aplikace T3 Code má vlastní prohlížeč a tímto rozhodnutím se nemění. (8a) **Pravý panel, ne čtvrtý mód.** Prohlížeč a plocha nejsou další položkou přepínače Apps · Chat · Automate (0179, 0185). Jsou to pohledy na Environment v pravém panelu aplikací, jak ho mají Codex Desktop, T3 Code i Lazurio MausBot: webové T3 Code ho má v panelu Browser, Launchpad dostane vlastní pravý panel, ve kterém si člověk ručně otevře prohlížeč Environmentu (všechna okna) nebo plochu. Každá aplikace do svého panelu vkládá tytéž adresy `browser.` a `desktop.`; vlastní prohlížeč ani plochu si žádná aplikace nestaví. (8b) **Jedna cookie brány na Environment.** Sezení brány Environmentu zůstává jedno pro všechny adresy jedné Mašiny (cookie s doménou `...lazurio.io`, 0146), aby pohledy vložené v pravém panelu jiné aplikace téhož Environmentu fungovaly bez dalšího přihlášení; přihlašovací stránka Lazurio Auth se v rámečku zobrazit nedá. Je to vědomá výjimka z pravidla prefixu `__Host-` pro cookies relying party (0179 bod 7) pro bránu Environmentu; zbytkové riziko, že sourozenecká adresa podstrčí cookie stejného jména, je omezené, protože ji cizí brána nerozšifruje. (9) **Vlastnictví a pořadí.** Machines dodají systémové balíčky (obrazovka, Chromium, později desktopové prostředí a vzdálená plocha) a pevné adresy `browser.` a `desktop.` v bráně; LazurioPlatform vlastní službu prohlížeče, pohled, nastavení `agent-browser` a návody Folderu (0144, 0161). Pořadí: první prohlížeč, druhá plocha s Computer Use, třetí Lazurio MausBot, který přejde na prohlížeč Environmentu místo vlastních profilů. Cílem je Linux Remote Environment (Ubuntu); základní Environment má 8 GiB RAM, náročnější práce dostane větší Environment. (10) **Předání jinému člověku.** Pracovní Environment jednoho operátora se jinému člověku nepřeřadí, dokud není profil prohlížeče Environmentu vymazaný, aby přihlášení předchozího operátora nepřešla na nástupce (0175). Dokud pro to není nástroj, vymaže profil při předání ručně ten, kdo Environment přeřazuje, podle návodu LazurioPlatform; bez vymazaného profilu se přeřazení nedělá. Ukončit relace u poskytovatelů, které nechce nechat běžet, může předchozí operátor sám. Týmového Environmentu, který je sdílený záměrně, ani osobního Environmentu s jedním Ownerem se to netýká. **Odloženo:** odhlášení z jednotlivých webů, přehled přihlášení a automatické vymazání profilu. **Co se nemění:** Publikace dál patří Operátorovi (0103); možnost agenta klikat v přihlášené aplikaci není souhlas se zápisem do ní a zápisy do napojených externích aplikací drží své brány podle `manual/external-app-integrations.md`. Personalspace a cross-org izolace platí dál (0091). **Stav:** jde o cíl; nic z toho zatím není nasazené. Volba konkrétního Chromium buildu, vzdálené plochy (kandidát Selkies, záloha KasmVNC) a nástroje pro Computer Use je technická a patří do issues owning repozitářů. **Dodatek z 2026-10-06 (pohled pro lidi, schránka a passkey; Matěj po pilotu):** (11) **Jedna záložka člověka = jedna vzdálená záložka.** Pohled pro lidi už není „prohlížeč v prohlížeči“; dashboard `agent-browser` se sezeními a záložkami uvnitř zůstává jen pilotní. Adresa `browser...lazurio.io` otevře novou vzdálenou záložku a `…/t/` je okno přesně do jedné záložky prohlížeče Environmentu. Záložky dělá aplikace, ve které člověk pracuje: T3 Code, ChatGPT a Codex Desktop, webový prohlížeč nebo telefon. Pohled má jen tenkou lištu (zpět, vpřed, obnovit, adresa) a titulek s ikonou přebírá ze stránky. Nová záložka člověka je nová vzdálená záložka. Zavřená záložka člověka zavře po krátké lhůtě i vzdálenou, pokud ji nepoužívá agent. Každá vzdálená záložka je vlastní okno prohlížeče Environmentu, protože se kreslí jen viditelná okna. (12) **Pop-upy a nové záložky.** Okno, které stránka otevře jako pop-up (přihlášení přes Google, okno rozšíření jako Bitwarden), se ukáže ve stejné záložce člověka nad stránkou a po zavření zmizí. Záložku, kterou stránka otevře jako novou, otevře T3 Code jako novou záložku panelu; jinde ji pohled nabídne jedním klikem. (13) **Spolupráce místo převzetí.** Agent a člověk klikají a píšou ve stejné záložce současně; ovládání se nepředává. (14) **Jediné přihlášení je brána.** Pohled nemá vlastní token; jedinou admission je sezení brány Environmentu (bod 8b). (15) **Schránka a klávesnice.** Vložení (Cmd nebo Ctrl+V) vloží text ze schránky člověka, kopírování vrátí text do jeho schránky a klávesy chodí se správnými kódy. (16) **Nic mimo stránku nesmí pohled zablokovat.** Dialogy stránek, výběr souboru a HTTP přihlášení ukáže pohled jako součást stránky. Žádosti o oprávnění (poloha, kamera, notifikace) prohlížeč rovnou odmítá. Na ostatní okna mimo stránku je plocha Environmentu (bod 8). (17) **Passkey přes Bitwarden Environmentu.** Cílem je, aby Bitwarden Environmentu (bod 6) držel jeho passkey i hesla v kolekci Environmentu a při přihlášení se nabídl. Passkey jsou tak preferovaná cesta přihlašování agentů i lidí. Passkey z telefonu přes QR kód a Bluetooth na Remote Environmentu fungovat nemůže. Do nasazení Bitwardenu prohlížeč Environmentu žádosti o passkey hned odmítá bez nativního okna, aby weby nabídly jinou cestu. (18) **Co dodatek mění v dřívějších bodech.** Bod 5: agent posílá do chatu odkaz na svou záložku `browser...lazurio.io/t/` (osobní Environment `browser..lazurio.io/t/`), ne holou adresu, protože holá adresa vždy založí novou vzdálenou záložku. Kdo projde bránou Environmentu, smí otevřít kteroukoli jeho záložku podle její adresy a pracovat v ní spolu s agentem; „převezme ovládání“ a „smí je převzít“ v bodě 5 i převzetí v názvu rozhodnutí nahrazuje spolupráce (bod 13). Bod 3: vlákno má tolik oken, kolik má záložek, protože každá vzdálená záložka je vlastní okno (bod 11); vlákna se dál navzájem nepřepínají. Bod 8a: pohled „prohlížeč Environmentu (všechna okna)“ se ruší, protože pohled pro lidi ukazuje vždy jen jednu záložku; přehled všech oken Environmentu dává jen plocha (`desktop.`, bod 8). Pravý panel Launchpadu otevírá prohlížeč stejně jako ostatní aplikace: holá adresa `browser.` v něm založí novou vzdálenou záložku a odkaz agenta `…/t/` otevře jeho záložku. Ostatní body 1–10 platí beze změny. **Stav dodatku:** pilotní dashboard zůstává jen na pilotním Environmentu; ostatní Environmenty dostanou prohlížeč až s tímto pohledem. Pohled je tenká služba LazurioPlatform nad Chrome DevTools protokolem (obraz a vstup jedné záložky); `agent-browser` zůstává nástrojem agentů. **Dodatek z 2026-10-09 (prohlížeč jiného Environmentu, osobní věci a označení pohledu; Matěj):** (19) **Věc patří do svého Environmentu.** Agent pracuje v prohlížeči Environmentu, kam věc patří. Osobní věci operátora (osobní e-mail, datová schránka, banka, osobní domény) a jejich přihlášení patří jen do osobního Environmentu, věci Organizace do jejího. Pracuje-li agent přes SSH v jiném Environmentu, platí tam hranice a `AGENTS.md` toho Environmentu. V prohlížeči Environmentu Organizace agent osobní věci neřeší a o přihlášení osobních účtů nežádá, protože přihlášení v něm patří Environmentu a jdou s ním dál, i při plném sdílení podle 0192; požádá-li o to člověk, agent mu to řekne a navrhne osobní Environment. Technicky se přihlášení neblokují a vědomá volba člověka na týmovém Environmentu (bod 7) platí dál. (20) **Prohlížeč jiného Environmentu v pravém panelu.** T3 Code a Launchpad smí v pravém panelu ukázat záložku prohlížeče jiného Environmentu. Poznají ji podle adresy `browser.<…>.lazurio.io/t/` a vloží její pohled přímo, s barevným rámečkem a označením toho Environmentu. Technicky to jde u všech Environmentů, kam má člověk přístup. Kdo záložku uvidí, dál rozhoduje brána toho Environmentu a přihlášení člověka (bod 8b); když sezení chybí, panel nabídne přihlášení v novém tabu prohlížeče, ve kterém člověk aplikaci otevřel. Kromě vlastního Environmentu proto pohled smí vložit jen T3 Code nebo Launchpad jiného Environmentu, který o něj žádá; aplikace Organizací ho vložit nesmí. (21) **Agent otevírá prohlížeč jen tam, kde ho ovládá.** Prakticky agent otevře a ovládá prohlížeč Environmentu, na kterém běží jeho příkazy. Z osobního Environmentu tak přes SSH otevírá prohlížeče pracovních Environmentů svého operátora a jejich záložky mu ukazuje v pravém panelu. Pohled jiného Environmentu nikdy nenačítá v prohlížeči svého Environmentu (pohled v pohledu), protože by tím prohlížeč jednoho Environmentu získal sezení brány druhého. Tuto hranici drží pravidlo pro agenty v návodech Folderu, ne technický zákaz: Matěj 2026-10-09 rozhodl prohlížeč Environmentu technicky neomezovat. Zbytkové riziko vědomě přijal: kdo v prohlížeči Environmentu otevře adresu jiného Environmentu nebo v něm spustí T3 Code či Launchpad se záložkou jiného Environmentu a přihlásí se, uloží sezení cizí brány do profilu toho prohlížeče. Kdo takové přihlášení najde, odhlásí ho. (22) **Každý pohled říká, čí je.** Pohled má vlevo nahoře vždy viditelnou ikonu Organizace nebo člověka a označení „ · “, u osobního Environmentu „Osobní · “. Označení se odvozuje z adresy pohledu a začíná jím i titulek tabu, takže je vidět i v holém tabu prohlížeče, v ChatGPT Desktopu nebo na telefonu. (23) **Co dodatek mění v dřívějších bodech.** Bod 8a: aplikace vkládá do panelu adresy `browser.` svého Environmentu a podle bodu 20 i jiných Environmentů. Bod 8b platí dál: sezení brány má každý Environment vlastní. Bod 7 platí dál pro vědomou volbu člověka; agent ji podle bodu 19 sám nevyvolává. Ostatní body platí beze změny. **Stav dodatku:** bod 19 a nová záložka pro novou stránku jsou v návodech Folderu (LazurioPlatform #289 a #290). Označení pohledu, jeho vkládání a záložky jiného Environmentu v panelu T3 Code se připravují v plánu DEV-6646. **Dodatek z 2026-10-11 večer (architektura prohlížeče pro aplikace a forky; Matěj):** (24) **Jedna architektura pro aplikace a forky.** Prohlížeč Environmentu má jednu architekturu pro Launchpad, T3 Code, Lazurio MausBot a napojení Codex Desktopu; popisuje ji `manual/environment-browser.md`. Podle ní se aktualizují forky T3 Code, Lazurio MausBot a agent-browser a reaguje se na nové verze upstreamu nebo Codex Desktopu. Prohlížeč patří Environmentu a je jeden, přihlašují se v něm účty pro všechny agenty Environmentu, karty otevírá Environment a agenti v nich pracují přes fork `agent-browser` upravený pro Lazurio (v T3 Code i přes jeho náhledové nástroje nad stejným prohlížečem); spravuje se z Launchpadu. (25) **Kompatibilita s T3 Code má přednost.** Přinese-li upstream T3 Code vlastní prohlížeč do webového T3 (upstream main k 2026-10-11 spouští prohlížeč na serveru T3), fork ho vyřadí nebo napojí na prohlížeč Environmentu a ponechá pohled vzdálené karty, který pro Remote Environment funguje. Overlay ve forku je ohraničený, popsaný v runbooku forku a minimální, aby šel přenést na další stable bez práce od začátku. (26) **Karty vlákna a bota.** V T3 Code drží karty lišta vlákna. Archivace nebo smazání vlákna zavře všechny jeho karty včetně vlastního okna jeho agenta; kartu, kterou drží i jiné vlákno nebo Launchpad, jen pustí, protože bod 11 rozhodnutí 0195 platí dál. Tím se rozhoduje otázka, kterou F47 v LazurioPlatform nechával otevřenou. Totéž se vymyslí pro boty Lazurio MausBotu. (27) **Codex Desktop je vědomý kompromis.** Upravit ho nelze: jeho agenti pracují v prohlížeči Environmentu přes `agent-browser` a posílají odkaz na pohled, Nová karta je pro něj samostatná stránka Launchpadu, jejíž karty drží Launchpad, a okna agentů Codexu drží jen práce agenta a sledování. **Stav dodatku:** dokument platí; Launchpad a hub staví plán DEV-6656 (úkol 917), T3 Code plán DEV-6646 (úkol 501). | | 0192 | **Přístup přes Lazurio účet a Adminem schválené zařízení; sdílení uvnitř Organizace a směrové operace mezi Environmenty.** Matěj 2026-10-06 schválil model z [manual/environment-access-model.md](environment-access-model.md): uživatel může bez GitHubu do individuálního i týmového Environmentu, GitHub zůstává autoritou repozitářových schopností a Publikace; Tailscale → Headscale a schválení konkrétního zařízení Adminem jsou povinné. Přidělený uživatel smí sdílet celý pracovní Environment či jen aplikace s aktivními členy téže Organizace bez dalšího Admin schvalování, nikdy s externím člověkem; vlastní Environmenty propojuje v téže Organizaci, Admin napříč uživateli. Auth vlastní account/access pravdu, Dashboard ji spravuje, infra/Machines nasazují technické hranice; mapa je odvozená a ukazuje i nepřímé SSH schopnosti. Personalspace zůstává soukromý. Nahrazuje rozporné cílové části 0183/0184, upřesňuje 0155/0159/0172/0175/0185/0188; výslovné úzké servisní granty zůstávají. DEV-6640/6641 a navazující account/shell plány musí změnit kontrakt před realizací. Dokumentace není nasazení; dosavadní GitHub-only O10 testy nejsou důkazem nového schválení zařízení. | | 0193 | **Trezor Environmentu: každý Environment má vlastní účet ve Vaultwardenu své sítě, agenti ho používají přes `bw` a co je mu nasdílené, smějí použít bez ptaní.** Matěj (Organization Admin) 2026-10-08 a 2026-10-09 po návrhu architektury a schválení wireframu (HumanAndMachine-ai/prototypes-lazurio#24). Navazuje na 0162 (bod 7: jeden Environment, jedny přístupy), 0172, 0177, 0188 a 0191 (body 6 a 17). (1) **Účet Environmentu.** Každý Environment má vlastní účet `vaultwarden@` (pracovní `..lazurio.io`, osobní `.lazurio.io`) v trezoru, tedy ve Vaultwardenu Conglomerate Hostu sítě, která obsluhuje jeho Organizaci; osobní Environment v trezoru domovské sítě svého člověka. Je to jediná identita Environmentu v trezoru: používá ji `bw` agentů, Launchpad pro tajemství Modulů (0177) i rozšíření Bitwarden v prohlížeči Environmentu (0191). Účet člověka zůstává oddělený a osobní. (2) **Co Environment vidí.** Organizace v trezoru odpovídá Lazurio Organizaci a hesla patří jí. Environment v ní má vlastní kolekci `Environmenty/ · ` s právem úprav: agenti do ní ukládají hesla i passkey a operátoři je vidí ve svém trezoru. Další kolekce mu operátor nasdílí podle sebe, typicky jen ke čtení. Osobní Environment má kolekci v osobní organizaci svého člověka; tím je zodpovězeno, který trezor slouží Modulům v Personalspace (0177). Složky se nepoužívají. (3) **Použití bez ptaní.** Co je Environmentu nasdílené, smějí všichni jeho agenti a boti použít bez ptaní; rozlišení na položky „sám, s pokynem, nikdy“ se nezavádí. Navenek viditelný zápis do napojené služby je dál Publikace operátora a hodnoty nikdy nejdou do chatu, Gitu, logu ani PR. (4) **Připojení v Nastavení → Nástroje → bitwarden ve čtyřech krocích.** Operátor v trezoru pozve adresu účtu s právem úprav do kolekce Environmentu; Launchpad sám nainstaluje pinnutý `bw`, účet založí se silným heslem, které vznikne na Environmentu a nezná ho žádný člověk, a přihlásí ho API klíčem; operátor v trezoru potvrdí nového člena podle otisku, který mu ukáže Launchpad; pak je nástroj připojený a pro agenty se zapne sám (0188 bod 7). Pozvat a potvrdit smí jen Admin nebo Owner organizace v trezoru: trezor šifruje end-to-end a klíč organizace novému členovi předá jen klient Admina, takže Launchpad tyto dva kroky nezastoupí; kdo Adminem není, dostane zprávu pro Admina. Připojení bez e-mailu stojí na tom, že trezory sítí nemají SMTP. (5) **Odemčení pro agenty.** Launchpad drží jednu odemčenou relaci `bw` pro celý Environment; agent ji převezme příkazem `lazurio vault env` a nikdy nespouští `bw login`, `unlock`, `lock`, `logout` ani `bw config`, protože každé další odemčení relaci ostatním zruší. Návody Folderu agentům říkají, jak trezor odemknout, číst a kam ukládat. (6) **Hranice a přijaté důsledky.** Tajemství účtu leží jen na jeho Environmentu, ale agenti s plným přístupem (0172) ho přečíst mohou: vazbu na Mašinu nedrží šifrování ani TPM, drží ji obsah sdílených kolekcí a odvolání. Odebrání účtu z organizace v trezoru platí hned, co si Environment už stáhl, mu ale zůstane, proto se po odvolání důležitá hesla mění. Právo úprav znamená i mazání. Kolekce odděluje přístup na serveru, ne šifrováním; kdo chce Environment oddělit i kryptograficky, dá ho do samostatné organizace. Na týmovém Environmentu vidí kolekci celý Team (0191 bod 7). (7) **Správa nástrojů.** Každý připojený nástroj v Nástrojích otevře svou správu v novém okně (GitHub Organizace, Composio dashboard, Vaultwarden); řádek nástroje drží jen jeden ovládací prvek a ostatní volby jsou v nabídce „⋯“. (8) **Rozsah a pořadí.** Nejdřív Remote Environments, kde jeden Environment patří jedné Organizaci nebo osobnímu prostoru a jednomu trezoru, s pilotem na osobním Environmentu Ownera. Tento počítač (workstation s více Organizacemi a trezory) přijde ve druhé vlně s účtem v každém trezoru, ve kterém pracuje. Organizace s firemním trezorem mimo síť se řeší samostatně, protože tam účet Environmentu potřebuje doručitelný e-mail. Trezory sítí běží na Vaultwardenu alespoň 1.37.4. **Mění:** 0177 bod 2 (účet Environmentu svou kolekci čte i zapisuje) a jeho otevřenou otázku k Personalspace. **Stav:** jde o cíl; implementaci vlastní LazurioPlatform (nástroj bitwarden, `lazurio vault env`, návody Folderu) a Machines (Vaultwarden 1.37.4 a IP klienta), plán DEV-6631. **Dodatek 2026-10-11 (Matěj, pilot na osobním Environmentu):** název kolekce Environmentu je na operátorovi a `Environmenty/ · ` je jen navržený název. Environment svou kolekci pozná při prvním připojení: vidí-li účet v potvrzené organizaci jedinou kolekci, je to jeho kolekce, ať se jmenuje jakkoli; vidí-li jich víc, rozhodne navržený název. Potom rozhoduje jen její ID: přejmenování nic nemění, a zmizí-li, je přístup odebraný a žádná jiná kolekce ji nenahradí. Odpojení záznam zapomene, takže nové připojení je zase první: kolekce s vlastním názvem se pozná, jen když je jediná, kterou účet vidí, a mezi více kolekcemi potřebuje navržený název. Mění bod 2 (název kolekce byl její identitou). | | 0194 | **Nastavení Organizace je kód v jejím repozitáři: Dashboard ho mění právy Admina a doručuje Environmentům, které se k němu samy sbíhají a hlásí stav.** Matěj (Organization Admin) 2026-10-09 po návrhu architektury; plán DEV-6653. Navazuje na 0047, 0149, 0183, 0186, 0192 a 0193. (1) **Jedna pravda pro každý druh věci.** Nastavení Organizace (pravidla, výchozí nástroje, Integrace, firemní aplikace a další, co platí pro celou Organizaci) je ve schématem ověřené sekci manifestu Organizace (`lazurio.organization.json`) v jejím repozitáři na GitHubu. Lidé, členství a přístupy jsou v Auth (0192), tajemství jen v trezoru Organizace (0193), na která nastavení odkazuje jménem, a infrastruktura v infra repozitáři a Machines. (2) **Dashboard je okno, ne sklad.** Nastavení Organizace mění Dashboard jen jako přesnou změnu souboru: ukáže ji lidsky, Admin ji schválí, Dashboard ji zapíše na GitHub jeho vlastními právy, znovu přečte a zapíše do auditu (stejně jako 0186). Databáze Dashboardu nastavení Organizace nedrží. Agenti mění nastavení stejnou cestou: navrhnou změnu jako PR a Admin ji schválí v Dashboardu. Schválení Adminem je Publikace. (3) **Doručení.** Environment se přes svou bránu ptá Dashboardu, co pro něj platí, vlastní identitou u vydavatele Lazuria (0186 bod 3); Launchpad ani agent token nevidí. Dashboard v okamžiku dotazu přečte `main` repozitáře Organizace, ověří schéma, pošle jen to, co se daného Environmentu týká, s verzí (commit) a nic z toho neukládá jako pravdu. Environment se ptá každé dvě minuty, při otevření Launchpadu a na „Obnovit“; bez změny je odpověď prázdná. Místní instalace s naklonovaným repozitářem Organizace čte stejný dokument z Gitu. (4) **Sbíhání a hlášení.** Environment nastavení použije sám a opakovaně bezpečně (například vypne nástroj, zaregistruje firemní aplikaci do Executoru nebo upraví návody Folderu) a nahlásí, kterou verzi použil a jak dopadla každá položka. Hlášení jde stejným kanálem jako hlášení pro mapu (DEV-6640) a Dashboard z nich ukáže, kde už změna platí. Do Environmentu nikdo nic netlačí. (5) **Chyby a přednost.** Bez odpovědi Dashboardu jede Environment podle poslední použité verze. Neplatné nastavení Dashboard nedoručí a ukáže Adminovi; schéma kontroluje i CI repozitáře Organizace. Co Environment použít neumí, nahlásí a opravit to může agent. U pracovních Environmentů má nastavení Organizace přednost před nastavením Environmentu a Launchpad u takového přepínače řekne, že ho nastavuje Organizace; osobní Environmenty se řídí samy sebou. (6) **Rozšiřitelnost.** Každé další nastavení celé Organizace přidá pole do schématu, volitelně editor v Dashboardu, část Launchpadu, která ho použije, a hlášení stavu; nový kanál nevzniká. Zamítnuté varianty: nastavení v databázi Dashboardu nebo v Auth (druhá pravda vedle repozitáře), přímé čtení GitHubu z Environmentů (lidé bez GitHubu, týmové a osobní Environmenty), tlačení do Environmentů (nejsou dostupné z internetu) a Machines (patří infrastruktuře). **Dnes versus cíl:** nic z toho zatím neběží. Prvním krokem je přepínač „Povolit připojení přes Composio“ (0162, dodatek 2026-10-09), potom firemní aplikace Google Workspace a Microsoft 365. | diff --git a/manual/environment-browser.md b/manual/environment-browser.md new file mode 100644 index 00000000..0f2f2024 --- /dev/null +++ b/manual/environment-browser.md @@ -0,0 +1,253 @@ +# Prohlížeč Environmentu: architektura pro aplikace a forky + +Jedna architektura prohlížeče Environmentu pro všechny aplikace, které ho ukazují: +Launchpad, T3 Code, Lazurio MausBot a napojení Codex Desktopu. Podle tohoto dokumentu se +mění Platforma (LazurioPlatform), aktualizují se forky (`Lazurio/t3code`, +`Lazurio/OpenMausBot`, `Lazurio/agent-browser`) a reaguje se na nové verze upstreamu nebo +Codex Desktopu. Je to shrnutí platných rozhodnutí, ne nové rozhodnutí. Při rozporu platí +rozhodnutí: root **0191** (prohlížeč a plocha Environmentu), **0195** (paměť, pravý panel podle +aplikace, Nová karta, kdy karta zanikne) a návrhy LazurioPlatform **F38**, **F39** a **F47** +v jejím `docs/decisions.md`. Matěj tento dokument zadal 2026-10-11 jako vodítko pro +aktualizace forků (dodatek 0191 z 2026-10-11). + +## Principy + +1. **Prohlížeč patří Environmentu.** Na každém Remote Environmentu (Ubuntu) běží jeden prohlížeč: + Chromium s jedním trvalým profilem. Přihlášení v něm jsou schopnost Environmentu a sdílí je + všichni jeho agenti a uživatelé (0191 bod 1). Uvnitř Environmentu se nic neodděluje. Kdo + potřebuje jiná přihlášení, dostane jiný Environment. Vestavěný prohlížeč desktopové aplikace + na notebooku je prohlížeč toho notebooku, ne Environmentu. +2. **Karty otevírá Environment, agenti v nich pracují přes náš agent-browser.** Agent pracuje + v okně prohlížeče Environmentu přes CLI `agent-browser` z forku `Lazurio/agent-browser`, se + svým sezením a připojený k prohlížeči přes DevTools na portu 9222 (0191 bod 4). V T3 Code + totéž dělají jeho náhledové nástroje `preview_*` nad stejným prohlížečem. Žádná aplikace si + nestaví vlastní prohlížeč pro stránky Environmentu a žádný agent nespouští vlastní Chromium + s jinými přihlášeními. +3. **Člověk vidí kartu jen přes pohled Platformy.** Jedna karta člověka je jedna vzdálená karta: + `https://browser.<…>/t/` je pohled právě na ni, holá adresa `browser.<…>/` založí novou + (0191 bod 11, F39). Každá aplikace ukazuje kartu jako rámeček tohoto pohledu. Agent a člověk + v ní pracují současně. Plocha (`desktop.<…>`, druhá vlna) je pohled na celou obrazovku. +4. **Spravuje se z Launchpadu.** Launchpad ukazuje všechny karty Environmentu, jeho paměť a + spuštěné Moduly a umí kartu zavřít všem (0195 bod 5 a 9, F47). Stejnou Novou kartu otevře + „+“ v každé aplikaci (0195 bod 10). +5. **Karta žije, dokud ji něco drží.** Drží ji místo, které ji ukazuje (lišta vlákna v T3 Code, + Launchpad, ve kterém ji člověk otevřel, výhledově bot MausBotu), a agent, který v ní pracuje. + Když ji nic nedrží, nikdo se na ni nedívá a nepracuje v ní agent, po krátké lhůtě + s nabídkou Vrátit zanikne (0195 bod 11, F47 bod 5). O konci karty rozhoduje jediné místo: + hub pohledu. +6. **Hranice Environmentů.** Pohled jiného Environmentu se nikdy nenačítá v prohlížeči tohoto + Environmentu (pohled v pohledu). Aplikace ho smí vložit do svého panelu s barevným rámečkem a + označením toho Environmentu (0191 body 20–22). + +## Součásti a kdo co vlastní + +| Součást | Vlastník | Co dělá | +| --- | --- | --- | +| Obrazovka a Chromium (`lazurio-display`, `lazurio-browser`) | Machines (balíčky), LazurioPlatform (jednotky) | Jeden prohlížeč s rozpočtem paměti a bez obnovy starých karet po restartu (F38 a jeho dodatky) | +| Pohled a jeho hub (`lazurio-browser-view`) | LazurioPlatform | Pohled jedné karty za bránou; hub sleduje každou kartu, rozhoduje o jejím konci a drží vlastní prázdné okno, aby prohlížeč neskončil (F39, F47 bod 5) | +| Soubory držitelů `$XDG_RUNTIME_DIR/lazurio-browser/holders/.json` | Server aplikace, které lišta patří | Které karty lišta drží; zapisuje je jen ta aplikace, atomicky, s právy 0600 v adresáři 0700 (F47 bod 4) | +| Seznam živých karet `$XDG_RUNTIME_DIR/lazurio-browser/tabs.json` | Hub | Čerstvý snímek karet prohlížeče s časem na boot clock; podle něj si aplikace srovnávají svá držení (F47 bod 4) | +| Loopback API hubu (`/.lazurio/tabs…`) | Hub; volá ho jen Launchpad | Seznam karet, nová karta, zavřít všem, Vrátit; nikdy přes bránu ani z prohlížeče (F47 bod 6) | +| Přehled a akce Launchpadu (`/api/new-tab/…`) | LazurioPlatform | Paměť, karty, Moduly, otevřít, držet, zavřít, Vrátit (F47 body 7–8) | +| Nová karta: stránka `/new-tab` a prvek `` | LazurioPlatform (shell) | Jedna komponenta pro všechny aplikace; aplikace ji vloží jako prvek shellu (F47 body 1–3) | +| `agent-browser` | Fork `Lazurio/agent-browser` | Nástroj agentů: sezení, vazba sezení na kartu, připnutá karta (0191 bod 4) | +| Návody agentům | LazurioPlatform (Folder) | Jak otevřít okno (`lazurio browser window`), poslat odkaz a co dělat po `tab_gone` | + +**Jak karta vzniká.** Agent si otevře okno příkazem `lazurio browser window`: vznikne okno +prohlížeče a jeho sezení se na něj naváže (`.target`). Člověk otevře kartu z Nové +karty, Launchpad požádá hub o nové okno. Stránka otevře novou kartu nebo pop-up: pop-up se +ukáže nad stránkou ve stejném pohledu, novou kartu nabídne aplikace jako novou kartu lišty +(0191 bod 12). + +**Jak karta končí** (F47 body 5 a 6): +- **Kdy je karta držená.** Drží ji soubor držitele, který ji uvádí, nebo agent, který v ní + pracuje. Agent v ní pracuje, když je na ni navázané jeho sezení `agent-browser` + (`.target`) a démon toho sezení běží (`.pid`). +- **Konec po posledním držení.** Když poslední držení zmizí a nikdo se na kartu nedívá, karta + skončí po 8 s. To je okno Vrátit. +- **Karta, kterou nic nedrží,** skončí 30 s po odchodu posledního diváka. Kartu, kterou ještě + nikdo neviděl ani nedržel, ukončí hub po 10 minutách. +- **Držená karta** jen proto, že se na ni nikdo nedívá, nekončí. +- **Zavřít** v Přehledu nebo v liště Launchpadu zavře kartu všem po 8 s, i drženou. Pracuje-li + v ní agent, nejdřív varuje. +- **Selhané čtení.** Když hubu selže čtení držení, kartu nezavře. + +## Smlouva hostitelské aplikace + +Každá aplikace, která prohlížeč ukazuje (Launchpad, T3 Code, výhledově MausBot), dodrží +tohle a nic dalšího nepotřebuje: + +1. **Nová karta jako prvek shellu.** „+“ v pravém panelu vloží `` ze skriptu + `/.lazurio/shell.js` s atributy `strip` (lišta), `tools` (vlastní nástroje aplikace) a + případně `focus-address`, a reaguje na událost `lazurio-new-tab`: stránka, vybraná karta, + nebo nástroj. Sama nikam nenaviguje a protokol uvnitř prvku nepotřebuje znát. +2. **Karta je rámeček pohledu.** Aplikace ukazuje kartu jako rámeček `browser.<…>/t/` a + naslouchá zprávám pohledu: `lazurio-browser:info` (adresa a titulek), + `lazurio-browser:new-tab` (nová karta stránky) a `lazurio-browser:closed` (karta skončila). +3. **Drží, co ukazuje.** + - **Soubor držitele.** Server aplikace zapisuje pro každou lištu jeden soubor držitele + `.json` = `{"strip", "label", "tabs": […]}`. Zapisuje ho atomicky + (dočasný soubor a přejmenování), s právy 0600. Lišty jsou `launchpad` a `t3-`, což + je zároveň sezení agenta vlákna. + - **Čas záznamu.** Ke každé kartě si aplikace ve vlastním úložišti drží čas jejího záznamu. + Měří ho na boot clock (`boot_id` a `/proc/uptime`), nikdy systémovými hodinami. T3 Code ho + drží ve stavu vlákna, Launchpad jako `recordedAt` ve svém souboru držitele. + - **Srovnání se seznamem živých karet.** Aplikace se srovná při startu, při každé změně + seznamu (sleduje ho a čte znovu každých 30 s) a před zápisem souboru držitele. + - **Kdy kartu pustí.** Jen když ji postrádá seznam ze současného bootu pořízený po jejím + záznamu (pravidlo `keptTabs` v LazurioPlatform). Seznam z jiného bootu ignoruje. +4. **Pouští, co skončilo.** + - Zavření karty v liště ji odebere z této lišty, s nabídkou Vrátit. + - Archivace nebo smazání vlákna zavře všechny jeho karty, včetně vlastního okna jeho agenta + (Matěj 2026-10-11, F47 to nechával otevřené). + - Aplikace karty pustí a ukončí sezení agenta vlákna, aby okno nedržel jeho démon. + - Kartu, kterou drží i jiné vlákno nebo Launchpad, jen pustí, protože bod 11 rozhodnutí + 0195 platí dál. + - Zbytek dořeší hub. +5. **Jen rozhraní Platformy.** + - Aplikace používá prvky shellu, dokumenty `/.lazurio/…` svého Environmentu a soubory + držitelů. + - Loopback API hubu patří Launchpadu, jiná aplikace ho nevolá. + - Webová stránka aplikace nevolá DevTools prohlížeče. + - Pohled jiného Environmentu aplikace nikdy neotevírá v prohlížeči tohoto Environmentu (0191 + bod 21). Ve svém panelu ho smí vložit s označením toho Environmentu (bod 20). + +## Aplikace po jedné + +### Launchpad + +Lišta ukazuje všechny karty Environmentu. „+“ otevře Novou kartu bez nástrojů. Launchpad +drží karty, které v něm člověk otevřel: z Nové karty, nebo jako novou kartu stránky +zobrazené v něm (`holders/launchpad.json`). Ty žijí, dokud je někdo nezavře všem. Přehled +čte paměť Environmentu, karty a Moduly jen tehdy, když je Nová karta vidět. Paměť jedné karty +je odhad z JavaScript heapu označený „≈“; Matěj 2026-10-11 rozhodl, že odhad stačí, aby bylo +vidět, které karty jsou nejnáročnější. + +### T3 Code (hlavní cíl kompatibility) + +- **Lišta je vlákno.** Lišta pravého panelu ukazuje karty jednoho vlákna: jeho karty + prohlížeče a nástroje T3 Code (0195 bod 9). Drží je server T3 Code, takže lišta je stejná na + všech zařízeních, a zapisuje soubor držitele vlákna `t3-.json`. Sezení agenta + vlákna je `t3-`. +- **„+“ je Nová karta** s nástroji T3 (Terminal, Files, Diff, pull requesty, Agents, Device) + místo upstreamové nabídky. Adresní řádek se v T3 nezaměřuje, aby písmena otevírala nástroje. +- **Náhledové nástroje** (`preview_*`) řídí prohlížeč Environmentu: každá jejich karta je okno + prohlížeče Environmentu a pravý panel ukazuje kartu vlákna. +- **Karta vzatá z Přehledu** do vlákna zůstává jednou sdílenou kartou. Lišta ukáže, že ji drží i + jiné vlákno nebo Launchpad. +- **Desktopová aplikace** T3 Code má vlastní prohlížeč počítače, na kterém běží, a 0191 ho + nemění. +- **Upstream.** Až upstream T3 Code přinese vlastní integraci prohlížeče do webového T3, fork + ji vyřadí a ponechá pohled Environmentu. Vzdálená karta je pro Remote Environment + správné řešení (Matěj 2026-10-11). Stav upstreamu k 2026-10-11 popisuje kapitola + „Upstream T3 Code k 2026-10-11“ níže. + +### Lazurio MausBot + +Pro MausBot se vymyslí totéž co pro T3 Code (Matěj 2026-10-11): +- lišta bota drží karty, které bot ukazuje; +- karty bota se zavřou, když bot skončí; +- práce bota v prohlížeči jde přes `agent-browser` v prohlížeči Environmentu. + +Je to třetí vlna 0191 (bod 9) a F47 MausBot zatím nenavrhuje. Do té doby používá MausBot +vlastní profily podle své dosavadní podoby. Přechod na prohlížeč Environmentu se navrhne +v plánu MausBotu podle smlouvy výše. + +### Codex Desktop (vědomý kompromis) + +Codex Desktop upravit nemůžeme, proto: +- jeho agenti pracují v prohlížeči Environmentu přes `agent-browser` (přes SSH na Environment) + a posílají do chatu odkaz `browser.<…>/t/`, který člověk otevře v prohlížeči Codex + Desktopu; +- Nová karta je pro něj samostatná stránka `launchpad.<…>/new-tab`. Karty otevřené odtud drží + Launchpad, výběr existující karty ji jen otevře ve stejném okně; +- okno agenta Codexu drží jen práce agenta a to, že se na ně někdo dívá. Vlákna Codexu Lazurio + nevidí, takže je nedrží. Okno skončí, když agent přestal pracovat (démon skončí po hodině bez + příkazu) a nikdo se na ně nedívá ani ho nedrží Launchpad. + +### agent-browser (fork `Lazurio/agent-browser`) + +Na `agent-browser` stojí tato smlouva: +- připojení ke sdílenému prohlížeči přes `--cdp 9222`; +- sezení pro vlákno; +- vazba sezení na kartu (`.target`), která přežije restart démona; +- `.pid`, který démon při skončení smaže; +- připnutá karta; +- výchozí hodina nečinnosti démona. + +Dashboard `agent-browser` lidé nepoužívají, lidé mají pohled Platformy. Fork nese jen opravy a +distribuci; jeho vydání popisuje `docs/operations/lazurio-fork-release.md` ve forku. + +## Aktualizace forků a nové verze upstreamu + +1. **Nejdřív upstream.** Před stable refreshem forku projdi, co upstream změnil v prohlížeči, + pravém panelu, náhledových nástrojích a ve správě vláken nebo botů, a sepiš, kde se to + potkává s touto smlouvou. +2. **Smlouva má přednost.** Co upstream přinese do webové aplikace jako vlastní prohlížeč nebo + jinou integraci prohlížeče, fork vypne a jeho vstupy svede na pohled Environmentu a Novou + kartu. +3. **Overlay je ohraničený.** + - Kód Lazuria žije ve vlastních souborech overlaye (v T3 Code `apps/*/src/lazurio/`). + - Body napojení v upstreamových souborech musí být malé a pokryté testy smlouvy. + - Každá schopnost prohlížeče je řádek tabulky „Canonical overlay inventory“ v runbooku forku + (`docs/operations/lazurio-fork-release.md`), s důkazem a pravidlem pro odstranění. Patří + sem: + - soubory držitelů a jejich srovnání; + - Nová karta; + - zprávy pohledu; + - náhledové nástroje; + - odkazy jiných Environmentů; + - uvolnění po archivaci. + - Při každém stable refreshi se schopnost znovu zařadí (odstranit, ponechat, převést). Co + převzal upstream, se odstraní. +4. **Kontrola po aktualizaci.** Na Environmentu ověř, že: + - lišta drží své karty a archivace je pustí; + - Nová karta se otevře a otevře stránku i kartu z Přehledu; + - nová karta stránky se objeví v liště; + - `preview_*` řídí prohlížeč Environmentu; + - pohled jiného Environmentu se nenačte uvnitř tohoto prohlížeče. + + Ověření v prohlížeči podle 0178. +5. **Verze k sobě.** Vydání aplikace, které spoléhá na novou část Platformy, ji vyžaduje (například + T3 Code s držiteli vláken potřebuje Platformu se seznamem živých karet). Mění-li se chování + karet, vydá se Platforma i aplikace spolu. + +### Upstream T3 Code k 2026-10-11 + +Upstream `main` (`pingdotgg/t3code`, 754 commitů za stable v0.0.45, z níž fork vychází) mění +prohlížeč takto: +- **Prohlížeč na serveru.** „Run the browser on the environment server“ (#15328): každé + prostředí T3 má vlastní prohlížeč na serveru a webový klient, telefon i agenti ho používají + bez notebooku (`PreviewRuntime` `desktop | server`, `serverBrowser` zapnuté vždy). Bez zásahu + by „+ Browser“ i `preview_*` ve webovém T3 na Environmentu spustily druhé, headless Chromium + uvnitř serveru T3. To odporuje principu 1. Fork proto serverový prohlížeč upstreamu + napojí na prohlížeč Environmentu (DevTools na 9222), nebo ho vypne a vstupy svede na pohled + Environmentu. +- **Karty patří serveru, pořadí klientovi.** Server upstreamu drží, které karty existují + (`PreviewManager`, vlastník karty, `reveal`). Klient drží pořadí, aktivní kartu a stav panelu + (`rightPanelStore`, localStorage). Cílem forku je ukládat karty vlákna ve tvaru blízkém + `PreviewSessionSnapshot`, aby je mohl později nést `PreviewManager` upstreamu. Pak je uvidí + i desktopová a mobilní aplikace upstreamu. +- **„+“ nemá bod rozšíření.** Nabídka „+“ (`RightPanelTabs`, zkratka Mod+T) je napevno. + Nejmenší zásah je vložit Novou kartu do jejího vyskakovacího okna a předat jí akce upstreamu + jako nástroje T3. +- **Archivace a smazání.** Orchestrace je přepsaná (`orchestration-v2`). Obě verze ale + publikují proud doménových událostí. Uvolnění karet při archivaci a smazání vlákna proto + patří do reaktoru overlaye nad tímto proudem, s malým adaptérem pro obě verze. Upstream sám + karty při archivaci nechává a při smazání zavírá. +- **Funkce mají vlastní HTTP trasy** s autorizací rozsahem (`preview:operate`). Trasa overlaye + pro karty vláken se drží stejného vzoru místo změny RPC kontraktu. + +## Co je otevřené + +- Uspávání karet a jeho mechanismus (DEV-6656 spike 916). +- Nastavení doby nečinnosti a strategie zavřít, nebo uspat v Nastavení Launchpadu. Matěj to + 2026-10-11 navrhl, úkol v plánu zatím není. Do té doby karty vlákna, které stojí, ale není + archivované, drží jeho lišta. +- Jména lidí u karet: přijdou s účty Lazuria (0192). Přihlášení přes bránu identitu neříká. +- Plocha a Computer Use (druhá vlna 0191). +- Zda T3 Code postavit hned na stable v0.0.45 s vlastním úložištěm karet vláken, nebo nejdřív + obnovit fork na další stable upstreamu a napojit jeho serverový prohlížeč na prohlížeč + Environmentu (DEV-6646 úkol 501). +- Zda pořadí karet v liště vlákna sdílet mezi zařízeními (upstream ho drží v každém klientovi + zvlášť). From 7458d6b260eec0cbbe1ec023e4ad29074243d6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 21:13:33 +0200 Subject: [PATCH 2/7] Docs: the browser settings are DEV-6656 task 943 Co-Authored-By: Claude Opus 5.5 --- manual/environment-browser.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manual/environment-browser.md b/manual/environment-browser.md index 0f2f2024..3a4b7ab7 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -241,9 +241,9 @@ prohlížeč takto: ## Co je otevřené - Uspávání karet a jeho mechanismus (DEV-6656 spike 916). -- Nastavení doby nečinnosti a strategie zavřít, nebo uspat v Nastavení Launchpadu. Matěj to - 2026-10-11 navrhl, úkol v plánu zatím není. Do té doby karty vlákna, které stojí, ale není - archivované, drží jeho lišta. +- Nastavení doby nečinnosti okna agenta a strategie zavřít, nebo uspat v Nastavení Launchpadu + (Matěj 2026-10-11; DEV-6656 úkol 943, čeká na spike 916). Do té doby karty vlákna, které stojí, + ale není archivované, drží jeho lišta. - Jména lidí u karet: přijdou s účty Lazuria (0192). Přihlášení přes bránu identitu neříká. - Plocha a Computer Use (druhá vlna 0191). - Zda T3 Code postavit hned na stable v0.0.45 s vlastním úložištěm karet vláken, nebo nejdřív From 98f37d69e69e93f23c078a1aa7742a1fa9958c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 21:15:31 +0200 Subject: [PATCH 3/7] Docs: T3 Code builds on v0.0.45 until upstream ships a 0.0.46 stable Co-Authored-By: Claude Opus 5.5 --- manual/environment-browser.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/manual/environment-browser.md b/manual/environment-browser.md index 3a4b7ab7..f68447bd 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -216,6 +216,9 @@ distribuci; jeho vydání popisuje `docs/operations/lazurio-fork-release.md` ve Upstream `main` (`pingdotgg/t3code`, 754 commitů za stable v0.0.45, z níž fork vychází) mění prohlížeč takto: +- **Stable zatím není.** Z větve 0.0.46 vyšly jen verze preview a nightly. Refresh forku podle + jeho runbooku vychází jen ze stable tagu. Úkol 501 proto staví na v0.0.45 a overlay připraví + pro přenos podle bodů níže. - **Prohlížeč na serveru.** „Run the browser on the environment server“ (#15328): každé prostředí T3 má vlastní prohlížeč na serveru a webový klient, telefon i agenti ho používají bez notebooku (`PreviewRuntime` `desktop | server`, `serverBrowser` zapnuté vždy). Bez zásahu @@ -246,8 +249,7 @@ prohlížeč takto: ale není archivované, drží jeho lišta. - Jména lidí u karet: přijdou s účty Lazuria (0192). Přihlášení přes bránu identitu neříká. - Plocha a Computer Use (druhá vlna 0191). -- Zda T3 Code postavit hned na stable v0.0.45 s vlastním úložištěm karet vláken, nebo nejdřív - obnovit fork na další stable upstreamu a napojit jeho serverový prohlížeč na prohlížeč - Environmentu (DEV-6646 úkol 501). +- Jak při refreshi na stable 0.0.46 napojit serverový prohlížeč upstreamu na prohlížeč + Environmentu: buď ho fork vypne, nebo ho nasměruje na DevTools na 9222. - Zda pořadí karet v liště vlákna sdílet mezi zařízeními (upstream ho drží v každém klientovi zvlášť). From b87472801d0284d740dbdf8e224b5854b18d25de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 21:32:12 +0200 Subject: [PATCH 4/7] Docs: the browser contract's exact holder and live-tab shapes; a target, not deployed state Pablo's review of 78f136d: - The holder contract now separates the part the hub reads ({strip, label, tabs}) from the record times only the writing app reads. T3 Code keeps them in its thread state, the Launchpad as recordedAt (id -> {boot, at}) in its holder file. It also gives tabs.json's shape and keptTabs' order, as LazurioPlatform's holds.ts has them. - A status block opens the document: it is the target contract. It says what runs today, what waits for review (F47 steps 1-2, #316/#318) and what is still to come (steps 3-5). Co-Authored-By: Claude Opus 5.5 --- manual/environment-browser.md | 59 ++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/manual/environment-browser.md b/manual/environment-browser.md index f68447bd..6bbedd4f 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -10,6 +10,20 @@ aplikace, Nová karta, kdy karta zanikne) a návrhy LazurioPlatform **F38**, **F v jejím `docs/decisions.md`. Matěj tento dokument zadal 2026-10-11 jako vodítko pro aktualizace forků (dodatek 0191 z 2026-10-11). +**Stav k 2026-10-11: cílová smlouva, ne popis nasazeného stavu.** Přítomný čas níže popisuje cíl. +- **Už běží:** + - na části Remote Environmentů prohlížeč Environmentu a pohled jedné karty (F38, F39); + - ve webovém T3 Code karty prohlížeče v pravém panelu (0.0.45-lazurio.7, s prozatímním + „+ → Browser“). +- **Čeká na review:** hub, který podle souborů držitelů rozhoduje o konci karty (F47 krok 1, + LazurioPlatform #316), a Přehled a akce Launchpadu (krok 2, #318). Jsou to otevřené PR, + nasazené ještě nejsou. +- **Teprve přijde:** + - stránka a prvek Nové karty a panel Launchpadu (krok 3); + - karty vláken v T3 Code s jejich soubory držitelů (krok 4, DEV-6646 úkol 501); + - vydání a ověření na Environmentu (krok 5). +- **Jen cíl:** MausBot na prohlížeči Environmentu a Nová karta pro Codex Desktop. + ## Principy 1. **Prohlížeč patří Environmentu.** Na každém Remote Environmentu (Ubuntu) běží jeden prohlížeč: @@ -84,18 +98,39 @@ tohle a nic dalšího nepotřebuje: 2. **Karta je rámeček pohledu.** Aplikace ukazuje kartu jako rámeček `browser.<…>/t/` a naslouchá zprávám pohledu: `lazurio-browser:info` (adresa a titulek), `lazurio-browser:new-tab` (nová karta stránky) a `lazurio-browser:closed` (karta skončila). -3. **Drží, co ukazuje.** - - **Soubor držitele.** Server aplikace zapisuje pro každou lištu jeden soubor držitele - `.json` = `{"strip", "label", "tabs": […]}`. Zapisuje ho atomicky - (dočasný soubor a přejmenování), s právy 0600. Lišty jsou `launchpad` a `t3-`, což - je zároveň sezení agenta vlákna. - - **Čas záznamu.** Ke každé kartě si aplikace ve vlastním úložišti drží čas jejího záznamu. - Měří ho na boot clock (`boot_id` a `/proc/uptime`), nikdy systémovými hodinami. T3 Code ho - drží ve stavu vlákna, Launchpad jako `recordedAt` ve svém souboru držitele. - - **Srovnání se seznamem živých karet.** Aplikace se srovná při startu, při každé změně - seznamu (sleduje ho a čte znovu každých 30 s) a před zápisem souboru držitele. - - **Kdy kartu pustí.** Jen když ji postrádá seznam ze současného bootu pořízený po jejím - záznamu (pravidlo `keptTabs` v LazurioPlatform). Seznam z jiného bootu ignoruje. +3. **Drží, co ukazuje.** Tvary odpovídají `holds.ts` v LazurioPlatform (F47 bod 4, kroky 1–2). + - **Čas na boot clock** je `{"boot": "", "at": }`. Čte se z + `/proc/sys/kernel/random/boot_id` a z prvního čísla `/proc/uptime`, nikdy ze systémových + hodin. + - **Soubor držitele, který čte hub.** Server aplikace zapisuje pro každou lištu jeden soubor + `.json`. Hub z něj čte jen tuhle část: + + ```json + {"strip": "", "label": "", "tabs": [""]} + ``` + + - `strip` se musí shodovat s názvem souboru a počítají se jen id cílů DevTools. + - Soubor se zapisuje atomicky (dočasný soubor a přejmenování), s právy 0600 v adresáři 0700. + - Lišty jsou `launchpad` a `t3-`; `t3-` je zároveň sezení agenta vlákna. + - **Čas záznamu, který čte jen aplikace sama.** Ke každé kartě si aplikace drží čas, kdy ji + do lišty přidala. Čas přečte z boot clock v té chvíli a uloží ho spolu s kartou. + - T3 Code ho drží ve stavu vlákna. + - Launchpad ho ukládá do svého souboru držitele jako další pole + `"recordedAt": {"": {"boot": "…", "at": …}}`, které hub ignoruje. + - Karta bez času se počítá jako zaznamenaná dávno. + - **Seznam živých karet, který zapisuje hub.** `tabs.json` je + `{"tabs": [""], "takenAt": {"boot": "…", "at": …}}`, kde `takenAt` je chvíle, + kdy hub snímek začal. + - **Srovnání.** Aplikace se se seznamem srovná: + - při startu; + - při každé jeho změně (sleduje ho a čte znovu každých 30 s); + - před zápisem souboru držitele. + - **Kdy kartu pustí** (pravidlo `keptTabs`): + - seznam z jiného bootu ignoruje; + - kartu, kterou seznam obsahuje, drží dál; + - kartu, kterou seznam postrádá, pustí jen tehdy, když `takenAt` je pozdější než její čas + záznamu, protože snímek začatý po záznamu by živou kartu obsahoval; + - kartu zaznamenanou ve stejnou chvíli nebo později drží. 4. **Pouští, co skončilo.** - Zavření karty v liště ji odebere z této lišty, s nabídkou Vrátit. - Archivace nebo smazání vlákna zavře všechny jeho karty, včetně vlastního okna jeho agenta From b6b318e5dbe699bef472e0d75313cc03809563b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 21:36:49 +0200 Subject: [PATCH 5/7] Docs: the T3 fork runbook's Overlay table and rebuild chapter, by their current names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The fork's runbook on main names its overlay table "Overlay" and the refresh "Přestavba na nový upstream tag"; "Canonical overlay inventory" was the heading of an older revision. Seams also belong in the fork CI's allowed_upstream_changes allowlist. Co-Authored-By: Claude Opus 5.5 --- manual/environment-browser.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/manual/environment-browser.md b/manual/environment-browser.md index 6bbedd4f..6775c394 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -223,18 +223,20 @@ distribuci; jeho vydání popisuje `docs/operations/lazurio-fork-release.md` ve kartu. 3. **Overlay je ohraničený.** - Kód Lazuria žije ve vlastních souborech overlaye (v T3 Code `apps/*/src/lazurio/`). - - Body napojení v upstreamových souborech musí být malé a pokryté testy smlouvy. - - Každá schopnost prohlížeče je řádek tabulky „Canonical overlay inventory“ v runbooku forku - (`docs/operations/lazurio-fork-release.md`), s důkazem a pravidlem pro odstranění. Patří - sem: + - Body napojení v upstreamových souborech musí být malé, pokryté testy smlouvy a uvedené + v allowlistu `allowed_upstream_changes` fork CI (`lazurio-fork-ci.yml`). + - Každá schopnost prohlížeče má řádek v tabulce kapitoly „Overlay“ runbooku forku + (`docs/operations/lazurio-fork-release.md`): commit, proč ho Lazurio potřebuje, a kdy + zůstane nebo odpadne. Patří sem: - soubory držitelů a jejich srovnání; - Nová karta; - zprávy pohledu; - náhledové nástroje; - odkazy jiných Environmentů; - uvolnění po archivaci. - - Při každém stable refreshi se schopnost znovu zařadí (odstranit, ponechat, převést). Co - převzal upstream, se odstraní. + - Při každé přestavbě na nový upstream stable tag (kapitola „Přestavba na nový upstream + tag“ runbooku) se každý commit overlaye přenese podle záměru. Overlay se zmenší o všechno, co + už umí upstream. 4. **Kontrola po aktualizaci.** Na Environmentu ověř, že: - lišta drží své karty a archivace je pustí; - Nová karta se otevře a otevře stránku i kartu z Přehledu; From c268e35412c1a7f5ecadf3634255614fe539e1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Sun, 11 Oct 2026 22:29:15 +0200 Subject: [PATCH 6/7] Docs: an agent-browser daemon attached over DevTools does not idle out by itself agent-browser's default idle timeout skips a browser it did not launch (blocks_default_idle_shutdown in cli/src/native/browser.rs). Only an explicit setting ends such a daemon. So an hour without a command holds only once the Platform sets idleTimeout in agent-browser's user config. The document now says so in the status, in how a tab ends, for Codex Desktop and in the agent-browser contract. On a timeout the daemon only disconnects; the hub still decides when the tab ends. Co-Authored-By: Claude Opus 5.5 --- manual/environment-browser.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/manual/environment-browser.md b/manual/environment-browser.md index 6775c394..f06d364d 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -21,7 +21,9 @@ aktualizace forků (dodatek 0191 z 2026-10-11). - **Teprve přijde:** - stránka a prvek Nové karty a panel Launchpadu (krok 3); - karty vláken v T3 Code s jejich soubory držitelů (krok 4, DEV-6646 úkol 501); - - vydání a ověření na Environmentu (krok 5). + - vydání a ověření na Environmentu (krok 5); + - hodinový limit nečinnosti démonů agent-browseru, který nastaví Platforma. Dnes démon připojený + k prohlížeči sám nekončí. - **Jen cíl:** MausBot na prohlížeči Environmentu a Nová karta pro Codex Desktop. ## Principy @@ -76,7 +78,9 @@ ukáže nad stránkou ve stejném pohledu, novou kartu nabídne aplikace jako no **Jak karta končí** (F47 body 5 a 6): - **Kdy je karta držená.** Drží ji soubor držitele, který ji uvádí, nebo agent, který v ní pracuje. Agent v ní pracuje, když je na ni navázané jeho sezení `agent-browser` - (`.target`) a démon toho sezení běží (`.pid`). + (`.target`) a démon toho sezení běží (`.pid`). Démon skončí po hodině bez + příkazu podle limitu, který Platforma nastaví v uživatelském nastavení agent-browseru. + Výchozí limit agent-browseru se na prohlížeč připojený přes DevTools nevztahuje. - **Konec po posledním držení.** Když poslední držení zmizí a nikdo se na kartu nedívá, karta skončí po 8 s. To je okno Vrátit. - **Karta, kterou nic nedrží,** skončí 30 s po odchodu posledního diváka. Kartu, kterou ještě @@ -197,8 +201,11 @@ Codex Desktop upravit nemůžeme, proto: - Nová karta je pro něj samostatná stránka `launchpad.<…>/new-tab`. Karty otevřené odtud drží Launchpad, výběr existující karty ji jen otevře ve stejném okně; - okno agenta Codexu drží jen práce agenta a to, že se na ně někdo dívá. Vlákna Codexu Lazurio - nevidí, takže je nedrží. Okno skončí, když agent přestal pracovat (démon skončí po hodině bez - příkazu) a nikdo se na ně nedívá ani ho nedrží Launchpad. + nevidí, takže je nedrží. Okno skončí, když agent přestal pracovat a nikdo se na ně nedívá ani + ho nedrží Launchpad. + - Agent přestal pracovat, když jeho démon skončí, tedy po hodině bez příkazu podle limitu, který + nastaví Platforma. + - Bez toho limitu démon připojený k prohlížeči sám nekončí. ### agent-browser (fork `Lazurio/agent-browser`) @@ -208,7 +215,11 @@ Na `agent-browser` stojí tato smlouva: - vazba sezení na kartu (`.target`), která přežije restart démona; - `.pid`, který démon při skončení smaže; - připnutá karta; -- výchozí hodina nečinnosti démona. +- hodina nečinnosti démona, kterou Platforma nastaví v jeho uživatelském nastavení + (`"idleTimeout": "1h"` v `~/.agent-browser/config.json`). + - Výchozí limit agent-browseru prohlížeč připojený přes DevTools vynechává + (`blocks_default_idle_shutdown`). Bez tohoto nastavení by démon sám nikdy neskončil. + - Po vypršení se démon jen odpojí, kartu nezavře; o jejím konci dál rozhoduje hub. Dashboard `agent-browser` lidé nepoužívají, lidé mají pohled Platformy. Fork nese jen opravy a distribuci; jeho vydání popisuje `docs/operations/lazurio-fork-release.md` ve forku. From ca394e68d29810bd918b9832398c67606d44d7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Mon, 12 Oct 2026 02:25:14 +0200 Subject: [PATCH 7/7] =?UTF-8?q?Docs:=20each=20strip=20shows=20its=20own=20?= =?UTF-8?q?place's=20tabs;=20=C3=97=20closes=20the=20view,=20P=C5=99ehled?= =?UTF-8?q?=20closes=20for=20all=20(0195=20addendum)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matěj, 2026-10-12, after the T3 Code design for task 501: - The Launchpad's strip shows the tabs the Launchpad holds, no longer every tab of the Environment; Přehled in Nová karta shows every tab in each app. - × on any strip closes the person's view and lets go for that place, with Vrátit. The tab stays in the Environment and in Přehled while anything else needs it. Only Přehled's Zavřít closes for everyone. - T3 Code's thread strip: the panel opens by itself only when the agent opens a tab or a new window; closing the last tab closes the panel, as upstream does; new tabs keep one order on every device, positions stay each device's, and tabs can be dragged (upstream's #17730 ported to v0.0.45). 0195 gains points 13-16. The architecture document follows them, and it records that T3 Code keeps its record times in its holder file like the Launchpad (the approved task 501 design), so T3 Code's database stays upstream's. Co-Authored-By: Claude Opus 5.5 --- manual/decision-register.md | 2 +- manual/environment-browser.md | 46 +++++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/manual/decision-register.md b/manual/decision-register.md index 86186f89..7d0b5d32 100644 --- a/manual/decision-register.md +++ b/manual/decision-register.md @@ -128,7 +128,7 @@ frameworku se sem nepřenášejí). | 0192 | **Přístup přes Lazurio účet a Adminem schválené zařízení; sdílení uvnitř Organizace a směrové operace mezi Environmenty.** Matěj 2026-10-06 schválil model z [manual/environment-access-model.md](environment-access-model.md): uživatel může bez GitHubu do individuálního i týmového Environmentu, GitHub zůstává autoritou repozitářových schopností a Publikace; Tailscale → Headscale a schválení konkrétního zařízení Adminem jsou povinné. Přidělený uživatel smí sdílet celý pracovní Environment či jen aplikace s aktivními členy téže Organizace bez dalšího Admin schvalování, nikdy s externím člověkem; vlastní Environmenty propojuje v téže Organizaci, Admin napříč uživateli. Auth vlastní account/access pravdu, Dashboard ji spravuje, infra/Machines nasazují technické hranice; mapa je odvozená a ukazuje i nepřímé SSH schopnosti. Personalspace zůstává soukromý. Nahrazuje rozporné cílové části 0183/0184, upřesňuje 0155/0159/0172/0175/0185/0188; výslovné úzké servisní granty zůstávají. DEV-6640/6641 a navazující account/shell plány musí změnit kontrakt před realizací. Dokumentace není nasazení; dosavadní GitHub-only O10 testy nejsou důkazem nového schválení zařízení. | | 0193 | **Trezor Environmentu: každý Environment má vlastní účet ve Vaultwardenu své sítě, agenti ho používají přes `bw` a co je mu nasdílené, smějí použít bez ptaní.** Matěj (Organization Admin) 2026-10-08 a 2026-10-09 po návrhu architektury a schválení wireframu (HumanAndMachine-ai/prototypes-lazurio#24). Navazuje na 0162 (bod 7: jeden Environment, jedny přístupy), 0172, 0177, 0188 a 0191 (body 6 a 17). (1) **Účet Environmentu.** Každý Environment má vlastní účet `vaultwarden@` (pracovní `..lazurio.io`, osobní `.lazurio.io`) v trezoru, tedy ve Vaultwardenu Conglomerate Hostu sítě, která obsluhuje jeho Organizaci; osobní Environment v trezoru domovské sítě svého člověka. Je to jediná identita Environmentu v trezoru: používá ji `bw` agentů, Launchpad pro tajemství Modulů (0177) i rozšíření Bitwarden v prohlížeči Environmentu (0191). Účet člověka zůstává oddělený a osobní. (2) **Co Environment vidí.** Organizace v trezoru odpovídá Lazurio Organizaci a hesla patří jí. Environment v ní má vlastní kolekci `Environmenty/ · ` s právem úprav: agenti do ní ukládají hesla i passkey a operátoři je vidí ve svém trezoru. Další kolekce mu operátor nasdílí podle sebe, typicky jen ke čtení. Osobní Environment má kolekci v osobní organizaci svého člověka; tím je zodpovězeno, který trezor slouží Modulům v Personalspace (0177). Složky se nepoužívají. (3) **Použití bez ptaní.** Co je Environmentu nasdílené, smějí všichni jeho agenti a boti použít bez ptaní; rozlišení na položky „sám, s pokynem, nikdy“ se nezavádí. Navenek viditelný zápis do napojené služby je dál Publikace operátora a hodnoty nikdy nejdou do chatu, Gitu, logu ani PR. (4) **Připojení v Nastavení → Nástroje → bitwarden ve čtyřech krocích.** Operátor v trezoru pozve adresu účtu s právem úprav do kolekce Environmentu; Launchpad sám nainstaluje pinnutý `bw`, účet založí se silným heslem, které vznikne na Environmentu a nezná ho žádný člověk, a přihlásí ho API klíčem; operátor v trezoru potvrdí nového člena podle otisku, který mu ukáže Launchpad; pak je nástroj připojený a pro agenty se zapne sám (0188 bod 7). Pozvat a potvrdit smí jen Admin nebo Owner organizace v trezoru: trezor šifruje end-to-end a klíč organizace novému členovi předá jen klient Admina, takže Launchpad tyto dva kroky nezastoupí; kdo Adminem není, dostane zprávu pro Admina. Připojení bez e-mailu stojí na tom, že trezory sítí nemají SMTP. (5) **Odemčení pro agenty.** Launchpad drží jednu odemčenou relaci `bw` pro celý Environment; agent ji převezme příkazem `lazurio vault env` a nikdy nespouští `bw login`, `unlock`, `lock`, `logout` ani `bw config`, protože každé další odemčení relaci ostatním zruší. Návody Folderu agentům říkají, jak trezor odemknout, číst a kam ukládat. (6) **Hranice a přijaté důsledky.** Tajemství účtu leží jen na jeho Environmentu, ale agenti s plným přístupem (0172) ho přečíst mohou: vazbu na Mašinu nedrží šifrování ani TPM, drží ji obsah sdílených kolekcí a odvolání. Odebrání účtu z organizace v trezoru platí hned, co si Environment už stáhl, mu ale zůstane, proto se po odvolání důležitá hesla mění. Právo úprav znamená i mazání. Kolekce odděluje přístup na serveru, ne šifrováním; kdo chce Environment oddělit i kryptograficky, dá ho do samostatné organizace. Na týmovém Environmentu vidí kolekci celý Team (0191 bod 7). (7) **Správa nástrojů.** Každý připojený nástroj v Nástrojích otevře svou správu v novém okně (GitHub Organizace, Composio dashboard, Vaultwarden); řádek nástroje drží jen jeden ovládací prvek a ostatní volby jsou v nabídce „⋯“. (8) **Rozsah a pořadí.** Nejdřív Remote Environments, kde jeden Environment patří jedné Organizaci nebo osobnímu prostoru a jednomu trezoru, s pilotem na osobním Environmentu Ownera. Tento počítač (workstation s více Organizacemi a trezory) přijde ve druhé vlně s účtem v každém trezoru, ve kterém pracuje. Organizace s firemním trezorem mimo síť se řeší samostatně, protože tam účet Environmentu potřebuje doručitelný e-mail. Trezory sítí běží na Vaultwardenu alespoň 1.37.4. **Mění:** 0177 bod 2 (účet Environmentu svou kolekci čte i zapisuje) a jeho otevřenou otázku k Personalspace. **Stav:** jde o cíl; implementaci vlastní LazurioPlatform (nástroj bitwarden, `lazurio vault env`, návody Folderu) a Machines (Vaultwarden 1.37.4 a IP klienta), plán DEV-6631. **Dodatek 2026-10-11 (Matěj, pilot na osobním Environmentu):** název kolekce Environmentu je na operátorovi a `Environmenty/ · ` je jen navržený název. Environment svou kolekci pozná při prvním připojení: vidí-li účet v potvrzené organizaci jedinou kolekci, je to jeho kolekce, ať se jmenuje jakkoli; vidí-li jich víc, rozhodne navržený název. Potom rozhoduje jen její ID: přejmenování nic nemění, a zmizí-li, je přístup odebraný a žádná jiná kolekce ji nenahradí. Odpojení záznam zapomene, takže nové připojení je zase první: kolekce s vlastním názvem se pozná, jen když je jediná, kterou účet vidí, a mezi více kolekcemi potřebuje navržený název. Mění bod 2 (název kolekce byl její identitou). | | 0194 | **Nastavení Organizace je kód v jejím repozitáři: Dashboard ho mění právy Admina a doručuje Environmentům, které se k němu samy sbíhají a hlásí stav.** Matěj (Organization Admin) 2026-10-09 po návrhu architektury; plán DEV-6653. Navazuje na 0047, 0149, 0183, 0186, 0192 a 0193. (1) **Jedna pravda pro každý druh věci.** Nastavení Organizace (pravidla, výchozí nástroje, Integrace, firemní aplikace a další, co platí pro celou Organizaci) je ve schématem ověřené sekci manifestu Organizace (`lazurio.organization.json`) v jejím repozitáři na GitHubu. Lidé, členství a přístupy jsou v Auth (0192), tajemství jen v trezoru Organizace (0193), na která nastavení odkazuje jménem, a infrastruktura v infra repozitáři a Machines. (2) **Dashboard je okno, ne sklad.** Nastavení Organizace mění Dashboard jen jako přesnou změnu souboru: ukáže ji lidsky, Admin ji schválí, Dashboard ji zapíše na GitHub jeho vlastními právy, znovu přečte a zapíše do auditu (stejně jako 0186). Databáze Dashboardu nastavení Organizace nedrží. Agenti mění nastavení stejnou cestou: navrhnou změnu jako PR a Admin ji schválí v Dashboardu. Schválení Adminem je Publikace. (3) **Doručení.** Environment se přes svou bránu ptá Dashboardu, co pro něj platí, vlastní identitou u vydavatele Lazuria (0186 bod 3); Launchpad ani agent token nevidí. Dashboard v okamžiku dotazu přečte `main` repozitáře Organizace, ověří schéma, pošle jen to, co se daného Environmentu týká, s verzí (commit) a nic z toho neukládá jako pravdu. Environment se ptá každé dvě minuty, při otevření Launchpadu a na „Obnovit“; bez změny je odpověď prázdná. Místní instalace s naklonovaným repozitářem Organizace čte stejný dokument z Gitu. (4) **Sbíhání a hlášení.** Environment nastavení použije sám a opakovaně bezpečně (například vypne nástroj, zaregistruje firemní aplikaci do Executoru nebo upraví návody Folderu) a nahlásí, kterou verzi použil a jak dopadla každá položka. Hlášení jde stejným kanálem jako hlášení pro mapu (DEV-6640) a Dashboard z nich ukáže, kde už změna platí. Do Environmentu nikdo nic netlačí. (5) **Chyby a přednost.** Bez odpovědi Dashboardu jede Environment podle poslední použité verze. Neplatné nastavení Dashboard nedoručí a ukáže Adminovi; schéma kontroluje i CI repozitáře Organizace. Co Environment použít neumí, nahlásí a opravit to může agent. U pracovních Environmentů má nastavení Organizace přednost před nastavením Environmentu a Launchpad u takového přepínače řekne, že ho nastavuje Organizace; osobní Environmenty se řídí samy sebou. (6) **Rozšiřitelnost.** Každé další nastavení celé Organizace přidá pole do schématu, volitelně editor v Dashboardu, část Launchpadu, která ho použije, a hlášení stavu; nový kanál nevzniká. Zamítnuté varianty: nastavení v databázi Dashboardu nebo v Auth (druhá pravda vedle repozitáře), přímé čtení GitHubu z Environmentů (lidé bez GitHubu, týmové a osobní Environmenty), tlačení do Environmentů (nejsou dostupné z internetu) a Machines (patří infrastruktuře). **Dnes versus cíl:** nic z toho zatím neběží. Prvním krokem je přepínač „Povolit připojení přes Composio“ (0162, dodatek 2026-10-09), potom firemní aplikace Google Workspace a Microsoft 365. | -| 0195 | **Environment pod plnou pamětí zpomalí, ale nezasekne se: swap ve dvou vrstvách s chráněným jádrem, prohlížeč s rozpočtem a uspáváním karet, všechny karty Environmentu v pravém panelu, Modul z Launchpadu jako sestavená verze a vývojový server jen pro práci z worktree, polovina vláken hostitele na Environment.** Matěj (Organization Admin) 2026-10-10 po výpadku pracovního Environmentu (Lazurio/LazurioPlatform#297); plán DEV-6656. Navazuje na 0049, 0146, 0171, 0172, 0173 a 0191. (1) **Cíl.** Remote Environment se při plné paměti zpomalí, ale nezasekne a jeho ovládání zůstane použitelné. Odpovědí není dokupování RAM: Environment má fungovat dobře i s plnou pamětí. Pravidlo RAM hostitele v Machines (součet Environmentů a rezerva) se nemění. (2) **Swap ve dvou vrstvách.** Každý Remote Environment má komprimovanou mezipaměť (zswap) před swap souborem na disku: odkládaná stránka se pokud možno uloží komprimovaně v paměti a na disk jde, když se do fondu nevejde nebo ji jádro z fondu odsune (zapnutý shrinker odsouvá starší stránky). Zajišťuje to Machines (workload Remote Environmentu). Disk swap dnes vede přes ZFS hostitele, proto má zswap přednost a zápisy se měří. Původně zvolený zram cloudové jádro Ubuntu v Environmentech nemá (modul je jen v linux-modules-extra), zswap je v jádře zabudovaný (Machines#462, dodatek z 2026-10-11). Samostatný oddíl mimo ZFS se zváží jen u nového hostitele nebo při reinstalaci, protože ZFS pool zmenšit nelze. (3) **Chráněné jádro.** Launchpad, T3 Code, brána Environmentu a SSH mají chráněnou paměť. Při nedostatku přijdou na řadu nejdřív karty prohlížeče a potom Moduly. Swap bez ochrany jádra by zaseknutí jen oddálil. (4) **Prohlížeč s rozpočtem.** Prohlížeč Environmentu (0191) má vlastní limit paměti, takže těžké stránky stojí jen jeho karty. Po pádu nebo restartu sám neobnovuje staré karty. Kartu, na kterou se nikdo nedívá a ve které nepracuje agent, po dohodnuté době uspí: uvolní její paměť a otevření ji znovu načte. Mechanismus vybere experiment plánu, protože `chrome.tabs.discard` aktivní kartu nezahodí a podle 0191 bodu 11 je každá vzdálená karta aktivní ve svém okně. Kandidáti jsou zavření vzdálené karty se záznamem její adresy, ze kterého ji otevření znovu založí, přesun karty do okna na pozadí a její zahození, a Memory Saver Chromia, pokud na Linuxu prokazatelně funguje. Vyžadovalo by uspání změnu modelu oken z 0191 bodu 11, rozhodne o ní Admin výslovně. (5) **Všechny karty v pravém panelu (mění 0191 body 11 a 18).** Pravý panel prohlížeče v aplikacích ukazuje vždy všechny karty Environmentu, lidí i agentů. U každé je, kdo ji otevřel, kolik bere paměti a kdy byla naposledy použitá, a jde uspat nebo zavřít; kartu, ve které pracuje agent, panel zavře jen s varováním. Volba „jen moje karty“ není. Panel ukazuje i spuštěné Moduly s pamětí a tlačítkem Zastavit. Uvnitř Environmentu se nic neodděluje (0191 bod 1), takže všichni jeho uživatelé vidí totéž. Pohled dál ukazuje vždy jednu kartu (0191 bod 11); seznam všech karet je přehled v panelu, ne pohled na všechna okna, a plocha (0191 bod 8) zůstává pohledem na celou obrazovku. Věta 0191 bodu 18, že přehled všech oken dává jen plocha, tím platí jen pro okna jako obraz, ne pro seznam karet. Integraci předchází wireframe. (6) **Dva režimy Modulu (mění 0171 bod 3 a kap. 4 standardu).** Otevření Modulu z Launchpadu z `main` spouští sestavenou verzi: App deklaruje `start`, jeden proces, který servíruje výstup sestavení, a sestavení je součástí přípravy. Náhled z worktree, na kterém pracuje agent, spouští `dev` s hot reloadem. Launchpad po každé změně `main` sestaví novou verzi na pozadí a do té doby servíruje předchozí, takže uživatel na sestavení nečeká. Sestavení běží po jednom. Neúspěšné sestavení Launchpad ukáže jako nález a nabídne výslovné spuštění vývojové verze; tiše na ni nepřepíná. Data App čte za běhu, do sestavení se zapéká jen obsah, který se mění s `main`. Vývojový server z worktree skončí se zánikem worktree nebo po nečinnosti. App bez `start` běží do cutoveru v `dev` a kontrola Module Standardu na to upozorní. Převod Modulů dělá Agent podle návodu (0173). (7) **Procesor.** Remote Environment dostane polovinu logických vláken svého hostitele se stejnou váhou jako ostatní. Hostované Environmenty pracují ve špičkách a málokdy všechny najednou, proto se procesor sdílí, paměť ne. Změna počtu vCPU restartuje Environment. (8) **Co se nemění.** Pravidlo RAM a rezerva hostitele, izolace Environmentů, plný přístup uvnitř Environmentu (0172) a jeden prohlížeč na Environment (0191). **Dodatek z 2026-10-11 (pravý panel podle aplikace a Nová karta; Matěj):** (9) **Lišta karet podle aplikace (upřesňuje bod 5).** V Launchpadu ukazuje lišta pravého panelu vždy všechny karty Environmentu, lidí i agentů. V T3 Code ukazuje karty jednoho vlákna: jeho karty prohlížeče a nástroje T3 Code. MausBot výhledově ukáže karty svého bota. Všechny karty Environmentu má člověk v každé aplikaci v Přehledu Nové karty (bod 10), pro Přehled tedy bod 5 platí beze změny. (10) **Nová karta ve všech aplikacích.** „+“ v pravém panelu otevře v Launchpadu, v T3 Code a výhledově v MausBotu stejnou Novou kartu po vzoru postranního panelu Codexu. Nahoře je adresní řádek: adresa promění tuto kartu v kartu prohlížeče Environmentu a vzdálená karta vznikne až tehdy, takže prázdná Nová karta paměť nebere. Pod ním jsou nástroje dané aplikace (v T3 Code Terminal, Files, Diff, pull requesty, Agents a Device, které nahrazují rozbalovací nabídku „+“), Přehled (paměť Environmentu, všechny jeho karty s tím, kdo je otevřel, pamětí a posledním použitím, Uspat a Zavřít, a spuštěné Moduly se Zastavit; čte se jen, když je Nová karta vidět) a navrhované aplikace Environmentu a weby. Připnutý Přehled z wireframu nahrazuje Nová karta: první otevření panelu ji ukáže a po zavření poslední karty se ukáže také. Nová karta je jedna komponenta Platformy, kterou aplikace vkládají jako komponenty shellu: aplikace jí dá své nástroje a dozví se, čím se karta stala. (11) **Sdílená karta a kdy vzdálená karta zanikne (upřesňuje 0191 bod 11).** Karta, kterou člověk vezme z Přehledu do vlákna, zůstává jednou vzdálenou kartou (0191 bod 11): pracují v ní obě vlákna, případně vlákno a člověk. Zavření v liště vlákna ji odebere jen z této lišty. Vzdálená karta zanikne, až ji pustí poslední místo, které ji drží, a nepracuje v ní agent. Takovým místem je lišta vlákna v T3 Code, ve které karta je, nebo Launchpad, ve kterém ji člověk otevřel. Pak zanikne po krátké lhůtě s nabídkou Vrátit, jak 0191 bod 11 říká o zavřené záložce člověka. Dokud ji má jiné vlákno nebo v ní pracuje agent, zůstává. Zavřít v Přehledu a zavření v liště Launchpadu, která ukazuje všechny karty, ji zavře všem najednou, u karty s pracujícím agentem s varováním (bod 5). (12) **Co platí dál.** Stav „agent čeká“ se nezobrazuje, dokud nebude vycházet z nativních otázek agentů (Lazurio/LazurioPlatform#308). Pohled dál ukazuje jednu vzdálenou kartu (0191 bod 11) a plocha zůstává obrazem celé obrazovky. **Stav dodatku:** finální wireframe pro Launchpad, T3 Code a MausBot se připravuje v plánech DEV-6646 a DEV-6656. Do té doby T3 Code 0.0.45-lazurio.7 otevírá na „+ → Browser“ novou prázdnou kartu. | +| 0195 | **Environment pod plnou pamětí zpomalí, ale nezasekne se: swap ve dvou vrstvách s chráněným jádrem, prohlížeč s rozpočtem a uspáváním karet, všechny karty Environmentu v pravém panelu, Modul z Launchpadu jako sestavená verze a vývojový server jen pro práci z worktree, polovina vláken hostitele na Environment.** Matěj (Organization Admin) 2026-10-10 po výpadku pracovního Environmentu (Lazurio/LazurioPlatform#297); plán DEV-6656. Navazuje na 0049, 0146, 0171, 0172, 0173 a 0191. (1) **Cíl.** Remote Environment se při plné paměti zpomalí, ale nezasekne a jeho ovládání zůstane použitelné. Odpovědí není dokupování RAM: Environment má fungovat dobře i s plnou pamětí. Pravidlo RAM hostitele v Machines (součet Environmentů a rezerva) se nemění. (2) **Swap ve dvou vrstvách.** Každý Remote Environment má komprimovanou mezipaměť (zswap) před swap souborem na disku: odkládaná stránka se pokud možno uloží komprimovaně v paměti a na disk jde, když se do fondu nevejde nebo ji jádro z fondu odsune (zapnutý shrinker odsouvá starší stránky). Zajišťuje to Machines (workload Remote Environmentu). Disk swap dnes vede přes ZFS hostitele, proto má zswap přednost a zápisy se měří. Původně zvolený zram cloudové jádro Ubuntu v Environmentech nemá (modul je jen v linux-modules-extra), zswap je v jádře zabudovaný (Machines#462, dodatek z 2026-10-11). Samostatný oddíl mimo ZFS se zváží jen u nového hostitele nebo při reinstalaci, protože ZFS pool zmenšit nelze. (3) **Chráněné jádro.** Launchpad, T3 Code, brána Environmentu a SSH mají chráněnou paměť. Při nedostatku přijdou na řadu nejdřív karty prohlížeče a potom Moduly. Swap bez ochrany jádra by zaseknutí jen oddálil. (4) **Prohlížeč s rozpočtem.** Prohlížeč Environmentu (0191) má vlastní limit paměti, takže těžké stránky stojí jen jeho karty. Po pádu nebo restartu sám neobnovuje staré karty. Kartu, na kterou se nikdo nedívá a ve které nepracuje agent, po dohodnuté době uspí: uvolní její paměť a otevření ji znovu načte. Mechanismus vybere experiment plánu, protože `chrome.tabs.discard` aktivní kartu nezahodí a podle 0191 bodu 11 je každá vzdálená karta aktivní ve svém okně. Kandidáti jsou zavření vzdálené karty se záznamem její adresy, ze kterého ji otevření znovu založí, přesun karty do okna na pozadí a její zahození, a Memory Saver Chromia, pokud na Linuxu prokazatelně funguje. Vyžadovalo by uspání změnu modelu oken z 0191 bodu 11, rozhodne o ní Admin výslovně. (5) **Všechny karty v pravém panelu (mění 0191 body 11 a 18).** Pravý panel prohlížeče v aplikacích ukazuje vždy všechny karty Environmentu, lidí i agentů. U každé je, kdo ji otevřel, kolik bere paměti a kdy byla naposledy použitá, a jde uspat nebo zavřít; kartu, ve které pracuje agent, panel zavře jen s varováním. Volba „jen moje karty“ není. Panel ukazuje i spuštěné Moduly s pamětí a tlačítkem Zastavit. Uvnitř Environmentu se nic neodděluje (0191 bod 1), takže všichni jeho uživatelé vidí totéž. Pohled dál ukazuje vždy jednu kartu (0191 bod 11); seznam všech karet je přehled v panelu, ne pohled na všechna okna, a plocha (0191 bod 8) zůstává pohledem na celou obrazovku. Věta 0191 bodu 18, že přehled všech oken dává jen plocha, tím platí jen pro okna jako obraz, ne pro seznam karet. Integraci předchází wireframe. (6) **Dva režimy Modulu (mění 0171 bod 3 a kap. 4 standardu).** Otevření Modulu z Launchpadu z `main` spouští sestavenou verzi: App deklaruje `start`, jeden proces, který servíruje výstup sestavení, a sestavení je součástí přípravy. Náhled z worktree, na kterém pracuje agent, spouští `dev` s hot reloadem. Launchpad po každé změně `main` sestaví novou verzi na pozadí a do té doby servíruje předchozí, takže uživatel na sestavení nečeká. Sestavení běží po jednom. Neúspěšné sestavení Launchpad ukáže jako nález a nabídne výslovné spuštění vývojové verze; tiše na ni nepřepíná. Data App čte za běhu, do sestavení se zapéká jen obsah, který se mění s `main`. Vývojový server z worktree skončí se zánikem worktree nebo po nečinnosti. App bez `start` běží do cutoveru v `dev` a kontrola Module Standardu na to upozorní. Převod Modulů dělá Agent podle návodu (0173). (7) **Procesor.** Remote Environment dostane polovinu logických vláken svého hostitele se stejnou váhou jako ostatní. Hostované Environmenty pracují ve špičkách a málokdy všechny najednou, proto se procesor sdílí, paměť ne. Změna počtu vCPU restartuje Environment. (8) **Co se nemění.** Pravidlo RAM a rezerva hostitele, izolace Environmentů, plný přístup uvnitř Environmentu (0172) a jeden prohlížeč na Environment (0191). **Dodatek z 2026-10-11 (pravý panel podle aplikace a Nová karta; Matěj):** (9) **Lišta karet podle aplikace (upřesňuje bod 5).** V Launchpadu ukazuje lišta pravého panelu vždy všechny karty Environmentu, lidí i agentů. V T3 Code ukazuje karty jednoho vlákna: jeho karty prohlížeče a nástroje T3 Code. MausBot výhledově ukáže karty svého bota. Všechny karty Environmentu má člověk v každé aplikaci v Přehledu Nové karty (bod 10), pro Přehled tedy bod 5 platí beze změny. (10) **Nová karta ve všech aplikacích.** „+“ v pravém panelu otevře v Launchpadu, v T3 Code a výhledově v MausBotu stejnou Novou kartu po vzoru postranního panelu Codexu. Nahoře je adresní řádek: adresa promění tuto kartu v kartu prohlížeče Environmentu a vzdálená karta vznikne až tehdy, takže prázdná Nová karta paměť nebere. Pod ním jsou nástroje dané aplikace (v T3 Code Terminal, Files, Diff, pull requesty, Agents a Device, které nahrazují rozbalovací nabídku „+“), Přehled (paměť Environmentu, všechny jeho karty s tím, kdo je otevřel, pamětí a posledním použitím, Uspat a Zavřít, a spuštěné Moduly se Zastavit; čte se jen, když je Nová karta vidět) a navrhované aplikace Environmentu a weby. Připnutý Přehled z wireframu nahrazuje Nová karta: první otevření panelu ji ukáže a po zavření poslední karty se ukáže také. Nová karta je jedna komponenta Platformy, kterou aplikace vkládají jako komponenty shellu: aplikace jí dá své nástroje a dozví se, čím se karta stala. (11) **Sdílená karta a kdy vzdálená karta zanikne (upřesňuje 0191 bod 11).** Karta, kterou člověk vezme z Přehledu do vlákna, zůstává jednou vzdálenou kartou (0191 bod 11): pracují v ní obě vlákna, případně vlákno a člověk. Zavření v liště vlákna ji odebere jen z této lišty. Vzdálená karta zanikne, až ji pustí poslední místo, které ji drží, a nepracuje v ní agent. Takovým místem je lišta vlákna v T3 Code, ve které karta je, nebo Launchpad, ve kterém ji člověk otevřel. Pak zanikne po krátké lhůtě s nabídkou Vrátit, jak 0191 bod 11 říká o zavřené záložce člověka. Dokud ji má jiné vlákno nebo v ní pracuje agent, zůstává. Zavřít v Přehledu a zavření v liště Launchpadu, která ukazuje všechny karty, ji zavře všem najednou, u karty s pracujícím agentem s varováním (bod 5). (12) **Co platí dál.** Stav „agent čeká“ se nezobrazuje, dokud nebude vycházet z nativních otázek agentů (Lazurio/LazurioPlatform#308). Pohled dál ukazuje jednu vzdálenou kartu (0191 bod 11) a plocha zůstává obrazem celé obrazovky. **Stav dodatku:** finální wireframe pro Launchpad, T3 Code a MausBot se připravuje v plánech DEV-6646 a DEV-6656. Do té doby T3 Code 0.0.45-lazurio.7 otevírá na „+ → Browser“ novou prázdnou kartu. **Dodatek z 2026-10-12 (lišta podle místa a lišta vlákna v T3 Code; Matěj):** (13) **Lišta ukazuje karty svého místa.** Lišta pravého panelu ukazuje v každé aplikaci karty svého místa: v T3 Code karty vlákna, v Launchpadu karty, které drží Launchpad, tedy ty, které v něm člověk otevřel z Nové karty (adresou nebo výběrem z Přehledu) nebo jako novou kartu stránky zobrazené v něm. Všechny karty Environmentu má člověk v Přehledu Nové karty v každé aplikaci a odtud jde kteroukoli otevřít nebo zavřít všem. (14) **× na liště zavře pohled, ne nutně kartu.** × na liště kterékoli aplikace zavře pohled člověka a kartu za to místo pustí, s nabídkou Vrátit. Karta v Environmentu zůstává a je vidět v Přehledu, dokud v ní pracuje agent, drží ji jiné místo nebo se na ni někdo dívá; jinak po krátké lhůtě zanikne (bod 11). Zavřít pro všechny je jen v Přehledu, u karty s pracujícím agentem s varováním. (15) **Lišta vlákna v T3 Code.** Panel se sám otevře, když agent otevře kartu nebo nové okno, ne při každém jeho kliknutí. Zavření poslední karty panel zavře, jako to dělá upstream T3 Code. Nové karty vlákna mají na všech zařízeních stejné pořadí, místo existující karty si drží každé zařízení a karty jde na liště přetahovat. (16) **Co dodatek mění.** Bod 9: věta, že lišta Launchpadu ukazuje vždy všechny karty Environmentu, se nahrazuje bodem 13. Bod 10: Nová karta po zavření poslední karty se ukáže jen v Launchpadu. Bod 11: zavřít všem jde jen v Přehledu, ne zavřením v liště Launchpadu. Ostatní body platí beze změny. **Stav dodatku:** Launchpad to staví v plánu DEV-6656 (úkol 917, krok 3 F47), T3 Code v plánu DEV-6646 (úkol 501). | | 0196 | **Přístup k datům Modulů: strop Environmentu, zúžení v aplikaci a ověřená identita, která není klíčem k datům.** Matěj (Organization Admin) 2026-10-10; plán DEV-6657. Navazuje na 0035, 0171, 0177, 0192 a 0193; doplňuje 0177 o volitelný tajný údaj. (1) **Cíl.** Jeden model přístupu k datům Modulů pro všechny Organizace a libovolné úložiště (databáze, repozitář, API). (2) **Tři vrstvy.** Lazurio řídí vstup do Modulu (grant Bez přístupu / Uživatel / Admin, 0192) a předává Modulu ověřenou identitu. Organizace řídí, co kdo uvnitř Modulu smí, ve vlastním kódu a datech. Lazurio k tomu dodá doporučený postup; Organizace ho smí převzít i předefinovat a platforma vnitřní práva nespravuje ani nepředepisuje jejich přednost. (3) **Na Environmentu se o právech nerozhoduje.** Kdo má Environment, má v něm root a změní soubor, kód i tajný údaj. Pravidlo, které leží nebo se vyhodnocuje na Environmentu, proto omezuje jen ty, kdo Environment nemají; kdo ho přepíše, má už celý strop a nezíská nic navíc. Moduly všech Organizací na jednom Environmentu běží pod jeho jedním účtem a jsou jedna oblast důvěry (Matěj 2026-10-11): kontrola, že tajný údaj dostane jen Modul Organizace, které Environment patří, je pravidlo deklarace, ne izolace proti kódu na stejném Environmentu. Komu nejde svěřit citlivý Modul, nedostane Environment, na kterém Modul běží, ale jen jeho aplikaci (0192). (4) **Strop Environmentu.** Na data dosáhne Environment, ne člověk: Admin Organizace uloží jeho přístupy do kolekce Environmentu v trezoru Organizace (0193), Launchpad předá Modulu jen deklarované (0177) a úložiště je vynucuje. Schopnost, kterou má jen část Environmentů, Modul deklaruje jako volitelný tajný údaj (`optional_secrets`): kde ho kolekce Environmentu nemá, Modul nastartuje bez té schopnosti; povinný tajný údaj (`secrets`) dál start bez hodnoty odmítne. Kdo má celý Environment, pracuje s celým stropem (vědomá důvěra, 0192). Při přeřazení Environmentu jinému člověku a při odvolání se přístupy vymění. (5) **Aplikace jen ubírá.** Kdo má jen aplikaci, vidí část stropu podle pravidel Organizace. Zužuje server Modulu u každého požadavku včetně API, stahování, WebSocketů a přímých URL; víc než strop nikdy nedá. Víc lidí smí být v aplikaci současně: identita patří k požadavku, mezipaměti s daty jsou oddělené pro každého člověka a zápis nese autora. Koncept repository-db zůstává sdílený za Environment (9); zda má Modul nad databází koncept pro každého člověka, volí jeho architekt (10). **Komu se tu věří.** Zúžení na Environmentu je služba toho, kdo Environment provozuje, vůči lidem, se kterými sdílí aplikaci; není to izolace proti němu. Má root, takže může server Modulu změnit a návštěvníkovi ukázat celý strop, stejně jako mu může data poslat jinak. Admin Organizace mu proto strop svěřuje celý (vědomá důvěra, 0192) a za to, co jeho aplikace návštěvníkům ukáže, odpovídá on. Stejně tak autor změny zapsaný na Environmentu je informace, ne důkaz proti jeho provozovateli (srov. původ změny v repository-db). Kde má zúžení platit i proti provozovateli, data obsluhuje aplikace provozovaná Organizací (`..lazurio.io`, 0146), na které root nemá žádný uživatel, nebo úložiště, které identitu ověřuje samo. (6) **Ověřená identita.** Potvrzení podepisuje Lazurio Auth, nikdy Environment; platí krátce a jen pro přesný Environment a aplikaci. Není klíčem k datům, takže jeho odcizení majitelem Environmentu nedá víc než jeho strop a v aplikaci jiného Environmentu neplatí. Sdílení aplikace proto nenese práva k datům návštěvníka; návštěvník svěřuje provozovateli Environmentu jen to, co mu jeho aplikace ukáže (5). (7) **Úložiště není v prohlížeči.** Modul s omezenými právy má serverovou část. Prohlížeč nikdy nedostane přístup k úložišti; přihlášení pro data pro každého uživatele a thick klient s přístupem k úložišti se nepoužívají. Čistě statická aplikace se s omezenými právy nesdílí. (8) **Repository-db, nebo databáze, volí architekt Modulu.** Zúžení dělá server Modulu, takže víc lidí s různými právy na jednom Environmentu zvládne i repository-db. Pravidla přístupu Modulu můžou ležet v jeho datovém repozitáři jako běžná data a s daty se přenesou do databáze. Databázi Modul potřebuje, když se strop má lišit mezi Environmenty uvnitř jedné datové sady (Git ho dělí jen po repozitářích), když se osobní údaje musí dát smazat (historie Gitu se nepřepisuje), když zapisuje služba zvenku nebo jde o hodně zápisů, nebo když na stejných datech současně pracují lidé z různých Environmentů. Agent, který Modul zakládá nebo mění, vysvětlí Operátorovi tyto kompromisy a doporučí volbu. (9) **Koncept a omezená práva.** Koncept repository-db zůstává sdílený za celý Environment (0035), takže lidé na jednom Environmentu vidí rozpracované změny ostatních. Uživatel s omezenými právy vidí v konceptu jen změny na záznamech, ke kterým má přístup, i s jejich autorem; skryté změny ani jejich počet nevidí. Publikovat smí jen ten, kdo vidí celý koncept, protože Publikace potvrzuje koncept celý a žádná změna nesmí projít neviděná. Autor změny pochází z ověřené identity (6). (10) **Modul nad databází.** Architekt Modulu zvolí, zda změny jdou přes stejnou kartu konceptu (Publikace je zapíše do databáze jednou transakcí s auditem, kdo co kdy změnil), nebo se zapisují rovnou. Práce Agenta zůstává Draftem: do Modulu, který zapisuje rovnou, Agent zapíše jen na výslovný pokyn Operátora. Jednoduchá akce, kterou člověk v aplikaci výslovně potvrdí, je jeho Publikací. (11) **Doporučený postup pro Neon (první).** Organizace Neonu patří Organizaci, nikdy Lazurio platformě. Role pro Environmenty a zapisující služby se zakládají SQL s nejmenšími GRANTy, protože role z konzole Neonu dostanou `neon_superuser`. Ověření identity přes přímé připojení s klíčem dodaným klientem se nepoužívá. (12) **Nemění se:** sdílený koncept a Publikace repository-db (0035), vstup, členství a schválení zařízení podle 0192, grant user/admin a opt-in identita Modulu (DEV-6551) a izolace Organizací. | **Dodatek 0192 — důvěrné plné sdílení, rozhodnutí Operátora 2026-10-06:** Přidělený uživatel smí vědomě předat důvěryhodnému členovi téže Organizace vše dostupné v pracovním individuálním Environmentu, včetně osobních přihlášení a existujících vzdálených přístupů. Systém vysvětlí rozsah a umožní odebrat vstup; nevynucuje odhlášení, výmaz ani převod na týmový broker. Sdílející přijímá riziko použití těchto účtů; publikaci uvnitř runtime drží proces, ne izolace jednotlivých lidí. Odebrání vstupu nevrátí kopie dat a samo neodvolá externí klíče. Aktivní členství a zařízení schválené Adminem zůstávají povinné; externí hosté ani Personalspace se tímto nepovolují. Plný kontrakt: [přístupový model](environment-access-model.md); vývoj doporučení: [review](environment-access-review-2026-10-06.md). diff --git a/manual/environment-browser.md b/manual/environment-browser.md index f06d364d..91433c26 100644 --- a/manual/environment-browser.md +++ b/manual/environment-browser.md @@ -43,9 +43,12 @@ aktualizace forků (dodatek 0191 z 2026-10-11). `https://browser.<…>/t/` je pohled právě na ni, holá adresa `browser.<…>/` založí novou (0191 bod 11, F39). Každá aplikace ukazuje kartu jako rámeček tohoto pohledu. Agent a člověk v ní pracují současně. Plocha (`desktop.<…>`, druhá vlna) je pohled na celou obrazovku. -4. **Spravuje se z Launchpadu.** Launchpad ukazuje všechny karty Environmentu, jeho paměť a - spuštěné Moduly a umí kartu zavřít všem (0195 bod 5 a 9, F47). Stejnou Novou kartu otevře - „+“ v každé aplikaci (0195 bod 10). +4. **Spravuje se z Přehledu, lišta ukazuje karty svého místa.** + - Přehled v Nové kartě ukazuje všechny karty Environmentu, jeho paměť a spuštěné Moduly a umí + kartu zavřít všem (0195 body 5 a 10, F47). + - Stejnou Novou kartu otevře „+“ v každé aplikaci, Launchpad je jejím domovem. + - Lišta ukazuje karty svého místa: v T3 Code karty vlákna, v Launchpadu karty otevřené + v Launchpadu (0195 bod 13). 5. **Karta žije, dokud ji něco drží.** Drží ji místo, které ji ukazuje (lišta vlákna v T3 Code, Launchpad, ve kterém ji člověk otevřel, výhledově bot MausBotu), a agent, který v ní pracuje. Když ji nic nedrží, nikdo se na ni nedívá a nepracuje v ní agent, po krátké lhůtě @@ -64,7 +67,7 @@ aktualizace forků (dodatek 0191 z 2026-10-11). | Soubory držitelů `$XDG_RUNTIME_DIR/lazurio-browser/holders/.json` | Server aplikace, které lišta patří | Které karty lišta drží; zapisuje je jen ta aplikace, atomicky, s právy 0600 v adresáři 0700 (F47 bod 4) | | Seznam živých karet `$XDG_RUNTIME_DIR/lazurio-browser/tabs.json` | Hub | Čerstvý snímek karet prohlížeče s časem na boot clock; podle něj si aplikace srovnávají svá držení (F47 bod 4) | | Loopback API hubu (`/.lazurio/tabs…`) | Hub; volá ho jen Launchpad | Seznam karet, nová karta, zavřít všem, Vrátit; nikdy přes bránu ani z prohlížeče (F47 bod 6) | -| Přehled a akce Launchpadu (`/api/new-tab/…`) | LazurioPlatform | Paměť, karty, Moduly, otevřít, držet, zavřít, Vrátit (F47 body 7–8) | +| Přehled a akce Launchpadu (`/api/new-tab/…`) | LazurioPlatform | Paměť, karty, Moduly, otevřít, držet, pustit, zavřít všem, Vrátit (F47 body 7–9) | | Nová karta: stránka `/new-tab` a prvek `` | LazurioPlatform (shell) | Jedna komponenta pro všechny aplikace; aplikace ji vloží jako prvek shellu (F47 body 1–3) | | `agent-browser` | Fork `Lazurio/agent-browser` | Nástroj agentů: sezení, vazba sezení na kartu, připnutá karta (0191 bod 4) | | Návody agentům | LazurioPlatform (Folder) | Jak otevřít okno (`lazurio browser window`), poslat odkaz a co dělat po `tab_gone` | @@ -86,8 +89,11 @@ ukáže nad stránkou ve stejném pohledu, novou kartu nabídne aplikace jako no - **Karta, kterou nic nedrží,** skončí 30 s po odchodu posledního diváka. Kartu, kterou ještě nikdo neviděl ani nedržel, ukončí hub po 10 minutách. - **Držená karta** jen proto, že se na ni nikdo nedívá, nekončí. -- **Zavřít** v Přehledu nebo v liště Launchpadu zavře kartu všem po 8 s, i drženou. Pracuje-li - v ní agent, nejdřív varuje. +- **× na liště** kterékoli aplikace zavře pohled člověka a kartu za to místo pustí, s nabídkou + Vrátit. Karta v Environmentu i v Přehledu zůstává, dokud ji drží něco jiného nebo se na ni někdo + dívá. Jinak skončí po 8 s (0195 bod 14). +- **Zavřít** v Přehledu zavře kartu všem po 8 s, i drženou. Pracuje-li v ní agent, nejdřív + varuje. - **Selhané čtení.** Když hubu selže čtení držení, kartu nezavře. ## Smlouva hostitelské aplikace @@ -118,9 +124,10 @@ tohle a nic dalšího nepotřebuje: - Lišty jsou `launchpad` a `t3-`; `t3-` je zároveň sezení agenta vlákna. - **Čas záznamu, který čte jen aplikace sama.** Ke každé kartě si aplikace drží čas, kdy ji do lišty přidala. Čas přečte z boot clock v té chvíli a uloží ho spolu s kartou. - - T3 Code ho drží ve stavu vlákna. - - Launchpad ho ukládá do svého souboru držitele jako další pole + - Launchpad i T3 Code ho ukládají do svého souboru držitele jako další pole `"recordedAt": {"": {"boot": "…", "at": …}}`, které hub ignoruje. + - Soubor držitele je jediné úložiště karet lišty, takže databáze T3 Code zůstává + upstreamová (návrh úkolu 501, Matěj 2026-10-12). - Karta bez času se počítá jako zaznamenaná dávno. - **Seznam živých karet, který zapisuje hub.** `tabs.json` je `{"tabs": [""], "takenAt": {"boot": "…", "at": …}}`, kde `takenAt` je chvíle, @@ -136,7 +143,8 @@ tohle a nic dalšího nepotřebuje: záznamu, protože snímek začatý po záznamu by živou kartu obsahoval; - kartu zaznamenanou ve stejnou chvíli nebo později drží. 4. **Pouští, co skončilo.** - - Zavření karty v liště ji odebere z této lišty, s nabídkou Vrátit. + - × v liště kartu z této lišty odebere a pustí ji, s nabídkou Vrátit. Karta zůstane, dokud ji + potřebuje agent, jiné místo nebo divák, a dokud existuje, je v Přehledu. - Archivace nebo smazání vlákna zavře všechny jeho karty, včetně vlastního okna jeho agenta (Matěj 2026-10-11, F47 to nechával otevřené). - Aplikace karty pustí a ukončí sezení agenta vlákna, aby okno nedržel jeho démon. @@ -155,10 +163,13 @@ tohle a nic dalšího nepotřebuje: ### Launchpad -Lišta ukazuje všechny karty Environmentu. „+“ otevře Novou kartu bez nástrojů. Launchpad -drží karty, které v něm člověk otevřel: z Nové karty, nebo jako novou kartu stránky -zobrazené v něm (`holders/launchpad.json`). Ty žijí, dokud je někdo nezavře všem. Přehled -čte paměť Environmentu, karty a Moduly jen tehdy, když je Nová karta vidět. Paměť jedné karty +- **Lišta** ukazuje karty, které drží Launchpad (`holders/launchpad.json`, 0195 bod 13): + - karty, které v něm člověk otevřel z Nové karty, adresou nebo výběrem z Přehledu; + - nové karty stránek zobrazených v něm. +- **„+“** otevře Novou kartu bez nástrojů a s adresním řádkem připraveným k psaní. Když je + lišta prázdná, panel ukáže Novou kartu. +- **× na liště** kartu pustí. Zavřít všem jde v Přehledu. +- **Přehled** čte paměť Environmentu, karty a Moduly jen tehdy, když je Nová karta vidět. Paměť jedné karty je odhad z JavaScript heapu označený „≈“; Matěj 2026-10-11 rozhodl, že odhad stačí, aby bylo vidět, které karty jsou nejnáročnější. @@ -174,6 +185,13 @@ vidět, které karty jsou nejnáročnější. prohlížeče Environmentu a pravý panel ukazuje kartu vlákna. - **Karta vzatá z Přehledu** do vlákna zůstává jednou sdílenou kartou. Lišta ukáže, že ji drží i jiné vlákno nebo Launchpad. +- **Okno agenta** se do lišty dostane samo, ať agent pracuje přes nástroje T3, nebo přes + `agent-browser`. Panel se sám otevře, když agent otevře kartu nebo nové okno, ne při každém + kliknutí (0195 bod 15). +- **Pořadí:** nové karty vlákna mají na všech zařízeních stejné pořadí. Místo existující karty si + drží každé zařízení a karty jde přetahovat. Do v0.0.45 se přetahování přenáší z upstreamu + (#17730), v 0.0.46 je upstreamové. +- **Zavření poslední karty** panel zavře, jako to dělá upstream. - **Desktopová aplikace** T3 Code má vlastní prohlížeč počítače, na kterém běží, a 0191 ho nemění. - **Upstream.** Až upstream T3 Code přinese vlastní integraci prohlížeče do webového T3, fork @@ -299,5 +317,3 @@ prohlížeč takto: - Plocha a Computer Use (druhá vlna 0191). - Jak při refreshi na stable 0.0.46 napojit serverový prohlížeč upstreamu na prohlížeč Environmentu: buď ho fork vypne, nebo ho nasměruje na DevTools na 9222. -- Zda pořadí karet v liště vlákna sdílet mezi zařízeními (upstream ho drží v každém klientovi - zvlášť).