English version →

Stanley OS: cum lucrez sigur cu Claude Code

Stanley OS e sistemul meu intern pentru lucrul cu Claude Code. Comenzile riscante ale rulărilor automate așteaptă aprobarea mea. Mai jos: de ce se apără, ce controale are, cum îl testez și ce am reparat după propria recenzie de securitate.

Codul e privat, iar captura de pe pagină folosește date inventate.

De ce se apără

Comenzi distructive

Unele comenzi ale unui asistent AI pot șterge date; o întrebare costă mai puțin decât o greșeală.

Prompt injection

Într-o rulare automată, pe care n-o urmărește nimeni, un text citit de asistent (o pagină web, un fișier) îl poate deturna. De aceea, comenzile riscante ale rulărilor automate așteaptă aprobarea mea.

Secrete scurse

O cheie afișată de o comandă poate ajunge într-o transcriere. De aceea, evenimentele și transcrierile trec prin cenzurare înainte să ajungă în baza de date.

Controale și teste

Aprobare, fail-closed

Rulările automate, pornite din consolă, fac singure doar ce permit regulile gărzii; restul așteaptă Y sau N. Fără răspuns, nu rulează nimic.

Secrete cenzurate

Înainte să ajungă în baza de date, evenimentele și transcrierile trec prin aceeași funcție de cenzurare: tipare pentru formatele de secrete cunoscute, plus valorile exacte ale secretelor pe care Stanley OS le are în mediul de rulare.

Acces doar prin server

În migrări, toate tabelele au Row Level Security activat, nicio politică și niciun drept acordat utilizatorilor anonimi: așa cum sunt scrise, doar serverul are acces.

Browserul nu primește nicio cheie de bază de date: toate citirile trec prin server.

Roșu înainte de verde

Regula mea: un test nou contează doar dacă l-am văzut întâi picând.

1.952 de mutații în 62 de seturi: o linie păzită e stricată intenționat, iar testul ei trebuie să pice.

Captură demonstrativă din Stanley OS, cu date inventate: o rulare automată (crm-demo-export) vrea să ruleze o comandă PowerShell care se termină cu Remove-Item. Garda o oprește și cere aprobare: panoul galben „1 Needs you” arată comanda întreagă și butoanele Y · Allow și N · Deny.
O comandă care poate scrie așteaptă un da sau un nu; fără răspuns, nu rulează (date inventate). Apasă pe captură ca s-o vezi mare.

Verificat în cod

  • Niciun secret actual în istoricul git: am comparat toate cele 262 de commit-uri cu valorile din configurația locală, fără să le afișez, și am căutat șiruri cu formă de cheie. Zero potriviri reale; doar date de test.
  • Fiecare pagină a consolei trimite X-Frame-Options: DENY și Content-Security-Policy: frame-ancestors 'none', iar un test o verifică. Aprobarea e o singură tastă, iar o consolă încadrată de alt site ar fi o țintă de clickjacking.

Recenzia de securitate din 24 octombrie 2026

Pe 24 octombrie 2026 am făcut o recenzie de securitate defensivă a propriului cod, doar prin citire. Verificările deterministe le-am rulat eu: secrete în istoricul git, RLS și drepturi în migrări, cod riscant (dangerouslySetInnerHTML, eval, shell, SQL lipit din text) și npm audit. Agenți AI au citit codul în paralel, câte unul pe zonă; o zonă am făcut-o eu. Nicio constatare din cod n-a fost evaluată peste severitate medie. Pe cele medii le-am confirmat eu, în cod sau prin măsurare, iar la cele minore și informative am verificat că există codul citat.

Reparate și puse în funcțiune:

  • Garda rulărilor automate lua drept citire o comandă care ascundea altă comandă între paranteze: în PowerShell, Get-Date (Remove-Item x) rulează întâi ce e în paranteză, deci șterge. Un text injectat într-o rulare automată, dintr-o pagină web sau dintr-un fișier, ar fi putut-o folosi ca să scrie sau să execute fără aprobarea mea. Acum orice paranteză deschisă cere aprobare.
  • Ieșirile comenzilor ajungeau în baza de date necenzurate. Acum trec, înainte de salvare, prin aceeași cenzurare ca transcrierile.
  • Lista de secrete pe care rulările automate nu au voie să le citească singure a fost lărgită, cu credențialele cloud și transcrierile altor sesiuni.
  • Dependențele: npm audit arată 0 vulnerabilități, măsurat pe 26 octombrie 2026, după actualizarea Next.js.
  • Fiecare dintre cele trei reparații de cod are un test văzut întâi picând și mutații care o păzesc.

Pe acest site apare doar ce e deja reparat și pus în funcțiune. Remedierile, pe pagina de securitate →

În cifre

262
commit-uri, între 7 septembrie și 26 octombrie 2026
2.100+
teste automate, în 204 fișiere
1.952
mutații, în 62 de seturi

Măsurat pe 26 octombrie 2026, la commit-ul 865ecf9 al depozitului privat.

Limite

  • Îl folosesc doar eu. Pentru telefon, consola are și o copie online, deschisă doar contului meu, după autentificare. Codul e privat, iar Stanley OS nu e un produs de vânzare.
  • Nu e un sandbox: verifică apelurile de unelte ale lui Claude, nu un program care rulează deja ca mine. O comandă permisă dinainte printr-o regulă nu mai ajunge la aprobare.
  • Înregistrarea sesiunilor e de tip fail-open: dacă ceva cade, lucrul continuă. Aprobarea nu: fără răspuns, o rulare automată nu execută comanda, iar în sesiunile mele cererea rămâne în terminal, la mine.
  • Folosește servicii externe, între care o bază de date găzduită, o platformă de găzduire pentru copia online a consolei și modele AI.
  • Garda rulărilor automate și cenzurarea sunt liste de reguli și tipare, nu un scaner: prind doar ce au fost scrise să prindă.

Întrebări despre securitatea lui?

Scrie-mi ce te interesează; detaliile tehnice le discutăm într-o conversație.