Workban Guard
Alles, was Workban Guard prüft.
Jede Regel und jeder Detektor, direkt aus dem Code. Regeln prüfen jeden Befehl und Dateizugriff, bevor er läuft. Detektoren prüfen jede neue Zeile, nachdem sie geschrieben ist. Dazu kommt, was der Agent liest.
- 39 Regeln
- 33 Detektoren
- 7 Regeln fürs Lesen
- Läuft lokal
Vor der Ausführung
Prüft jeden Befehl und Dateizugriff. Sperrt heißt, die Aktion läuft nicht. Fragt nach heißt, du entscheidest.
Dateisystem
fs.rm-catastrophicSperrtLöschen oder Verschieben von /, Home, Systemverzeichnissen, dem Projekt selbst oder .git; Datenträger formatieren (mkfs, dd of=/dev/…, diskutil erase)fs.rm-outsideFragt nachLöschen, Leeren oder Überschreiben außerhalb des Projekts (Temp-Verzeichnisse ausgenommen)fs.rm-trackedFragt nachRekursives Löschen von Verzeichnissen mit versionierten Dateien oder unbekannten Zielen (rm -r, rsync --delete, tar --remove-files)fs.find-deleteFragt nachfind -delete/find -exec rmaußerhalb von Artefakt-Verzeichnissen
Git
git.discard-changesFragt nachreset --hard/--merge, checkout/restore von Dateien, clean -f, rm -f, stash drop/clear, branch -D/-f/-Mgit.force-pushSperrtForce-Push oder --mirror auf geschützte Branches, Löschen geschützter Branchesgit.force-push-branchFragt nachForce-Push (auch --force-with-lease) auf andere Branchesgit.push-deleteFragt nachLöschen eines Remote-Branches,git push --prunegit.push-protectedSperrtDirekter Push auf main/mastergit.no-verifySperrtHooks oder Signatur umgehen (--no-verify, -n, --no-gpg-sign, HUSKY=0, core.hooksPath)git.amendFragt nachcommit --amendgit.history-rewriteFragt nachfilter-branch, filter-repo, reflog expire/delete, update-ref -d, gc --prune=nowgit.add-envSperrtgit addvon .env-, Schlüssel- oder Zugangsdaten-Dateiengit.commit-secretsSperrtgit commit, wenn die Änderungen Secrets enthalten
Datenbank
db.destructiveFragt nachsupabase db reset/migration down/storage rm, DROP/TRUNCATE/DROP COLUMN, DELETE/UPDATE ohne WHERE (auch per Datei, Umleitung oder Pipe), prisma migrate reset, drizzle-kit push --force, dropdb, flushalldb.remote-destructiveSperrtEntfernte Datenbank zurücksetzen oder löschen (supabase db reset/migration down --linked, projects delete, backups restore)db.volume-wipeFragt nachdocker volume rm/prune, compose down -v, compose rm -v, podman system reset, supabase stop --no-backupmigration.edit-appliedFragt nachÄndern oder Löschen bestehender Migrationsdateien,supabase migration squash
Secrets
secrets.read-envSperrtLesen oder Hochladen von .env, Schlüsseln, ~/.ssh, ~/.aws/credentials (Read-Tool, Shell, Inline-Code, curl -F/-T, scp)secrets.env-writeFragt nachSchreiben oder Leeren von .env-Dateiensecrets.write-literalSperrtEdit, der ein Secret-Literal (API-Key, Token, Private Key) in Code schreibtsecrets.printSperrtSecrets ausgeben: env/printenv ohne Namen, echo $TOKEN, gh auth token, supabase projects api-keys, op read, aws secretsmanager, security -w, kubectl get secret -o yaml …
Pakete
deps.not-foundSperrtPaket existiert nicht in npm/PyPI (halluziniert, „Slopsquatting“)deps.typosquatFragt nachName liegt 1 bis 2 Zeichen neben einem der 5000 populärsten Paketedeps.too-newFragt nachErste Version jünger alssupplyChain.minAgeDays(14 Tage)deps.low-adoptionFragt nachWeniger alssupplyChain.minWeeklyDownloads(500) Downloads pro Woche (npm)deps.install-scriptsHinweisPaket führt bei der Installation Skripte aus (preinstall/install/postinstall)deps.deprecatedHinweisPaket bzw. Version ist als deprecated markiert
Deploys und Cloud
deploy.anyFragt nachDeploys und Releases: vercel --prod/env add, supabase db push/functions deploy/functions delete/config push, gh pr merge/repo edit --visibility, terraform apply, kubectl apply, npm publish …remote.deleteFragt nachLöschen in Cloud-Diensten: aws s3 rm/rb/sync --delete, gsutil/gcloud storage rm, rclone purge/sync/delete, gh secret delete/api -X DELETE, vercel rm/env rm/domains rm, fly apps destroy …container.destructiveFragt nachdocker/podman system/image/container prune, rm/rmi mit $(…)-Liste, compose down --rmi
System und Shell
net.pipe-to-shellFragt nachcurl/wget direkt in eine Shell oder einen Interpretersys.privilegedFragt nachsudo/doas, chmod 777, chown -R außerhalb des Projektssys.persistenceFragt nachSchreiben in Shell-Startdateien, ~/.ssh, LaunchAgents, /etc/sudoers; crontab, launchctl loadshell.unverifiedFragt nachNicht prüfbar: eval/source mit erst zur Laufzeit erzeugtem Code, unbekannte Ausgabe in eine Shell oder einen Interpreter gepipt, zu tief verschachtelt
Selbstschutz und Modi
self.protectSperrtÄnderungen an Workban-Guard-Config, -Zustand und installierten Plugins;wbg mode/approve/allow/trust/pausedurch den Agentenself.agent-configFragt nachÄnderungen an Claude-/Codex-Einstellungen (Hooks, Rechte), an .git/hooks und .git/config,git config core.fsmonitor/sshCommandmode.plan-readonlySperrtIm Plan-Modus: Edits und verändernde Befehle (Plandateien ausgenommen)mode.autopilot-outsideSperrtIm Autopilot: Schreiben außerhalb des Projekts (Temp ausgenommen)
Nach jedem Edit
Prüft nur neue Zeilen, nicht den Altbestand. Einen Fehler behebt der Agent, bevor er weitermacht. Ein Hinweis bleibt deine Entscheidung.
Sicherheit
sec.secret-literalFehlerSecret-Literal im Code (API-Keys, Tokens, Private Keys, Service-Role-JWT, DB-URL mit Passwort)sec.evalFehlereval,new Function,vm.runIn…(JS) bzw.eval/exec(Python)sec.shell-injectionFehlerShell-Befehle aus Template-Strings/Konkatenation,shell: true,shell=True,os.system(f"…")sec.sql-concatFehlerSQL aus Template-Strings oder Konkatenation statt Parameternsec.xssHinweisdangerouslySetInnerHTML,innerHTML =,v-html,document.writesec.tls-offFehlerTLS-Prüfung abgeschaltet (rejectUnauthorized: false,verify=False…)sec.cors-wildcardHinweisCORS für alle Origins (*)sec.weak-randomHinweisMath.random()für Tokens, Passwörter, IDssec.weak-hashFehlerMD5/SHA-1 für Passwörtersec.cookie-flagsHinweisCookie ohnehttpOnly/securesec.debug-prodHinweisDebug-Modus in Produktions-Konfigurationsec.open-ingressHinweis0.0.0.0/0bzw.::/0in Infrastruktur-Konfiguration
Supabase
supa.service-role-clientFehlerService-Role-Key in Client-Codesupa.rls-missingFehlerMigration legt Tabelle ohneENABLE ROW LEVEL SECURITYansupa.get-session-authHinweisgetSession()für Autorisierung in Server-/Edge-Code stattgetUser()supa.public-bucketHinweisÖffentlicher Storage-Bucket
Personendaten
pii.emailHinweisE-Mail-Adresse, die einer echten Person gehören kann, in Code oder Testdatenpii.ibanHinweisIBAN mit gültiger Prüfziffer; bekannte Musternummern bleiben außen vorpii.cardHinweisKartennummer mit gültiger Prüfziffer; bekannte Testnummern bleiben außen vor
Code-Qualität
slop.ts-anyFehleranyin TypeScript (Annotation,as any,<any>,any[])slop.ts-suppressFehler@ts-ignore,@ts-nocheck,@ts-expect-errorohne Begründungslop.lint-disableFehlereslint-disable,# noqa,# type: ignore,swiftlint:disable,//nolint,@Suppressslop.todo-no-issueHinweisTODO/FIXME ohne Issue-Referenz(#123)slop.placeholderFehlerPlatzhalter statt Implementierung („implementation here“, „not implemented“,todo!())slop.empty-catchFehlerLeerercatch,.catch(() => {}),except: passslop.console-logHinweisconsole.log/console.debugin Produktionscodeslop.commented-codeHinweisDrei oder mehr auskommentierte Code-Zeilen am Stückslop.test-focusFehler.only,.skip,fit,xit,@pytest.mark.skip,@Disabledin Testsslop.test-tautologyFehlerAssertions, die immer bestehen (expect(true).toBe(true))slop.test-no-assertHinweisTestdatei mit Tests, aber ohne Assertionslop.file-sizeHinweisCode-Datei wächst über 300 Zeilenslop.kotlin-bangHinweis!!in Kotlin-Produktionscodewbg.suppression-addedHinweisNeuewbg-ignore-Unterdrückung (wird im Review sichtbar)
Nach dem Lesen
Prüft Dateien, Befehlsausgaben, Webseiten und MCP-Antworten. Gelesen ist der Text dann schon, darum sperrt hier nichts: Agent und Nutzer bekommen einen Hinweis.
Prompt Injection
inject.overrideHinweisFordert auf, frühere Anweisungen zu ignoriereninject.personaHinweisVergibt dem Agenten eine neue Rolle oder neue Systemanweisungeninject.agent-addressHinweisSpricht KI-Agenten direkt an und gibt ihnen einen Auftraginject.concealHinweisFordert auf, dem Nutzer etwas zu verschweigeninject.exfiltrateHinweisEnthält einen Auftrag, Secrets nach außen zu sendeninject.role-markerHinweisGibt sich mit Steuerzeichen eines Chat-Protokolls als System oder Werkzeug ausinject.hidden-textHinweisVersteckt Text in unsichtbaren Zeichen oder dreht die Leserichtung um
Probier es mit deiner nächsten Aufgabe.
Workban ist kostenlos. Dein Workspace steht in einer Minute, und die erste Aufgabe erscheint, sobald dein Agent loslegt.