Bezpečnosť a súkromie
kontext beží na tvojom počítači s tvojimi oprávneniami a pracuje s textom, ktorý môže skončiť v zdieľanom repozitári. Toto sú záruky, ktoré sa snaží dať, a miesta, kde končia.
Čo opustí tvoj počítač
Nič, kým to nenastavíš:
- lokálny index, inbox, outbox a cache zostávajú v
.git/kontext/, - k ostatným sa znalosti dostanú len cez commity, ktoré pushneš,
- adaptéry posielajú dáta len tam, kam to určuje ich konfigurácia (a len pre operácie a udalosti, ktoré deklarujú),
kontext distillpošle skrátený prepis vlákna LLM adaptéru, ktorý si vyberieš, po redakcii. Čo sa maskuje a čo pred promptom vypadne, je v citlivých vláknach. Neplatný vzorsecrets.redactzastaví distill, threads aj autopilot skôr, než sa čokoľvek odošle.
Dôvera pre adaptéry deklarované v repozitári
Adaptéry môžu spúšťať procesy a volať URL. Repozitár, ktorý si naklonuješ, nesmie vedieť prinútiť kontext (ani jeho git hooky) spúšťať ľubovoľné príkazy. Preto:
- adaptéry v tvojej používateľskej konfigurácii (
~/.config/kontext/…) a v konfigurácii pre klon sú dôveryhodné, - adaptéry deklarované v zdieľanej konfigurácii repozitára (
.ai/kontext.toml) sa preskočia, kým ich neposúdiš a nespustíškontext trustz terminálu, - dôvera je naviazaná (v
~/.config/kontext/trust.toml) na SHA-256 hash nad kanonickým TOML všetkého zdieľaného, čo sa dostane do adaptéra: tabuľkyadapters,[vars]aproject.name. Každá ich zmena si vyžaduje novú dôveru, - starý 12-hex FNV pin z verzie pred 0.10 sa odmietne s hláškou, nikdy sa ticho nepovýši: spusti
kontext trustznova, - zdieľané
[vars]nikdy neprepíšu vars používateľského ani lokálneho adaptéra, zdieľanéproject.namemusí byť slug a{{repo.remote}}nenesie userinfo.
kontext status a kontext adapters list ukazujú nedôveryhodné adaptéry ako varovanie.
Čo dôvera pokrýva:
- Deklarovaný text, nie skripty, ktoré spúšťa. Ak dôveryhodný adaptér spúšťa
./scripts/sync.sh, pin pokrýva riadok, ktorý skript menuje, nie skript. Neskorší commit, ktorý skript zmení, sa nezachytí. Skripty, ktoré adaptér spúšťa z repozitára, posudzuj ako každý kód, ktorý spúšťaš. - Voči procesu, ktorý vie upraviť
trust.toml, platí na čestné slovo.kontext trustbez terminálu nebeží, ale agent, ktorý vie alokovať terminál alebo zapísať tvoju konfiguráciu, pinne čokoľvek.kontext connectnainštaluje pravidlo hostiteľa, ktoré zakážekontext trustspustený agentom (PreToolUsenaBashv Claude Code a Codexe,beforeShellExecutionv Cursore); je to zábradlie, nie hranica.
Verify príkazy sú hranica dôvery
Pole verify: záznamu je shellový príkaz z repozitára a jeho spustenie je spustenie kódu z repozitára. Preto:
- verify príkaz sa spustí, len keď
trust.tomldrží pin jeho textu:sha256(cesta záznamu, NUL, príkaz)pod[repos.<slug>.verify], kontext trust --verify <id>(alebo--all) pinuje len z interaktívneho terminálu a vypíše každý príkaz, ktorý pinuje. Žiadny MCP nástroj ani operáciactx_apinepinuje,- bez pinu
kontext verify,drafts.verifyanictx_verifynič nespustia a vrátiauntrusted_verifys príkazom, jeho SHA-256 (command_sha256) a riadkom, ktorým ho pinneš (hint). Úprava príkazu pin zruší, - cez MCP sa nepinnutý príkaz vráti agentovi, ktorý ho spustí vo vlastnom sandboxe; výsledok sa zapíše ako
agentpečiatka, nie ako prejdená kontrola, - príkaz beží s povoleným zoznamom premenných prostredia:
PATH,HOME,USER,LANG,LC_*,TMPDIR,TERMa mená z[verify] pass_envz tvojej používateľskej konfigurácie (zdieľaná ani lokálna konfigurácia klonu nepridá žiadne), - cez MCP sa nespustí ani pinnutý príkaz, kým má súbor záznamu alebo jeho riadené cesty necommitnuté zmeny; inde sa taký beh označí
[dirty: <cesty>]v dôvode riadku denníka, output_tailsa rediguje a skupina procesov sa zabije pri timeoute, keď stdout ostane otvorený 2 s po skončení shellu, a keď sa MCP požiadavka zruší alebo sa zatvorí stdin,ctx_verifymá anotáciedestructiveHint: trueaopenWorldHint: true, takže hostitelia sa pred volaním pýtajú.
Čo pin nepokrýva:
- Pin viaže súhlas na text príkazu, nie na kód, ktorý spustí.
cargo testalebonpm testspustí, čokoľvek je v pracovnom strome; vetva môže zmeniť testy bez zmeny príkazu. HOMEostáva čitateľný a sieť otvorená. Povolený zoznam odstráni tokeny z prostredia, nie prístup k súborom ani sieti.- V Codexe beží
ctx_verifyv MCP serveri, mimo sandboxu agenta. Radšej nech agent vrátený príkaz spustí sám.
Jediná cesta, na ktorej pull request nevie prepašovať príkaz do behu s credentials CI, je spúšťať v CI znenie z base revízie; pozri CI.
Skenovanie tajných údajov
Pre-commit hook skenuje každý stagnutý súbor znalostí; nálezy s vysokou istotou commit zablokujú.
| Pravidlo | Závažnosť |
|---|---|
| súkromné kľúče (PEM, OpenSSH, PGP), JSON servisného účtu GCP | vysoká |
| prístupové kľúče AWS, tokeny GitHub a fine-grained PAT, GitLab, Slack, live kľúče Stripe | vysoká |
kľúče Anthropic (sk-ant-…) a OpenAI (sk-…), kľúče dotenv-vault | vysoká |
hlavičky Authorization: Bearer …, prihlasovacie údaje v URL | vysoká |
API kľúče Google, JWT, priradenia *_TOKEN= / password: (zástupné hodnoty sa ignorujú) | stredná |
| tajné údaje vo vetách („the secret is …“, „rotate the api key …“), keď hodnota vyzerá náhodne (zmiešané veľké a malé písmená, číslice, vysoká entropia; cesty a zástupné hodnoty sa ignorujú) | stredná |
secrets.scan = "staged"rozšíri skenovanie na každý stagnutý textový súbor (nielen znalosti).- Riadok, ktorý obsahuje
kontext:allow-secretalebo zodpovedá regexu vsecrets.allow, sa ignoruje. secrets.redactasecrets.allowz tvojej používateľskej alebo lokálnej konfigurácie sa spájajú s repozitárovými, nikdy ich repozitár nenahradí.ctx_capturea výsledky prehĺbenia nálezy automaticky zamaskujú ([redacted:<rule>]).
Súbory, ktoré kontext nikdy nečíta
Súbory .env (okrem .example, .sample, .template, .dist), SSH kľúče, *.pem, *.key, *.p12, *.pfx, *.keystore, *.tfstate, *.tfvars, credentials.json, .npmrc, .pypirc, .netrc, JSON súbory servisných účtov a konfiguračné súbory *secret* sú vylúčené zo skenovania, indexovania, ctx_read aj z promptov autopilota. Názvy premenných prostredia sa čítajú z ukážkových súborov; hodnoty nikdy.
Agenti a repozitár
ctx_readvracia len súbory vnútri repozitára a odmietne.git/,.git-credentialsa.ssh.ctx_threadsčíta lenclaude:,codex:,superset:,lasta cesty pod známymi koreňmi prepisov.dirnástrojovctx_verify,ctx_inboxactx_prepare_commitje obmedzený na tento repozitár, jeho worktrees a submoduly.- Nástroje, ktoré zapisujú (
ctx_capture,ctx_inbox promote,ctx_prepare_commit,ctx_init_submit,ctx_confirm,ctx_challenge), menia len pracovný strom a git index, nikdy históriu, nikdy remote.ctx_prepare_commit dropodmietne kandidáta, ktorého zapísal iný worktree. ctx_verifyspúšťa pinnutý príkaz (pozri vyššie); hostitelia by sa pred ním mali pýtať.- Príkazy, ktoré spúšťajú adaptéry, dostávajú argumenty ako vektor argumentov, nikdy cez shell. Chybové hlášky adaptérov nenesú query string ani userinfo.
Nahlásenie zraniteľnosti
Prosím, neotváraj verejné issue. Použi súkromné hlásenie zraniteľností na GitHube (pozri SECURITY.md).