# Întrebări frecvente (/ro/docs/apps/faq)

Întrebări comune despre aplicațiile desktop, web și Android — siguranță, costuri, lease-uri și insigne REMOTE, permisiuni, mod offline, actualizări.

## Siguranță și control [#siguranță-și-control]

<Accordions>
<Accordion title="E sigur să las un AI să ruleze comenzi pe computerul meu?">
Nu rulează niciodată o comandă în tăcere. Prima dată într-o sesiune când codai vrea să ruleze o comandă shell, să scrie un fișier sau să facă ceva în browser, apare un card de aprobare și nu se întâmplă nimic până nu răspunzi — **Allow once**, **Always allow (this session)** sau **Deny**. Orice nu este un „da” clar este un refuz. Output-ul este limitat la 64 KB per stream și fiecare comandă are un timeout (30 s implicit, cel mult 10 minute), așa că o comandă scăpată de sub control este omorâtă împreună cu procesele pe care le-a pornit.

Dacă apeși **Allow**, comanda rulează cu adevărat cu permisiunile utilizatorului tău — citește cardul așa cum ai citi un script înainte să îl lipești într-un terminal.

</Accordion>
<Accordion title="Ce foldere poate atinge desktopul?">
Doar **folderele aprobate** din *Settings → Executor* (implicit: folderul tău home). Căile sunt canonicalizate, așa că trucurile cu `..` și symlink-urile care ies în afară sunt respinse. Citirile sunt limitate la 512 KB, scrierile la 2 MB, listările la 500 de intrări.
</Accordion>
<Accordion title="Ce înseamnă nivelurile de autonomie?">
**Desktop** (controlul computerului): *Strict* întreabă înainte de fiecare acțiune în aplicații sensibile și înainte de orice combinație de taste care poate închide sau distruge lucru; *Assisted* (recomandat) acționează liber în aplicații obișnuite, întreabă în cele sensibile și nu tastează niciodată secrete; *Autopilot* păstrează doar filtrul de credențiale — folosește-l cât privești.

**Android**: _strict_ întreabă înainte de fiecare acțiune; _assisted_ (implicit) înainte de orice trimite sau plătește și în interiorul aplicațiilor sensibile; _autopilot_ doar înainte de trimitere sau plată. Aplicațiile de mesagerie au suplimentar _ask / block / allow_.

</Accordion>
<Accordion title="Cum îl opresc?">
Desktop: **Esc** sau **Stop** anulează tura și eliberează lease-ul; închiderea ferestrei îl eliberează și ea. În timpul controlului computerului, `Ctrl+Alt+Space` (sau `Esc` de două ori) este butonul de oprire, iar propriile tale mișcări de mouse sau taste pun agentul pe pauză. Android: **Stop** în chat sau pe bulă; fiecare tură are și un buget de timp (4 minute implicit). De pe alt dispozitiv, un editor sau owner poate trimite **cancel**.
</Accordion>
<Accordion title="Poate aplicația Android să-mi vadă parolele?">
Cât rulează o sarcină poate vedea ce este pe ecran, inclusiv text tastat într-un câmp vizibil. Android maschează câmpurile de parolă față de serviciile de accesibilitate, dar alt text sensibil — un sold bancar, un cod 2FA — este vizibil. De aceea aplicațiile de banking, portofel, plăți, autentificator, manager de parole și Setările de sistem sunt **sensibile**: în modul *assisted* fiecare acțiune în ele cere aprobarea ta. Nu îi cere lui codai să facă lucruri în aplicații pe care nu le-ai da pe mâna unui prieten.
</Accordion>
<Accordion title="A rulat ceva pe computerul meu pe care nu l-am pornit eu.">
Cel mai probabil o sarcină a fost **trimisă (dispatch)** către acest desktop de pe telefon sau din hub — aplicația verifică la fiecare 30 de secunde și le rulează; fiecare pas este în transcriptul sesiunii. Dezactivezi cu *Settings → Executor → `Run tasks dispatched to this device`*. Dacă nu recunoști sesiunea deloc, revoci dispozitivele necunoscute din **hub → Security → Devices** și rotești cheia.
</Accordion>
</Accordions>

## Sesiuni pe mai multe dispozitive [#sesiuni-pe-mai-multe-dispozitive]

<Accordions>
  <Accordion title="Ce este un lease?">
    O sesiune poate fi văzută de mai multe dispozitive simultan, dar doar unul ar trebui să *facă*
    treaba. Acel dispozitiv deține **lease-ul** (30 de secunde, reînnoit la fiecare 10). **Run
    here** pe desktop îl revendică; aplicația îl dă înapoi la Stop sau la închidere. Dacă alt
    dispozitiv îl deține, vezi care și poți face **Take over**.
  </Accordion>
  <Accordion title="De ce afișează o sesiune REMOTE?">
    Pentru că dispozitivul care o execută nu este acesta — treaba se face pe telefonul tău, pe alt
    computer sau pe un host către care s-a făcut dispatch, și tu privești o oglindă live. Trece pe
    **LOCAL** când revendici lease-ul cu *Run here*.
  </Accordion>
  <Accordion title="Ce roluri există?">
    **Owner** — tot, inclusiv *Run here*, redenumire, partajare, ștergere. **Editor** — privește,
    trimite, răspunde, anulează. **Viewer** — doar privește; controalele apar dezactivate, cu
    motivul. Rolurile se atribuie când o sesiune este partajată din hub (către un utilizator, o
    organizație sau un link cu expirare).
  </Accordion>
  <Accordion title="Pot porni o sarcină pe telefon de pe laptop, sau invers?">
    Ambele. **Dispatch** țintește unul dintre dispozitivele tale și îl trezește (push pe Android,
    poll la 30 de secunde pe desktop). De pe desktop, *Continue on phone* trimite conversația pe
    telefon; de pe telefon sau din hub, trimiți o sarcină către un desktop anume. Selectorul **Run
    on** al aplicației web este aceeași idee pentru unelte: browserul conversează, un desktop
    execută.
  </Accordion>
  <Accordion title="Funcționează aplicația web fără desktop?">
    Da, pentru chat. Uneltele de fișiere și shell au nevoie de un host — un desktop autentificat cu
    același cont, cu *Serve as a remote host* activ. Până când unul este online vezi **Chat only in
    the browser**.
  </Accordion>
</Accordions>

## Costuri și date [#costuri-și-date]

<Accordions>
  <Accordion title="Cât costă?">
    Aplicațiile sunt gratuite și open source (Apache-2.0). Rularea modelului costă cât facturează
    planul tău codai — fiecare sesiune afișează un **card de cost** (desktop) sau foaia **Cost ·
    Receipt** (Android), defalcat pe model. Bugetele din Settings limitează o sarcină blocată. Cu
    propria cheie de furnizor, furnizorul te facturează direct; pașii on-device de pe telefon nu
    costă nimic.
  </Accordion>
  <Accordion title="Ce se trimite la gateway-ul codai?">
    Mesajele tale, istoricul conversației de care are nevoie modelul, rezultatele uneltelor
    (output-ul comenzii sau conținutul fișierului cerut de codai) și o copie a fiecărui pas, ca
    celelalte dispozitive să afișeze același transcript. Cheia ta API merge doar la URL-ul de
    gateway configurat, ca header `Authorization`. Nu există niciun SDK de analytics sau telemetrie
    în vreo aplicație. Trace-urile, memoria și checkpoint-urile de fișiere rămân pe dispozitiv.
  </Accordion>
  <Accordion title="Unde este stocată cheia mea?">
    Desktop: depozitul de credențiale al sistemului de operare (Windows Credential Manager,
    keyring-ul Secret Service pe Linux), niciodată un fișier simplu. Web: `localStorage`-ul acestui
    browser pentru `app.codai.ro`. Android: preferințe partajate criptate. **Sign out** o elimină și
    revocă dispozitivul pe server; poți revoca și orice dispozitiv din **hub → Security → Devices**.
  </Accordion>
  <Accordion title="Se antrenează pe conversațiile mele?">
    Doar dacă optezi. Consimțământul pentru antrenare este **dezactivat implicit**; îl comuți în
    aplicație (*Settings → About* pe Android, ecranul legal pe desktop) sau cu `PATCH /v1/account`.
  </Accordion>
</Accordions>

## Platforme și offline [#platforme-și-offline]

<Accordions>
  <Accordion title="Ce platforme sunt suportate?">
    **Desktop**: Windows x64 azi (installer, MSI, zip portabil, actualizări automate semnate).
    `.AppImage` / `.deb` / `.rpm` Linux sunt construite din aceeași sursă când se produce un build
    Linux pentru o versiune; controlul computerului și scurtăturile globale sunt doar pe Windows.
    macOS este configurat, dar nepublicat. **Web**: orice browser modern. **Android**: 11 sau mai
    nou; modelul on-device vrea un flagship recent. **iPhone / iPad**: [aplicația iOS](./ios.mdx) (iOS
    18+, în testare) — nu poate controla alte aplicații, pentru că iOS nu permite asta; ca să controlezi
    un iPhone de la distanță folosește [bridge-ul codai pentru iPhone](./iphone-remote.mdx).
  </Accordion>
  <Accordion title="Funcționează offline?">
    Aplicațiile desktop și web au nevoie de gateway (sau de un model local prin Ollama / LM Studio
    pe desktop). Pe Android, cu modelul on-device descărcat și modul `local-first`, sarcinile simple
    — deschizi o aplicație, apeși prin câteva ecrane, setezi o alarmă — rulează fără internet; pașii
    mai grei așteaptă o conexiune.
  </Accordion>
  <Accordion title="Îmi consumă aplicația Android bateria?">
    Cât rulează o sarcină, da — citirea ecranului și mai ales rularea modelului on-device pe GPU
    consumă energie ca un joc. În repaus, codai nu face nimic în fundal decât dacă ai activat
    rezumatul zilnic sau sincronizarea sesiunilor. *Baterie: Nerestricționată* doar împiedică
    Android să omoare o sarcină la mijloc; nu îl face pe codai să ruleze mai mult.
  </Accordion>
  <Accordion title="Cum funcționează actualizările? Sunt semnate?">
    Desktopul preia `https://codai.ro/api/desktop/latest.json`, descarcă un installer mai nou și îi
    verifică semnătura minisign față de cheia publică compilată în aplicație; un fișier care nu se
    verifică este refuzat. Aplicația web este mereu curentă. Pe Android, versiunea din Play se
    actualizează prin Play. APK-ul de pe GitHub are un actualizator integrat: citește un manifest de
    versiune semnat de la `codai.ro/api/phone/latest.json` (stabil) sau `beta/latest.json` (canalul
    beta, la alegerea ta), verifică semnătura cu o cheie fixată în aplicație și SHA-256-ul APK-ului
    înainte de instalare și nu instalează niciodată în timpul unei sarcini în curs. Un APK nou
    trebuie semnat cu aceeași cheie, altfel Android refuză actualizarea. Detalii și verificări
    manuale: [Verifică descărcările](./verify-downloads.mdx).
  </Accordion>
  <Accordion title="Pot folosi propriul gateway (auto-găzduit)?">
    Da. Desktop și Android: setezi **Gateway URL** la prima rulare sau în Settings. Build-ul desktop
    permite `https://*.codai.ro` plus `http://localhost` / `127.0.0.1`; alt domeniu are nevoie de
    lărgirea scope-ului `http:default` în `src-tauri/capabilities/default.json` și de propriul
    build. Aplicația web are nevoie ca gateway-ul tău să permită originea `app.codai.ro`.
  </Accordion>
</Accordions>
