[{"data":1,"prerenderedAt":997},["ShallowReactive",2],{"blog-coding-agent-secrets-hygiene-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":33,"cover":100,"og":101,"expertise":102,"locales":103,"lang":105,"title":107,"description":108,"coverAlt":109,"metaTitle":110,"takeaways":111,"faq":117,"toc":130,"blocks":164,"others":712},"coding-agent-secrets-hygiene","2026-10-08",11,"security",[9,10,11,12,13],"AI agents","Secrets management","Claude Code","Pre-commit scanning","CI security",[15,16,17,18,19,20,21,22],"coding agent secrets","keep secrets away from AI agents","Claude Code deny read .env","gitleaks pre-commit hook","GitHub push protection secrets","OIDC GitHub Actions short-lived credentials","rotate a leaked API key","MCP server token scope",[24,27,30],{"name":25,"url":26},"Principle of least privilege","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrinciple_of_least_privilege",{"name":28,"url":29},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",{"name":31,"url":32},"Git","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGit",[34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97],{"title":35,"url":36},"Claude Code: permissions","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fpermissions",{"title":38,"url":39},"Claude Code: sandboxed Bash","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsandboxing",{"title":41,"url":42},"Claude Code: hooks","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fhooks",{"title":44,"url":45},"Claude Code: data usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fdata-usage",{"title":47,"url":48},"Claude Code: settings","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsettings",{"title":50,"url":51},"Claude Code: MCP servers","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmcp",{"title":53,"url":54},"Codex: configuration reference","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconfig-reference",{"title":56,"url":57},"Codex: agent approvals and security","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fagent-approvals-security",{"title":59,"url":60},"Codex: advanced configuration","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-advanced",{"title":62,"url":63},"GitHub: about push protection","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fsecret-scanning\u002Fintroduction\u002Fabout-push-protection",{"title":65,"url":66},"GitHub: security hardening with OIDC","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-for-github-actions\u002Fsecurity-hardening-your-deployments\u002Fabout-security-hardening-with-openid-connect",{"title":68,"url":69},"GitHub: OpenID Connect reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Freference\u002Fsecurity\u002Foidc",{"title":71,"url":72},"GitHub: using secrets in Actions","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-guides\u002Fusing-secrets-in-github-actions",{"title":74,"url":75},"GitHub: secure use reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-for-github-actions\u002Fsecurity-guides\u002Fsecurity-hardening-for-github-actions",{"title":77,"url":78},"GitHub: removing sensitive data","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fkeeping-your-account-and-data-secure\u002Fremoving-sensitive-data-from-a-repository",{"title":80,"url":81},"gitleaks: README and latest release","https:\u002F\u002Fgithub.com\u002Fgitleaks\u002Fgitleaks",{"title":83,"url":84},"TruffleHog: README","https:\u002F\u002Fgithub.com\u002Ftrufflesecurity\u002Ftrufflehog",{"title":86,"url":87},"detect-secrets: README and latest release","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets",{"title":89,"url":90},"Model Context Protocol: security best practices","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fbasic\u002Fsecurity_best_practices",{"title":92,"url":93},"OWASP: Secrets Management Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSecrets_Management_Cheat_Sheet.html",{"title":95,"url":96},"OWASP: LLM02 sensitive information disclosure","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm022025-sensitive-information-disclosure\u002F",{"title":98,"url":99},"Git: git-add documentation","https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-add","\u002Fimages\u002Fblog\u002Fcoding-agent-secrets-hygiene\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agent-secrets-hygiene\u002Fog.jpg","ai-engineer",[104,105,106],"en","de","hu","Coding-Agenten und Secrets: Schlüssel aus Kontext, Logs und Commits","Wie Secrets über Coding-Agenten abfließen und welche Kontrollen sie stoppen: Deny-Regeln, Sandbox, Pre-Commit-Scans, Push-Schutz, OIDC und Rotation.","Titelbild zu Coding-Agenten und Secrets: ein Schild aus sechs gestaffelten Kontrollen, von Deny-Regeln und Sandbox bis zur Rotation.","Coding-Agenten und Secrets: Kontext, Logs, CI · Balázs Csorba",[112,113,114,115,116],"Ein Agent kann alles lesen, was im Projektordner liegt, und Lesezugriffe im Arbeitsverzeichnis brauchen keine Freigabe. Verweigere Dateien, die nie in den Kontext sollen, mit Read-Regeln wie Read(.env).","Berechtigungsregeln decken die Datei-Werkzeuge und gängige Dateibefehle ab, nicht jeden Prozess. Schalte die Sandbox für Shell-Befehle ein und nutze sandbox.credentials, um Zugangsdateien und Token zu sperren.","Lokale Hooks lassen sich umgehen, also kombiniere Pre-Commit-Scans mit dem Push-Schutz von GitHub. Die serverseitige Prüfung ist die, die ein lokaler Hook nicht umgehen kann.","Nutze in CI OIDC für den Cloud-Zugriff und gib jedem Job nur die nötigen Rechte. Wer Schreibrechte hat, kann alle Repository-Secrets lesen, also halte langlebige Schlüssel daraus fern.","Behandle ein Secret, das in ein Transkript, ein Log oder einen Commit gelangt ist, als kompromittiert. Rotiere es zuerst und bereinige dann die Historie, denn Klone und Cache-Ansichten behalten alte Commits.",[118,121,124,127],{"q":119,"a":120},"Kann ich verhindern, dass Claude Code meine .env-Datei liest?","Ja. Eine Read-Deny-Regel wie Read(.env) in permissions.deny sperrt die Datei-Werkzeuge, und dieselbe Regel gilt auch für Dateibefehle wie cat, head und tail, die über Bash laufen. Ein Skript, das Dateien selbst öffnet, stoppt sie nicht, deshalb schalte zusätzlich die Sandbox ein.",{"q":122,"a":123},"Hält eine .claudeignore-Datei Secrets von Claude Code fern?","Nein. Laut der Dokumentation zu den Berechtigungen hat eine .claudeignore-Datei keine Wirkung. Verschiebe ihre Einträge deshalb in Read-Deny-Regeln.",{"q":125,"a":126},"Werden die Secrets, die ein Agent liest, an das Modell gesendet?","Was der Agent liest, wird Teil der Konversation, und die Konversation geht bei jeder Anfrage an die Modell-API. Laut der Datenschutz-Dokumentation von Anthropic werden Prompts und Modellausgaben über TLS übertragen, und Sitzungstranskripte bleiben standardmäßig 30 Tage lokal im Klartext gespeichert.",{"q":128,"a":129},"Was tue ich, wenn ein Schlüssel in einem Commit landet?","Rotiere den Schlüssel zuerst. Die Historie umzuschreiben reicht nicht, weil Klone, Forks, Cache-Ansichten und Pull Requests den Commit weiterhin enthalten können. GitHub Support entfernt sensible Daten nur dort, wo das Rotieren der Zugangsdaten das Risiko nicht mindern kann.",[131,134,137,140,143,146,149,152,155,158,161],{"id":132,"title":133},"how-secrets-leak","Fünf Wege, auf denen Secrets über einen Agenten abfließen",{"id":135,"title":136},"deny-reads","Lesezugriffe zuerst verweigern: Berechtigungsregeln und Sandbox",{"id":138,"title":139},"logs-and-transcripts","Transkripte, Feedback und CI-Logs",{"id":141,"title":142},"commits","Vor dem Commit prüfen",{"id":144,"title":145},"push-protection","Push-Schutz: die Prüfung, die ein lokaler Hook nicht umgeht",{"id":147,"title":148},"ci-oidc","CI: kurzlebige Token statt gespeicherter Schlüssel",{"id":150,"title":151},"mcp-tokens","MCP-Server: enge Token und nur Lesezugriff",{"id":153,"title":154},"rotate","Nach einem Leck: zuerst rotieren, dann aufräumen",{"id":156,"title":157},"checklist","Checkliste",{"id":159,"title":160},"first-steps","Was ich zuerst tun würde",{"id":162,"title":163},"sources","Quellen",[165,169,172,175,233,236,245,248,249,259,261,272,301,308,326,328,334,351,353,354,357,360,361,364,403,411,413,424,425,428,431,437,438,441,443,465,473,474,481,496,497,500,513,514,606,607,619,622,623],{"type":166,"content":167},"paragraph",[168],"Ein Coding-Agent liest dein Projekt, führt deine Shell aus und schreibt deine Commits. Deshalb ist jedes Secret im Projektordner nur einen Tool-Aufruf vom Kontextfenster des Modells entfernt. Eine einzelne Einstellung löst das nicht. Verweigere die Lesezugriffe, die du nicht willst, setze eine Sandbox für die Shell ein, prüfe vor dem Commit, lass den Server Pushes mit Secrets ablehnen und gib CI kurzlebige Token. Mehrere dieser Kontrollen sind standardmäßig ausgeschaltet.",{"type":170,"level":171,"id":132,"text":133},"heading",2,{"type":166,"content":173},[174],"Die meisten dieser Lecks entstehen durch Voreinstellungen, nicht durch einen Angreifer. Genau deshalb fallen sie so leicht nicht auf.",{"type":176,"ordered":177,"items":178},"list",false,[179,190,203,212,228],[180,184,185,189],{"tag":181,"children":182},"strong",[183],"Die Projektdateien."," Lesezugriffe im Arbeitsverzeichnis brauchen laut der Berechtigungstabelle von Claude Code keine Freigabe. Eine ",{"tag":186,"children":187},"code",[188],".env","-Datei im Projekt ist also ohne Nachfrage lesbar und landet dann in der Konversation.",[191,194,195,198,199,202],{"tag":181,"children":192},[193],"Die Shell."," Befehle wie ",{"tag":186,"children":196},[197],"env"," oder ",{"tag":186,"children":200},[201],"printenv"," geben Werte in die Tool-Ausgabe aus, und die Sandbox von Claude Code reicht die Umgebung standardmäßig an Befehle weiter, Secrets inklusive.",[204,207,208,211],{"tag":181,"children":205},[206],"Das Transkript."," Claude Code speichert Sitzungstranskripte standardmäßig 30 Tage im Klartext unter ",{"tag":186,"children":209},[210],"~\u002F.claude\u002Fprojects\u002F",", also bleibt alles auf der Festplatte, was der Agent ausgegeben hat.",[213,216,217,220,221,223,224,227],{"tag":181,"children":214},[215],"Der Commit."," ",{"tag":186,"children":218},[219],"git add -A"," bringt den Index in Einklang mit dem Arbeitsverzeichnis, indem Einträge hinzugefügt, geändert und entfernt werden. Ignorierte Dateien werden übersprungen, also wird eine ",{"tag":186,"children":222},[188]," ohne Eintrag in ",{"tag":186,"children":225},[226],".gitignore"," in dem Moment gestaged, in dem ein Agent den Befehl ausführt. Ein Agent, der einen fehlschlagenden Test reparieren soll, kann außerdem einen Konfigurationswert in eine Fixture kopieren und committen.",[229,232],{"tag":181,"children":230},[231],"Die Werkzeuge."," Ein MCP-Server kann alles, was sein Token erlaubt, und die Sicherheitsempfehlungen zu MCP verlangen, dass Clients davor warnen, dass lokale Server mit denselben Rechten laufen wie der Client.",{"type":166,"content":234},[235],"Das Kontextfenster ist der am wenigsten sichtbare Weg. Eine Datei oder Befehlsausgabe wird Teil der Konversation, und die Konversation geht bei jeder Anfrage an das Modell. Laut der Datennutzungs-Dokumentation von Claude Code gehen Prompts und Modellausgaben über TLS an die Modell-API. TLS schützt diese Verbindung, aber nicht das, was dem Modell gezeigt wird. Ein Secret lässt sich deshalb nur stoppen, bevor es gelesen wird.",{"type":237,"attrs":238,"inner":242,"caption":243},"diagram",{"viewBox":239,"role":240,"aria-labelledby":241},"0 0 720 290","img","d1-leak-t d1-leak-d","\u003Ctitle id=\"d1-leak-t\">Drei Wege, auf denen ein Secret ein Projekt verlässt\u003C\u002Ftitle>\u003Cdesc id=\"d1-leak-d\">Drei Reihen mit je vier Schritten. Die erste Reihe führt von einem Secret in der .env-Datei über das Read-Werkzeug und das Kontextfenster zum Modell-Anbieter. Die zweite führt von einem Shell-Befehl über seine Ausgabe in ein Klartext-Transkript und einen Feedback-Bericht. Die dritte führt von git add -A über einen Commit und einen Push zum Remote-Repository und seinen Cache-Ansichten. Jede Reihe braucht eine eigene Kontrolle.\u003C\u002Fdesc>\u003Crect x=\"20\" y=\"40\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"90\" y=\"64\" text-anchor=\"middle\" class=\"d-text\">Secret in .env\u003C\u002Ftext>\u003Ctext x=\"90\" y=\"82\" text-anchor=\"middle\" class=\"d-small\">Projektordner\u003C\u002Ftext>\u003Cpath d=\"M164 66 H192\" class=\"d-line\" \u002F>\u003Cpath d=\"M200 66 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"200\" y=\"40\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"270\" y=\"64\" text-anchor=\"middle\" class=\"d-text\">Read-Werkzeug\u003C\u002Ftext>\u003Ctext x=\"270\" y=\"82\" text-anchor=\"middle\" class=\"d-small\">ohne Nachfrage\u003C\u002Ftext>\u003Cpath d=\"M344 66 H372\" class=\"d-line\" \u002F>\u003Cpath d=\"M380 66 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"380\" y=\"40\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"450\" y=\"64\" text-anchor=\"middle\" class=\"d-text\">Kontextfenster\u003C\u002Ftext>\u003Ctext x=\"450\" y=\"82\" text-anchor=\"middle\" class=\"d-small\">pro Anfrage erneut\u003C\u002Ftext>\u003Cpath d=\"M524 66 H552\" class=\"d-line\" \u002F>\u003Cpath d=\"M560 66 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"560\" y=\"40\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"630\" y=\"64\" text-anchor=\"middle\" class=\"d-text\">Modell-Anbieter\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"82\" text-anchor=\"middle\" class=\"d-small\">erhält die Datei\u003C\u002Ftext>\u003Crect x=\"20\" y=\"130\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"90\" y=\"154\" text-anchor=\"middle\" class=\"d-text\">Shell-Befehl\u003C\u002Ftext>\u003Ctext x=\"90\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">env oder printenv\u003C\u002Ftext>\u003Cpath d=\"M164 156 H192\" class=\"d-line\" \u002F>\u003Cpath d=\"M200 156 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"200\" y=\"130\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"270\" y=\"154\" text-anchor=\"middle\" class=\"d-text\">Befehlsausgabe\u003C\u002Ftext>\u003Ctext x=\"270\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">Schlüssel offen\u003C\u002Ftext>\u003Cpath d=\"M344 156 H372\" class=\"d-line\" \u002F>\u003Cpath d=\"M380 156 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"380\" y=\"130\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"450\" y=\"154\" text-anchor=\"middle\" class=\"d-text\">Transkript\u003C\u002Ftext>\u003Ctext x=\"450\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">~\u002F.claude, 30 Tage\u003C\u002Ftext>\u003Cpath d=\"M524 156 H552\" class=\"d-line\" \u002F>\u003Cpath d=\"M560 156 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"560\" y=\"130\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"630\" y=\"154\" text-anchor=\"middle\" class=\"d-text\">Feedback-Bericht\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">\u002Ffeedback sendet\u003C\u002Ftext>\u003Crect x=\"20\" y=\"220\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"90\" y=\"244\" text-anchor=\"middle\" class=\"d-text\">git add -A\u003C\u002Ftext>\u003Ctext x=\"90\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">Ignoriertes fehlt\u003C\u002Ftext>\u003Cpath d=\"M164 246 H192\" class=\"d-line\" \u002F>\u003Cpath d=\"M200 246 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"200\" y=\"220\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"270\" y=\"244\" text-anchor=\"middle\" class=\"d-text\">Commit\u003C\u002Ftext>\u003Ctext x=\"270\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">Historie behält sie\u003C\u002Ftext>\u003Cpath d=\"M344 246 H372\" class=\"d-line\" \u002F>\u003Cpath d=\"M380 246 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"380\" y=\"220\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"450\" y=\"244\" text-anchor=\"middle\" class=\"d-text\">Push\u003C\u002Ftext>\u003Ctext x=\"450\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">Server lehnt ab\u003C\u002Ftext>\u003Cpath d=\"M524 246 H552\" class=\"d-line\" \u002F>\u003Cpath d=\"M560 246 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"560\" y=\"220\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"630\" y=\"244\" text-anchor=\"middle\" class=\"d-text\">Remote und Forks\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">Cache-Ansichten\u003C\u002Ftext>",[244],"Drei Wege aus einem Projekt. Jeder braucht eine eigene Kontrolle, vom Deny-Regel-Schutz für den ersten bis zum Push-Schutz für den letzten.",{"type":166,"content":246},[247],"Jeder Weg braucht eine eigene Kontrolle, und eine Zeile im Systemprompt gehört nicht dazu. OWASP weist darauf hin, dass Prompt Injection Anweisungen umgehen kann, etwa die Regel, niemals Secrets auszugeben. Beschränke deshalb den Zugriff auf sensible Daten nach dem Prinzip der minimalen Rechte.",{"type":170,"level":171,"id":135,"text":136},{"type":166,"content":250},[251,252,254,255,258],"Beginne bei den Datei-Werkzeugen. Eine Read-Deny-Regel verhindert, dass sie einen Pfad öffnen. Die Syntax folgt den gitignore-Regeln, sodass ",{"tag":186,"children":253},[188]," auf jeder Tiefe unterhalb des Arbeitsverzeichnisses passt, und ein Pfad, der mit ",{"tag":186,"children":256},[257],"~\u002F"," beginnt, ist an deinen Home-Ordner gebunden. Regeln werden in der Reihenfolge deny, ask, allow geprüft, also schlägt eine Deny-Regel immer eine Allow-Regel.",{"type":186,"code":260},"{\n  \"permissions\": {\n    \"deny\": [\n      \"Read(.env)\",\n      \"Read(secrets\u002F**)\",\n      \"Read(~\u002F.aws\u002F**)\",\n      \"Read(~\u002F.ssh\u002F**)\"\n    ]\n  }\n}",{"type":166,"content":262},[263,264,267,268,271],"Verwende ",{"tag":186,"children":265},[266],".claude\u002Fsettings.json",", um eine Regel mit dem Team zu teilen, oder ",{"tag":186,"children":269},[270],"~\u002F.claude\u002Fsettings.json"," für deinen eigenen Rechner. Deny-Regeln aus allen Ebenen werden vor Allow-Regeln ausgewertet. In den Benutzereinstellungen erreichst du mit einem ~\u002F- oder \u002F\u002F-Pfad jedes Projekt, weil ein führender Schrägstrich relativ zur Einstellungsdatei gilt.",{"type":166,"content":273},[274,275,278,279,278,282,278,285,288,289,292,293,296,297,300],"Zwei Grenzen sind wichtig. Die Regeln gelten für das Read-Werkzeug, für Dateibefehle, die der Agent über Bash ausführt, etwa ",{"tag":186,"children":276},[277],"cat",", ",{"tag":186,"children":280},[281],"head",{"tag":186,"children":283},[284],"tail",{"tag":186,"children":286},[287],"sed"," und ",{"tag":186,"children":290},[291],"tee",", sowie für Bash-Umleitungen. Sie gelten nicht für einen Befehl, der Dateien liest, ohne sie beim Namen zu nennen, etwa ",{"tag":186,"children":294},[295],"grep -r pattern .",", oder für ein Python- oder Node-Skript, das Dateien selbst öffnet. Und eine ",{"tag":186,"children":298},[299],".claudeignore","-Datei hat keine Wirkung, also verschiebe ihre Einträge in Read-Deny-Regeln.",{"type":302,"variant":303,"title":304,"body":305},"callout","warn","Deny-Regeln sind keine Sandbox",[306],[307],"Für eine Durchsetzung auf Betriebssystemebene, die jeden Prozess von einem Pfad fernhält, verweist die Dokumentation auf die Sandbox. Bash-Muster, die Befehlsargumente einschränken sollen, sind fragil. Baue deshalb keine Grenze daraus.",{"type":166,"content":309},[310,311,314,315,318,319,288,322,325],"Die Sandbox ist die zweite Schicht und standardmäßig ausgeschaltet. Schalte sie mit ",{"tag":186,"children":312},[313],"\u002Fsandbox"," ein oder setze ",{"tag":186,"children":316},[317],"sandbox.enabled"," auf true. Sie nutzt Seatbelt unter macOS und bubblewrap unter Linux und WSL2 und deckt nur Shell-Befehle ab: Datei-Werkzeuge, MCP-Server und Hooks laufen außerhalb. Die Standardeinstellungen sind weit gefasst. Lesend erreichbar ist der größte Teil des Rechners, einschließlich ",{"tag":186,"children":320},[321],"~\u002F.ssh",{"tag":186,"children":323},[324],"~\u002F.aws\u002Fcredentials",", und Umgebungsvariablen werden übernommen. Der credentials-Block schließt diese Lücken.",{"type":186,"code":327},"{\n  \"sandbox\": {\n    \"enabled\": true,\n    \"credentials\": {\n      \"files\": [\n        { \"path\": \"~\u002F.aws\u002Fcredentials\", \"mode\": \"deny\" },\n        { \"path\": \"~\u002F.ssh\", \"mode\": \"deny\" }\n      ],\n      \"envVars\": [\n        { \"name\": \"GITHUB_TOKEN\", \"mode\": \"deny\" },\n        { \"name\": \"NPM_TOKEN\", \"mode\": \"deny\" }\n      ]\n    }\n  }\n}",{"type":166,"content":329},[330,331,333],"Das ist das Beispiel aus der Sandbox-Dokumentation von Claude Code. Es sperrt das Lesen der AWS-Zugangsdatei und des SSH-Verzeichnisses und entfernt GITHUB_TOKEN und NPM_TOKEN aus der Umgebung sandboxierter Befehle. Lege es in ",{"tag":186,"children":332},[270]," ab – Projekteinstellungen können die Dateisystem-Isolation nicht ausschalten. Ein PreToolUse-Hook, der mit Code 2 beendet wird, blockiert einen Aufruf, bevor die Berechtigungsregeln greifen. Hooks laufen außerhalb der Sandbox, also behandle ihre Skripte als vertrauenswürdigen Code.",{"type":166,"content":335},[336,337,342,343,346,347,350],"Codex hat dieselbe Lücke in anderer Form, und ich habe das CLI im ",{"tag":338,"to":339,"children":340},"link","\u002Ftools\u002Fopenai-codex-cli",[341],"Codex-Review"," behandelt. Sein ",{"tag":186,"children":344},[345],"sandbox_mode"," kann read-only, workspace-write oder danger-full-access sein, und der Netzwerkzugriff bleibt aus, solange du ihn nicht aktivierst. Seine Shell-Umgebung behält Variablen mit KEY, SECRET oder TOKEN im Namen, weil ",{"tag":186,"children":348},[349],"ignore_default_excludes"," standardmäßig true ist. Setze den Wert auf false, damit diese Variablen vor deinen eigenen Filtern entfernt werden:",{"type":186,"code":352},"[shell_environment_policy]\ninherit = \"core\"\nignore_default_excludes = false\n\n[shell_environment_policy.filters]\n\"AWS_*\" = \"exclude\"",{"type":170,"level":171,"id":138,"text":139},{"type":166,"content":355},[356],"Transkripte werden am ehesten vergessen. Claude Code speichert sie standardmäßig 30 Tage im Klartext unter ~\u002F.claude\u002Fprojects\u002F, und mit cleanupPeriodDays änderst du diesen Zeitraum. Kommerzielle Konten haben dieselbe Standardaufbewahrung von 30 Tagen, und Zero Data Retention ist für qualifizierte Enterprise-Konten verfügbar. Die Befehle \u002Ffeedback, \u002Fbug und \u002Fshare senden eine Kopie deines Gesprächsverlaufs, Code inklusive, an Anthropic, und diese Berichte werden fünf Jahre aufbewahrt. Personenbezogene Daten in einem Transkript bleiben personenbezogene Daten, wo immer sie liegen, also muss deine Löschroutine sie erfassen.",{"type":166,"content":358},[359],"Die Fehlerberichte von Claude Code schwärzen bekannte Secret-Muster, aber sie betreffen nur die internen Fehler des Tools, nicht deine Prompts, Dateien oder dein Transkript. CI-Logs folgen eigenen Regeln. GitHub maskiert einen Wert nur, wenn der Runner ihn kennt, und die Maskierung beruht vor allem auf exakten Übereinstimmungen. Ein Secret, das in JSON verpackt ist, kann deshalb durchrutschen. Lege für jeden Wert ein eigenes Secret an und registriere jeden abgeleiteten Wert, etwa eine signierte oder kodierte Version.",{"type":170,"level":171,"id":141,"text":142},{"type":166,"content":362},[363],"Drei Open-Source-Scanner decken das meiste ab, was ich einsetzen würde. Sie unterscheiden sich darin, wie sie entscheiden, dass etwas ein Secret ist, und das ist wichtiger als die Feature-Liste.",{"type":365,"head":366,"rows":375},"table",[367,369,371,373],[368],"Werkzeug",[370],"Funktionsweise",[372],"Stärke",[374],"Worauf achten",[376,385,394],[377,379,381,383],[378],"gitleaks",[380],"Erkennt Passwörter, API-Schlüssel und Token in Git-Repositories. Ein Pre-Commit-Hook prüft jeden Commit, und gitleaks git prüft die Historie.",[382],"Ein Werkzeug für Hook und Historienprüfung.",[384],"Ein lokaler Hook lässt sich mit SKIP=gitleaks umgehen.",[386,388,390,392],[387],"detect-secrets",[389],"Prüft gegen eine Baseline-Datei. Die Baseline erfasst bekannte Secrets, und spätere Scans melden nur neue.",[391],"Die Einführung in ein Repository, das bereits Secrets enthält.",[393],"Die Baseline akzeptiert bestehende Secrets, also prüfe sie, bevor du sie committest.",[395,397,399,401],[396],"TruffleHog",[398],"Findet mögliche Zugangsdaten und kann sie prüfen, indem es sie gegen die API des Dienstes testet, für über 800 Secret-Typen.",[400],"Aktive von toten Zugangsdaten zu trennen.",[402],"Die Prüfung schickt jeden Kandidaten an den Anbieter, also kläre, ob das zu deinen Daten passt.",{"type":166,"content":404},[405,406,410],"Ich würde mit gitleaks anfangen, weil sein Hook aus wenigen Zeilen YAML besteht und es auch die Historie prüft. Die Release-Seite markiert v8.30.1 als neueste Version, deshalb pinnt die Konfiguration dieses Tag. Für ein Repository, das bereits Secrets enthält, lies meine ",{"tag":338,"to":407,"children":408},"\u002Ftools\u002Fdetect-secrets",[409],"detect-secrets-Review"," zu Baselines.",{"type":186,"code":412},"repos:\n  - repo: https:\u002F\u002Fgithub.com\u002Fgitleaks\u002Fgitleaks\n    rev: v8.30.1\n    hooks:\n      - id: gitleaks",{"type":166,"content":414},[415,416,419,420,423],"Führe ",{"tag":186,"children":417},[418],"pre-commit install"," einmal pro Klon aus. Die README von gitleaks dokumentiert auch den Notausgang ",{"tag":186,"children":421},[422],"SKIP=gitleaks git commit",". Ein lokaler Hook fängt ehrliche Fehler ab, und der Server braucht deshalb eine eigene Prüfung.",{"type":170,"level":171,"id":144,"text":145},{"type":166,"content":426},[427],"Der Push-Schutz von GitHub blockiert erkannte Secrets in Pushes über die Kommandozeile, in Commits, die in der GitHub-Oberfläche entstehen, in Datei-Uploads, in REST-API-Anfragen und in Interaktionen mit dem GitHub-MCP-Server, den die Dokumentation auf öffentliche Repositories beschränkt. Ein Agent kann das Remote über mehrere dieser Wege erreichen, und der Server sieht sie alle.",{"type":166,"content":429},[430],"Zwei Details bestimmen, wie viel er dich schützt. Der Push-Schutz für Benutzer ist standardmäßig aktiv, aber nur für öffentliche Repositories auf GitHub.com. Der Push-Schutz für Repositories erfordert GitHub Secret Protection und ist ausgeschaltet, bis ein Administrator ihn aktiviert. Wer Schreibrechte hat, kann eine Sperre mit einer Begründung umgehen, und jede Umgehung erzeugt einen Alarm und einen Audit-Log-Eintrag. Die delegierte Umgehung legt fest, wer das darf.",{"type":302,"variant":432,"title":433,"body":434},"tip","Zwei Einstellungen prüfen",[435],[436],"Aktiviere den Push-Schutz für jedes Repository, das ein Agent erreichen kann, lege die delegierte Umgehung auf eine kleine Gruppe fest und prüfe die Umgehungsalarme so sorgfältig wie fehlgeschlagene Builds.",{"type":170,"level":171,"id":147,"text":148},{"type":166,"content":439},[440],"Das billigste Secret zum Abfließen ist eines, das nie gespeichert wird. Mit OIDC fragt ein Workflow GitHub nach einem Token für einen einzelnen Job, und der Cloud-Anbieter prüft dessen Subject und andere Claims gegen das Vertrauen, das du eingerichtet hast. Das ausgestellte Zugriffstoken gilt nur für diesen Job. Der OWASP-Leitfaden zu Secrets empfiehlt dasselbe: kurzlebige oder dynamische Secrets bevorzugen. Der Workflow braucht eine einzige Berechtigung, um das Token anzufordern:",{"type":186,"code":442},"permissions:\n  id-token: write # This is required for requesting the JWT\n  contents: read # This is required for actions\u002Fcheckout",{"type":166,"content":444},[445,446,449,450,453,454,457,458,288,461,464],"Die GitHub-Referenz sagt, dass ",{"tag":186,"children":447},[448],"id-token: write"," dem Job nur erlaubt, das OIDC-Token abzurufen, und keinen Schreibzugriff auf andere Ressourcen gewährt. Behalte ",{"tag":186,"children":451},[452],"contents: read"," bei, solange der Job nicht pusht. Secrets werden nicht an Workflows weitergegeben, die aus einem Fork ausgelöst werden, außer ",{"tag":186,"children":455},[456],"GITHUB_TOKEN",". Das eigentliche Risiko liegt bei ",{"tag":186,"children":459},[460],"pull_request_target",{"tag":186,"children":462},[463],"workflow_run",": Der Leitfaden zur Härtung warnt, dass sie in Verbindung mit einem Checkout von nicht vertrauenswürdigem Pull-Request-Code diesem Code Schreibzugriff und Secrets geben können und dass dies ausgenutzt werden kann, um ein Repository zu übernehmen.",{"type":166,"content":466},[467,468,472],"Agenten in CI verdienen dasselbe Misstrauen. Ein Agent, der ein Issue oder einen Review-Kommentar liest, liest Text, den möglicherweise jemand anderes geschrieben hat, also sollte er keine Secrets halten, die er nicht braucht. GitHub sagt, dass jeder mit Schreibrechten alle Repository-Secrets lesen kann. Environment-Secrets können hinter erforderlichen Prüfern liegen. Zur Sandbox-Seite des Problems siehe meine ",{"tag":338,"to":469,"children":470},"\u002Fblog\u002Fsandboxing-coding-agents-ci-checklist",[471],"Checkliste zur Agenten-Sandbox",".",{"type":170,"level":171,"id":150,"text":151},{"type":166,"content":475},[476,477,472],"Ein MCP-Server hält eine Zugangsdaten und stellt dem Agenten seine Werkzeuge bereit, daher ist sein Token die eigentliche Grenze. Die Sicherheitsempfehlungen zu MCP verbieten Token Passthrough, also dass ein Server Token akzeptiert, die nicht ausdrücklich für ihn ausgestellt wurden, und sie verlangen ein Scope-Modell nach dem Prinzip minimaler Rechte. Außerdem nennen sie Log-Lecks als einen Weg, auf dem ein Angreifer ein weit gefasstes Token erlangt. Die Identitätsseite dazu steht in ",{"tag":338,"to":478,"children":479},"\u002Fblog\u002Fai-agent-identity-least-privilege",[480],"KI-Agenten sind Identitäten",{"type":166,"content":482},[483,484,487,488,491,492,495],"Auf Seite von Claude Code unterstützt ",{"tag":186,"children":485},[486],".mcp.json"," die Erweiterung ",{"tag":186,"children":489},[490],"${VAR}",", die die Dokumentation für sensible Werte wie API-Schlüssel empfiehlt, sodass die Datei im Repository einen Verweis statt des Secrets enthält. Die Dokumentation schlägt außerdem einen schreibgeschützten Datenbankbenutzer vor, damit die Abfragen von Claude keine Daten ändern können. Um alle MCP-Werkzeuge in einem Projekt abzuschalten, entfernt eine Deny-Regel ",{"tag":186,"children":493},[494],"mcp__*"," sie aus dem Kontext. Der Netzwerk-Proxy von Codex filtert laut seiner Dokumentation keine Verbindungen zu MCP-Servern.",{"type":170,"level":171,"id":153,"text":154},{"type":166,"content":498},[499],"Die Historie umzuschreiben ist Aufräumen, nicht die Lösung. GitHub erklärt, dass Commits nach einem Rewrite und Force-Push noch über Klone und Forks erreichbar sein können, über SHA-1-Hashes in Cache-Ansichten und über Pull Requests, die auf sie verweisen. Außerdem ändert ein Rewrite den Hash jedes späteren Commits, und ein Kollege, der einen alten Klon pusht, kann das Secret zurückbringen. Rotiere zuerst.",{"type":176,"ordered":501,"items":502},true,[503,505,507,509,511],[504],"Widerrufe oder rotiere die Zugangsdaten beim Anbieter, bevor du etwas anderes tust.",[506],"Prüfe das Audit-Log des Anbieters auf Nutzung seit dem Leck, und behandle jede Nutzung, die du nicht erklären kannst, als Vorfall.",[508],"Lösche das CI-Run-Log, das den Wert ausgegeben hat, wie GitHub empfiehlt, und jedes Transkript, das ihn enthält.",[510],"Wenn das Repository den Wert nicht behalten darf, schreibe die Historie mit git-filter-repo um und bitte dann jeden Klon-Besitzer, neu zu klonen.",[512],"Nimm das Muster in deinen Pre-Commit-Scanner und den Push-Schutz auf, damit das nächste Leck abgelehnt wird.",{"type":170,"level":171,"id":156,"text":157},{"type":365,"head":515,"rows":524},[516,518,520,522],[517],"Kontrolle",[519],"Wo sie liegt",[521],"Was sie verhindert",[523],"So prüfst du sie",[525,534,543,552,561,570,579,588,597],[526,528,530,532],[527],"Read-Deny-Regeln",[529],"permissions.deny in settings.json",[531],"Datei-Werkzeuge des Agenten sowie cat, head oder tail, die Secrets lesen",[533],"Lass eine Testsitzung .env lesen und erwarte eine Sperre",[535,537,539,541],[536],"Sandbox mit gesperrten Zugangsdaten",[538],"sandbox.enabled und sandbox.credentials",[540],"Lesende Shell-Zugriffe auf ~\u002F.aws und ~\u002F.ssh sowie übernommene Token",[542],"Führe \u002Fsandbox aus und prüfe, dass sie aktiv ist",[544,546,548,550],[545],"Codex-Umgebungsfilter",[547],"shell_environment_policy in config.toml",[549],"KEY-, SECRET- und TOKEN-Variablen, die Befehle erreichen",[551],"Prüfe, dass ignore_default_excludes auf false steht",[553,555,557,559],[554],"Pre-Commit-Scan",[556],"gitleaks-Hook in .pre-commit-config.yaml",[558],"Secrets in lokalen Commits",[560],"Committe einen Fake-Schlüssel auf einem Branch und erwarte eine Ablehnung",[562,564,566,568],[563],"Push-Schutz",[565],"Sicherheitseinstellungen des Repositorys",[567],"Secrets in Pushes, UI-Commits, Uploads und MCP-Aufrufen",[569],"Prüfe, dass er aktiv ist und die Umgehung eingeschränkt ist",[571,573,575,577],[572],"OIDC für den Cloud-Zugriff",[574],"id-token: write und die Vertrauensrichtlinie der Cloud",[576],"Langlebige Cloud-Schlüssel in Repository-Secrets",[578],"Lösche die Cloud-Schlüssel, sobald das Vertrauen funktioniert",[580,582,584,586],[581],"Token mit minimalen Rechten",[583],"permissions-Block in jedem Workflow",[585],"Missbrauch von GITHUB_TOKEN",[587],"Standardmäßig contents: read setzen",[589,591,593,595],[590],"Log-Hygiene",[592],"Abgeleitete Werte registriert, keine in JSON verpackten Secrets",[594],"Secrets in CI-Logs",[596],"Durchsuche ein Run-Log nach einem Testwert",[598,600,602,604],[599],"Rotations-Runbook",[601],"Konsole des Anbieters und Audit-Logs",[603],"Gültige Werte nach einem Leck",[605],"Probe es an einem Schlüssel mit geringem Wert",{"type":170,"level":171,"id":159,"text":160},{"type":176,"ordered":501,"items":608},[609,611,613,615,617],[610],"Lege Read-Deny-Regeln für .env, Secret-Ordner, ~\u002F.aws und ~\u002F.ssh an. Lösche jede .claudeignore, auf die du dich verlassen hast.",[612],"Schalte die Sandbox ein und ergänze credentials-Einträge für die Variablen und Dateien, die du tatsächlich nutzt.",[614],"Installiere gitleaks als Pre-Commit-Hook und aktiviere den Push-Schutz für jedes Repository, das ein Agent erreichen kann.",[616],"Stelle den Cloud-Zugriff in CI auf OIDC um und setze die Berechtigungen jedes Workflows auf das Minimum.",[618],"Schreibe das Rotations-Runbook, bevor du es brauchst, und probiere es an einem Schlüssel mit geringem Wert aus.",{"type":166,"content":620},[621],"Dafür brauchst du keine Plattform – du musst die Voreinstellungen ändern, ein paar Konfigurationsdateien ins Repository legen und dir bei jedem Secret die Frage stellen, ob der Agent es lesen, ausgeben oder committen könnte.",{"type":170,"level":171,"id":162,"text":163},{"type":176,"ordered":501,"items":624},[625,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,693,697,701,704,708],[626],{"tag":627,"href":36,"children":628},"a",[629],"Claude Code: Berechtigungen",[631],{"tag":627,"href":39,"children":632},[633],"Claude Code: Sandbox für Bash",[635],{"tag":627,"href":42,"children":636},[637],"Claude Code: Hooks",[639],{"tag":627,"href":45,"children":640},[641],"Claude Code: Datennutzung",[643],{"tag":627,"href":48,"children":644},[645],"Claude Code: Einstellungen",[647],{"tag":627,"href":51,"children":648},[649],"Claude Code: MCP-Server",[651],{"tag":627,"href":54,"children":652},[653],"Codex: Konfigurationsreferenz",[655],{"tag":627,"href":57,"children":656},[657],"Codex: Agent-Freigaben und Sicherheit",[659],{"tag":627,"href":60,"children":660},[661],"Codex: erweiterte Konfiguration",[663],{"tag":627,"href":63,"children":664},[665],"GitHub: Push-Schutz",[667],{"tag":627,"href":66,"children":668},[669],"GitHub: Sicherheitshärtung mit OIDC",[671],{"tag":627,"href":69,"children":672},[673],"GitHub: OpenID-Connect-Referenz",[675],{"tag":627,"href":72,"children":676},[677],"GitHub: Secrets in Actions verwenden",[679],{"tag":627,"href":75,"children":680},[681],"GitHub: Referenz zur sicheren Nutzung",[683],{"tag":627,"href":78,"children":684},[685],"GitHub: sensible Daten aus einem Repository entfernen",[687],{"tag":627,"href":81,"children":688},[689],"gitleaks: README und neueste Version",[691],{"tag":627,"href":84,"children":692},[83],[694],{"tag":627,"href":87,"children":695},[696],"detect-secrets: README und neueste Version",[698],{"tag":627,"href":90,"children":699},[700],"Model Context Protocol: Sicherheitsempfehlungen",[702],{"tag":627,"href":93,"children":703},[92],[705],{"tag":627,"href":96,"children":706},[707],"OWASP: LLM02 Offenlegung sensibler Informationen",[709],{"tag":627,"href":99,"children":710},[711],"Git: Dokumentation zu git-add",[713,792,869,951],{"slug":714,"published":715,"minutes":6,"category":7,"tags":716,"keywords":722,"about":731,"sources":744,"cover":786,"og":787,"expertise":102,"locales":788,"lang":105,"title":789,"description":790,"coverAlt":791},"works-council-ai-tools-austria-germany","2026-10-02",[717,718,719,720,721],"Works council","AI coding tools","Employee monitoring","GDPR","Co-determination",[723,724,725,726,727,728,729,730],"works council AI tools","AI coding tools works council","Betriebsrat KI Mitbestimmung","§ 87 BetrVG Überwachung","§ 96 ArbVG Kontrollmaßnahmen","AI usage logs employee monitoring","works agreement for AI tools","GDPR Article 88 employee data",[732,735,738,741],{"name":733,"url":734},"General Data Protection Regulation","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj\u002Feng",{"name":736,"url":737},"EU Artificial Intelligence Act (Regulation (EU) 2024\u002F1689)","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2024\u002F1689\u002Foj\u002Feng",{"name":739,"url":740},"Arbeitsverfassungsgesetz (Austrian Labour Constitution Act)","https:\u002F\u002Fwww.ris.bka.gv.at\u002FGeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10008329",{"name":742,"url":743},"Betriebsverfassungsgesetz (German Works Constitution Act), § 87","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbetrvg\u002F__87.html",[745,747,749,752,755,757,760,762,765,768,771,774,777,780,783],{"title":746,"url":740},"Arbeitsverfassungsgesetz (ArbVG), §§ 96 and 96a, consolidated text of 10 October 2026, RIS",{"title":748,"url":743},"Betriebsverfassungsgesetz (BetrVG), § 87, gesetze-im-internet.de",{"title":750,"url":751},"Betriebsverfassungsgesetz (BetrVG), § 90, gesetze-im-internet.de","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbetrvg\u002F__90.html",{"title":753,"url":754},"Bundesdatenschutzgesetz (BDSG), § 26, gesetze-im-internet.de","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbdsg_2018\u002F__26.html",{"title":756,"url":734},"Regulation (EU) 2016\u002F679 (GDPR), EUR-Lex",{"title":758,"url":759},"GDPR Article 5(1)(e), storage limitation, gdpr-info.eu","https:\u002F\u002Fgdpr-info.eu\u002Fart-5-gdpr\u002F",{"title":761,"url":737},"Regulation (EU) 2024\u002F1689 (AI Act), EUR-Lex",{"title":763,"url":764},"Regulation (EU) 2026\u002F1744, EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2026\u002F1744\u002Foj",{"title":766,"url":767},"AI Act Article 26, AI Act Explorer","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F26\u002F",{"title":769,"url":770},"AI Act Annex III, AI Act Explorer","https:\u002F\u002Fartificialintelligenceact.eu\u002Fannex\u002F3\u002F",{"title":772,"url":773},"BAG, 1 ABR 16\u002F23 (July 2024), headset system, gesetze.co","https:\u002F\u002Fgesetze.co\u002Furteile\u002F1_ABR_16-23",{"title":775,"url":776},"ArbG Hamburg, 24 BVGa 1\u002F24: law-firm summary by CMS","https:\u002F\u002Fcms.law\u002Fde\u002Fdeu\u002Flegal-updates\u002Fkein-mitbestimmungsrecht-des-betriebsrats-bei-chatgpt-co",{"title":778,"url":779},"ArbG Hamburg, 24 BVGa 1\u002F24: law-firm summary by Gleiss Lutz","https:\u002F\u002Fwww.gleisslutz.com\u002Fde\u002Fknow-how\u002Farbeitsgericht-hamburg-zu-chatgpt-kein-mitbestimmungsrecht-des-betriebsrats",{"title":781,"url":782},"Claude Code documentation: monitoring usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmonitoring-usage",{"title":784,"url":785},"GitHub Docs: Copilot metrics data reference","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fmetrics-data","\u002Fimages\u002Fblog\u002Fworks-council-ai-tools-austria-germany\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fworks-council-ai-tools-austria-germany\u002Fog.jpg",[104,105,106],"KI-Coding-Tools und Betriebsrat: wann Nutzungsprotokolle als Überwachung gelten","Nutzungsprotokolle können ein KI-Tool zum Überwachungssystem machen. Was § 96 ArbVG und § 87 BetrVG verlangen und was du vor dem Rollout klären solltest.","Coverbild zu Betriebsräten und KI-Tools: Nutzungsprotokolle passieren eine Zustimmungsschranke, bevor ein Entwicklerplatz aktiviert wird.",{"slug":793,"published":794,"minutes":795,"category":7,"tags":796,"keywords":801,"about":810,"sources":822,"cover":863,"og":864,"expertise":102,"locales":865,"lang":105,"title":866,"description":867,"coverAlt":868},"dpia-llm-feature-worked-example","2026-10-01",12,[797,720,798,799,800],"DPIA","LLM security","Data protection","AI Act",[802,803,804,805,806,807,808,809],"DPIA for LLM features","data protection impact assessment AI assistant","GDPR Article 35 AI","DSFA-V Austria AI","LLM customer support GDPR","prompt injection data leak GDPR","AI Act Article 50 chatbot","DPIA template LLM",[811,813,816,819],{"name":733,"url":812},"https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002F?uri=CELEX:32016R0679",{"name":814,"url":815},"WP29 guidelines on data protection impact assessment (WP248 rev.01)","https:\u002F\u002Fec.europa.eu\u002Fnewsroom\u002Farticle29\u002Fitems\u002F611236\u002Fen",{"name":817,"url":818},"OWASP LLM01:2025 Prompt Injection","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm01-prompt-injection\u002F",{"name":820,"url":821},"Regulation (EU) 2024\u002F1689 (AI Act)","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2024\u002F1689\u002Foj",[823,824,826,829,832,835,838,841,844,847,849,851,854,857,860,861],{"title":756,"url":812},{"title":825,"url":815},"WP29 guidelines on DPIA, WP248 rev.01 (European Commission item page)",{"title":827,"url":828},"WP248 rev.01 PDF, adopted 4 April 2017 and revised 4 October 2017","https:\u002F\u002Fec.europa.eu\u002Fnewsroom\u002Fjust\u002Fdocument.cfm?doc_id=47711",{"title":830,"url":831},"EDPB Guidelines 07\u002F2020 on the concepts of controller and processor","https:\u002F\u002Fwww.edpb.europa.eu\u002Fsystem\u002Ffiles\u002F2023-10\u002Fedpb_guidelines_202007_controllerprocessor_final_en.pdf",{"title":833,"url":834},"EDPB Opinion 28\u002F2024 on AI models, adopted 17 December 2024","https:\u002F\u002Fwww.edpb.europa.eu\u002Fsystem\u002Ffiles\u002F2024-12\u002Fedpb_opinion_202428_ai-models_en.pdf",{"title":836,"url":837},"EDPB news release on Opinion 28\u002F2024","https:\u002F\u002Fwww.edpb.europa.eu\u002Fnews\u002Fedpb-opinion-on-ai-models-gdpr-principles-support-responsible-ai_en",{"title":839,"url":840},"EDPB, Report of the work undertaken by the ChatGPT Taskforce, 23 May 2024","https:\u002F\u002Fwww.edpb.europa.eu\u002Fsystem\u002Ffiles\u002F2024-05\u002Fedpb_20240523_report_chatgpt_taskforce_en.pdf",{"title":842,"url":843},"DSFA-V, BGBl. II Nr. 278\u002F2018 (RIS)","https:\u002F\u002Fwww.ris.bka.gv.at\u002Feli\u002Fbgbl\u002FII\u002F2018\u002F278",{"title":845,"url":846},"DSFA-AV, BGBl. II Nr. 108\u002F2018 (RIS)","https:\u002F\u002Fwww.ris.bka.gv.at\u002Feli\u002Fbgbl\u002FII\u002F2018\u002F108",{"title":848,"url":818},"OWASP Top 10 for LLM Applications 2025: LLM01 Prompt Injection",{"title":850,"url":96},"OWASP Top 10 for LLM Applications 2025: LLM02 Sensitive Information Disclosure",{"title":852,"url":853},"OpenAI, Data controls in the OpenAI platform","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fyour-data",{"title":855,"url":856},"Commission Implementing Decision (EU) 2023\u002F1795 on the EU–US Data Privacy Framework","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Fdec_impl\u002F2023\u002F1795\u002Foj\u002Feng",{"title":858,"url":859},"CJEU, Case C-184\u002F20, OT v Vyriausioji tarnybinės etikos komisija","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002F?uri=CELEX:62020CJ0184",{"title":761,"url":821},{"title":862,"url":764},"Regulation (EU) 2026\u002F1744 (Digital Omnibus on AI), EUR-Lex","\u002Fimages\u002Fblog\u002Fdpia-llm-feature-worked-example\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fdpia-llm-feature-worked-example\u002Fog.jpg",[104,105,106],"DSFA für einen LLM-Support-Assistenten: ein Beispiel nach Art. 35 DSGVO","Eine DSFA nach Art. 35 DSGVO für einen KI-Assistenten, der Kundenmails mit Bestelldaten beantwortet: wann sie nötig ist, welche Risiken bestehen und wer sie trägt.","Coverbild für die DSFA eines LLM-Support-Assistenten: eine Pipeline aus sechs Schritten, von der Hochrisiko-Prüfung bis zum Überprüfungstermin.",{"slug":870,"published":871,"minutes":795,"category":7,"tags":872,"keywords":877,"about":888,"sources":898,"cover":945,"og":946,"expertise":102,"locales":947,"lang":105,"title":948,"description":949,"coverAlt":950},"eu-ai-act-gpai-high-risk-2026","2026-09-24",[873,874,875,876],"EU AI Act","GPAI","High-risk AI","AI compliance",[878,879,880,881,882,883,884,885,886,887],"EU AI Act high-risk deadline","AI Act digital omnibus","AI Act GPAI obligations","AI Act provider vs deployer","EU AI Act 2 December 2027","GPAI code of practice","AI literacy Article 4","AI Act compliance checklist","AI Act OpenAI API provider deployer","AI Act mid-size company",[889,892,895],{"name":890,"url":891},"Artificial Intelligence Act","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FArtificial_Intelligence_Act",{"name":893,"url":894},"General-purpose artificial intelligence","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFoundation_model",{"name":896,"url":897},"European Commission","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEuropean_Commission",[899,900,901,904,907,910,913,916,919,922,924,927,930,933,936,939,942],{"title":761,"url":821},{"title":862,"url":764},{"title":902,"url":903},"AI Act Explorer: Digital Omnibus on AI, full amending text","https:\u002F\u002Fartificialintelligenceact.eu\u002Fai-act-explorer\u002Fdigital-omnibus\u002F",{"title":905,"url":906},"European Commission: AI Act regulatory framework and timeline","https:\u002F\u002Fdigital-strategy.ec.europa.eu\u002Fen\u002Fpolicies\u002Fregulatory-framework-ai",{"title":908,"url":909},"European Commission: Guidelines for providers of general-purpose AI models","https:\u002F\u002Fdigital-strategy.ec.europa.eu\u002Fen\u002Fpolicies\u002Fguidelines-gpai-providers",{"title":911,"url":912},"European Commission: Q&A on the guidelines for GPAI providers","https:\u002F\u002Fdigital-strategy.ec.europa.eu\u002Fen\u002Ffaqs\u002Fguidelines-obligations-general-purpose-ai-providers",{"title":914,"url":915},"European Commission: The General-Purpose AI Code of Practice","https:\u002F\u002Fdigital-strategy.ec.europa.eu\u002Fen\u002Fpolicies\u002Fcontents-code-gpai",{"title":917,"url":918},"European Commission: AI literacy Questions and Answers","https:\u002F\u002Fdigital-strategy.ec.europa.eu\u002Fen\u002Ffaqs\u002Fai-literacy-questions-answers",{"title":920,"url":921},"AI Act Article 25: Responsibilities along the AI value chain","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F25\u002F",{"title":923,"url":767},"AI Act Article 26: Obligations of deployers of high-risk AI systems",{"title":925,"url":926},"AI Act Article 27: Fundamental rights impact assessment","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F27\u002F",{"title":928,"url":929},"AI Act Article 53: Obligations for providers of general-purpose AI models","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F53\u002F",{"title":931,"url":932},"AI Act Article 99: Penalties","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F99\u002F",{"title":934,"url":935},"AI Act Article 101: Fines for providers of general-purpose AI models","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F101\u002F",{"title":937,"url":938},"Gibson Dunn: EU AI Act Omnibus Agreement, postponed high-risk deadlines (27 May 2026)","https:\u002F\u002Fwww.gibsondunn.com\u002Feu-ai-act-omnibus-agreement-postponed-high-risk-deadlines-and-other-key-changes\u002F",{"title":940,"url":941},"Orrick: EU AI Act Update, Digital Omnibus finalizes 8 compliance changes (29 July 2026)","https:\u002F\u002Fwww.orrick.com\u002Fen\u002FInsights\u002F2026\u002F07\u002FEU-AI-Act-Update-Digital-Omnibus-Finalizes-8-Compliance-Changes",{"title":943,"url":944},"K&L Gates: EU Digital Omnibus on AI enters into force (31 July 2026)","https:\u002F\u002Fwww.klgates.com\u002FEU-Digital-Omnibus-on-AI-Enters-Into-Force-7-31-2026","\u002Fimages\u002Fblog\u002Feu-ai-act-gpai-high-risk-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Feu-ai-act-gpai-high-risk-2026\u002Fog.jpg",[104,105,106],"EU AI Act jenseits von Artikel 50: GPAI, Hochrisiko-Fristen und To-dos","Der AI Act nach dem Digital Omnibus: GPAI-Pflichten, Hochrisiko-Fristen (2.12.2027 und 2.8.2028), Anbieter vs. Betreiber bei OpenAI- und Anthropic-APIs, KI-Kompetenz.","Diagramm: die AI-Act-Zeitleiste von Februar 2025 bis August 2028, aufgefächert in GPAI-Pflichten, Hochrisiko-Systeme, Anbieter- und Betreiberrollen und KI-Kompetenz.",{"slug":952,"published":953,"minutes":795,"category":7,"tags":954,"keywords":960,"about":969,"sources":976,"cover":991,"og":992,"expertise":102,"locales":993,"lang":105,"title":994,"description":995,"coverAlt":996},"eu-ai-act-article-50-developer-checklist","2026-09-22",[873,955,956,957,958,959],"Article 50","AI transparency","Digital Omnibus","AI literacy","Compliance",[873,961,962,963,964,965,966,967,884,968],"EU AI Act developers","Article 50 AI Act","AI transparency obligations","AI Act chatbot disclosure","Digital Omnibus AI Act","AI Act Article 50(2) watermarking","AI Act deepfake labelling","does the AI Act apply to my app",[970,971,973],{"name":890,"url":891},{"name":972,"url":764},"Regulation (EU) 2026\u002F1744",{"name":974,"url":975},"AI Act Explorer","https:\u002F\u002Fartificialintelligenceact.eu\u002Fai-act-explorer\u002F",[977,980,983,986,988],{"title":978,"url":979},"Article 50: Transparency Obligations for Providers and Deployers of Certain AI Systems","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":981,"url":982},"Regulation (EU) 2026\u002F1744 (Digital Omnibus on AI), Official Journal, 24 Jul 2026","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2026\u002F1744\u002Foj\u002Feng",{"title":984,"url":985},"Faegre Drinker: Commission confirms Transparency Code of Practice as adequate and publishes final Article 50 Guidelines (30 Jul 2026)","https:\u002F\u002Fwww.faegredrinker.com\u002Fen\u002Finsights\u002Fpublications\u002F2026\u002F7\u002Feu-ai-act-commission-confirms-transparency-code-of-practice-as-adequate-and-publishes-final-version-of-its-guidelines-on-transparency-obligations",{"title":987,"url":938},"Gibson Dunn: EU AI Act Omnibus Agreement, postponed high-risk deadlines and other key changes (27 May 2026)",{"title":989,"url":990},"RTR KI-Servicestelle: AI Act (Austria)","https:\u002F\u002Fwww.rtr.at\u002Frtr\u002Fservice\u002Fki-servicestelle\u002Fai-act\u002F","\u002Fimages\u002Fblog\u002Feu-ai-act-article-50-developer-checklist\u002Fcover.webp","\u002Fimages\u002Fblog\u002Feu-ai-act-article-50-developer-checklist\u002Fog.jpg",[104,105,106],"EU AI Act Article 50: was Entwickler seit 2. August 2026 tun müssen","EU AI Act Article 50 für Entwickler: Offenlegung von KI-Interaktion, maschinenlesbare Kennzeichnung, Deepfakes, Anbieter oder Betreiber, Checkliste.","Eine sechsteilige Zeitachse von Februar 2025 bis August 2028 mit den Meilensteinen des AI Act, wobei der Article-50-Schritt im August 2026 hervorgehoben ist",1791636873363]