Sandboxed Execution for Coding Agents Trial
Überblick
Sandboxed Execution für Coding-Agenten ist die Praxis, Agenten innerhalb isolierter Umgebungen mit eingeschränktem Dateisystemzugriff, kontrollierter Netzwerkverbindung und begrenztem Ressourcenverbrauch auszuführen, sodass das Installieren von Paketen, das Ausführen von Builds und das Ausführen von Shell-Befehlen weder den Rechner des Entwicklers noch Credentials oder Produktionssysteme erreichen kann (Thoughtworks Radar). Die Rahmung hat sich in diesem Quartal von generischen "Sandbox-Modus"-Schaltern zu Agent-Workflow-Sandboxes verschoben: Umgebungen, die gut genug sind, um die reale Ausführungsfläche für die gesamte Aufgabe eines Agenten zu sein, einschließlich Tests. GitHub Agentic Workflows hat in Version 0.82.9 microVM-isolierte Sandboxes mit einem privaten Container-Daemon hinzugefügt, und in der Referenz-Demo führte ein Agent die Testcontainers-Suite eines Java-21-Services gegen PostgreSQL aus, fand einen Bug bei der Groß-/Kleinschreibung im E-Mail-Handling, fixte ihn und öffnete einen Entwurfs-PR vollständig innerhalb der Sandbox (gh-aw sandboxes). Das ist Isolation auf CI-Niveau, keine lokale Komfortfunktion.
Die zweite Verschiebung betrifft die Fehlermodi. Der Review der Cloud Security Alliance zu Pillar Securitys "Week of Sandbox Escapes" gegen Cursor, Codex CLI, Gemini CLI und Antigravity ergab, dass keines der sieben offengelegten Probleme die Sandbox selbst durchbrach: In jedem Fall blieb der Agent innerhalb der Box und hielt sich an die Regeln, schrieb aber eine Hook-Konfiguration, einen Virtual-Environment-Interpreter, einen Git-Config-Eintrag oder eine Task-Definition, die ein vertrauenswürdiges, unsandboxtes Tool nach Ende des Agenten-Turns konsumierte (CSA research note). Zugleich erlaubte die GitLost-Schwachstelle in GitHub Agentic Workflows einem nicht authentifizierten Angreifer, indirekte Prompts in einem präparierten öffentlichen GitHub Issue zu verstecken und private Repository-Daten abzugreifen, ohne dass Coding-Kenntnisse oder Credentials erforderlich waren (SecurityWeek). Sandbox-Grenzen stehen gerade deshalb im Zentrum, weil Injection inzwischen eine routinemäßige Eingabebedingung und kein Randfall mehr ist.
Der Eintrag bleibt in Trial. Die Fähigkeit sollte Standard sein statt eine optionale Erweiterung, aber der Lösungsraum ist noch breit und die Garantien uneinheitlich: eingebaute Agent-Sandbox-Modi, Dev Containers, wegwerfbare microVMs, die bei jedem Lauf zurückgesetzt werden, zustandsbehaftete Umgebungen mit Checkpoint und Restore, Linux bubblewrap und macOS sandbox-exec liegen alle an unterschiedlichen Punkten im Trade-off zwischen ephemer und persistent sowie der Stärke der Isolation (Thoughtworks Radar). Pillar Securitys Analyse von 14 Sandbox-Lösungen kam zu dem Schluss, dass jede Isolationsstufe einen Fehlermodus hat und dass die Eindämmung des Blast Radius nur funktioniert, wenn Teams wissen, wovon sie isolieren und welche Credentials darin eingebunden sind (sandbox selection as threat modeling). Trial, die Grenze validieren, dann standardisieren.
Adoptionssignale
- GitHub Agentic Workflows hat in 0.82.9 Sandbox-Support ausgeliefert und verwendet eine microVM als primäre Grenze — jede Sandbox erhält ihren eigenen Kernel, ihr eigenes Dateisystem, ihren eigenen Netzwerk-Stack und einen privaten Daemon, wobei nur der Repository-Workspace mit dem Host-Runner geteilt wird — und erzwingt ein geteiltes Vertrauensmodell: breite Shell- und sudo-Rechte innerhalb der Sandbox, strikte Netzwerk-Allowlists, begrenzte Token-Scopes und ein Safe-Output-Job, der PR-Änderungen auf
src/**beschränkt (gh-aw sandboxes). - OpenAIs Agents-SDK-Release vom April 2026 fügte produktionsreife Sandbox-Ausführung mit persistenten isolierten Containern hinzu, Unterstützung für acht Provider (E2B, Modal, Docker, Vercel, Cloudflare, Daytona, Runloop und Blaxel) sowie ein modell-natives Harness mit Dateisystem-Tools und Credential-Isolationsfunktionen (OpenAI Agents SDK sandbox).
- Dasselbe Release führte am 15. April 2026 ein
SandboxAgent-Harness und einenUnixLocalSandboxClientfür eingeschränkte Workspaces ein, während Cloudflare am 24. März 2026 seinen Dynamic Worker Loader in Beta für ephemere Low-Latency-Sandboxes innerhalb von Workers öffnete, und ein Kubernetes-SIG-Apps-Agent-Sandbox-Projekt ist bereits in Arbeit (sandboxing strategies). - LangSmith Sandboxes erreichte am 13. Mai 2026 GA-Status, wobei jede Sandbox als hardware-virtualisierter microVM-Kernel isoliert von anderen Sandboxes läuft, zuzüglich Snapshots, Copy-on-Write-Forks, Blueprints für vorgewärmte Umgebungen, Service-URLs, einer CLI und einem Auth-Proxy — womit Sandboxes als vollständige Agent-Ausführungsplattform positioniert werden statt nur als Eval-Grenze (LangSmith Sandboxes GA).
- AWS dokumentiert ein Pattern, das Lambda MicroVMs, das Agent Toolkit for AWS und Policy in Amazon Bedrock AgentCore kombiniert, damit Coding-Agenten mit granularer Governance bauen, testen und deployen können, und weist darauf hin, dass heute die meiste Agenten-Arbeit noch mit den Berechtigungen ausgeführt wird, die der Entwickler ohnehin besitzt (AWS Compute Blog).
- Docker Sandboxes gibt jeder Sandbox eine dedizierte microVM mit einem vollständig privaten Docker-Daemon, und E2B nutzt Firecracker-microVMs, sodass eine Kernel-Schwachstelle im Gast den Host nicht erreichen kann; Coding-Agenten wie Claude Code, Codex und OpenCode sind explizit dafür ausgelegt, innerhalb von Sandboxes zu laufen statt neben einer ungeschützten Umgebung (Firecrawl).
- Um die Sandbox herum entstehen Supervisions- und Detektionsschichten statt innerhalb des Agenten: grith 0.3.2 wird als OS-Level-Supervisor auf Linux ausgeliefert, der ptrace mit einem seccomp-BPF-Pre-Filter nutzt, um Datei-, Prozessausführungs- und Netzwerk-Syscalls abzufangen und sie über 18 deterministische Filter zu bewerten, ohne LLM im Enforcement-Pfad (grith is live).
- Das Open-Source-Projekt Sage rahmt dies als "Agent Detection & Response" und fängt Bash-Befehle, URL-Abrufe und Dateischreibvorgänge über native Hooks in Claude Code, Cursor/VS Code und OpenClaw ab, mit URL-Reputationsprüfungen, YAML-Bedrohungsdefinitionen, npm/PyPI-Supply-Chain-Prüfungen und Plugin-Scanning beim Session-Start (Help Net Security).
- Anbieter-Sicherheitsleitfäden behandeln Agenten inzwischen als Computer-Use-Agenten: NVIDIA weist darauf hin, dass Kommandozeilen-Tools mit denselben Berechtigungen und Entitlements wie der Nutzer laufen, samt aller damit verbundenen Risiken (NVIDIA guidance).
Risiken
- Vertrauensübergaben, nicht Wände, sind der Ort, an dem Escapes passieren. Jeder der sieben offengelegten Escapes nutzte die Lücke zwischen dem, was die Sandbox einschränkte, und dem, was eine vertrauenswürdige Komponente außerhalb später las, ausführte oder scannte; Cursors Schwachstelle bei workspace-kontrollierter Hook-Ausführung wurde als CVE-2026-48124 mit CVSS 8.5 erfasst und in 3.0.0 behoben, und OpenAI patchte einen verwandten Allowlist-Bypass in der Codex CLI, genannt "GitPwned", in 0.95.0 (CSA research note).
- Reaktionszeiten der Anbieter variieren. Google klassifizierte zwei Antigravity-spezifische Befunde als "andere gültige Sicherheitslücken", stufte deren Schweregrad als schwer ausnutzbar herab und hatte zum Zeitpunkt der Offenlegung noch keine Fixes ausgeliefert — sodass Ihr Remediation-Zeitplan nicht vollständig in Ihrer Hand liegt (CSA research note).
- Prompt Injection erreicht agentische CI über gewöhnliche Eingaben. GitLost benötigte lediglich ein in einem öffentlichen Repository geöffnetes Issue, um einen KI-gestützten Workflow dazu zu bringen, private Repository-Daten offenzulegen, ohne dass Zugriff oder Credentials erforderlich waren (SecurityWeek).
- Auto-Approve bricht das Berechtigungsmodell zusammen. Dutzende Approval-Prompts pro Stunde zu überprüfen ist kein Workflow, weshalb Teams Auto-Approve aktivieren — und damit wird die Sicherheitsentscheidung von demselben probabilistischen Modell getroffen, das eine vergiftete README oder eine Prompt Injection steuern kann (grith is live).
- Container allein sind keine Produktionsgrenze. Reale Supply-Chain-Angriffe und Kernel-Exploits wie der Shai-Hulud-npm-Wurm und die Copy-Fail-CVE machen Container- oder Eval-Grenzen unzureichend für die Ausführung nicht vertrauenswürdigen, modell-generierten Codes (LangSmith Sandboxes GA).
- Eingebundene Credentials heben Isolation auf. Isolation begrenzt den Blast Radius nur, wenn Teams verstehen, wovon sie isolieren und welche Credentials innerhalb der Sandbox eingebunden sind, und jede Isolationsstufe unter den 14 untersuchten Lösungen hat einen Fehlermodus (sandbox selection as threat modeling).
- Persistente Sandboxes können vergiftet werden. Forscher haben Risiken bei Konfigurations-Persistenz und Poisoning dokumentiert, bei denen Angreifer vertrauenswürdige Agent-Dateien innerhalb von Coding- und Agent-Sandboxes verändern, um zukünftiges Verhalten zu beeinflussen (Augment Code).
- Scoping ist der schwierige Teil, nicht das Aktivieren der Sandbox. Code-Ausführung macht Runtime-Zugriff zu einer Sicherheitsgrenze, und diese Grenze funktioniert nur, wenn Dateisystem-, Netzwerk-, Secret- und Tool-Zugriff jeweils bewusst begrenzt sind (smaller computer analysis).
- Containment ist nicht Korrektheit. Eine Sandbox begrenzt Ausführungseffekte, aber generierte Änderungen erfordern weiterhin menschliche Review, Tests, statische Analyse, Dependency-Scanning und Branch-Schutz, bevor sie die Sandbox verlassen.
Vorteile & Nachteile
Vorteile
- MicroVM-basierte Agent-Sandboxes geben jedem Agenten inzwischen einen eigenen Kernel, ein eigenes Dateisystem, einen eigenen Netzwerk-Stack und einen privaten Container-Daemon, sodass ein Agent echte Integrationstests gegen echte Datenbanken ausführen kann, ohne den Host-Runner oder Produktionssysteme zu berühren.
- Das Tooling ist von herstellerspezifischen Sandbox-Flags zu einer portablen Schicht gereift: Managed Platforms (LangSmith Sandboxes, AWS Lambda MicroVMs) und Multi-Provider-SDK-Integrationen bedeuten, dass Teams einen einheitlichen Isolationsvertrag über mehrere Agenten und Frameworks hinweg standardisieren können.
- Sandboxes machen Agenten-Autonomie zu überprüfbarem Output — Diffs, Logs, Testergebnisse und Entwurfs-PRs, begrenzt durch Netzwerk-Allowlists, Token-Scopes und Output-Filter —, wodurch Teams größere Autonomie gewähren können, ohne größeren Zugriff zu gewähren.
Nachteile
- Dokumentierte Escapes haben nicht die Sandbox selbst durchbrochen; die Agenten blieben innerhalb der Grenze und schrieben Dateien, die unsandboxte Tools später lasen oder ausführten, sodass die Vertrauensübergabe am Sandbox-Rand nun der dominierende Fehlermodus ist.
- Prompt Injection erreicht Agenten-Workflows über Inhalte, die diese legitim verarbeiten, und die GitLost-Schwachstelle zeigte, wie ein nicht authentifizierter Angreifer über ein präpariertes öffentliches GitHub Issue private Repository-Daten abgreifen konnte.
- Isolation ist nur so gut wie das, was darin eingebunden ist: Credentials, persistente Agent-Konfigurationsdateien und großzügige Allowlists können eine technisch solide Sandbox in einen Exfiltrationspfad verwandeln, und rein containerbasierte Grenzen bleiben gegenüber Kernel- und Supply-Chain-Angriffen schwach.
Empfehlung
Behandeln Sie die Sandbox-Auswahl als Threat-Modeling-Übung, nicht als Produktentscheidung. Entscheiden Sie zuerst, wovon der Agent isoliert werden muss — Host-Dateisystem, Entwickler-Credentials, internes Netzwerk, Produktions-Deploy-Keys — und wählen Sie dann die passende Stufe: hardware-virtualisierte microVMs für nicht vertrauenswürdigen, modell-generierten Code und CI-taugliche Läufe, leichtgewichtige Namespace-Sandboxes für lokale Iteration (sandbox selection as threat modeling, Thoughtworks Radar). Übernehmen Sie das geteilte Vertrauensmodell aus agentischer CI: breite Shell- und sudo-Rechte innerhalb der Grenze, strikte Netzwerk-Allowlists, minimale Token-Scopes und ein begrenzter Output-Pfad, der einschränkt, welche Dateien ein resultierender PR anfassen darf (gh-aw sandboxes).
Testen Sie die Vertrauensübergabe, nicht nur die Wand. Da alle offengelegten Escapes den Fall betrafen, dass der Agent eine Datei schrieb, die ein unsandboxtes Tool später konsumierte, sollte Ihr Testplan klären, was mit Hook-Konfigurationen, Git-Config-Einträgen, Virtual-Environment-Interpretern, Task-Definitionen und anderer vom Agenten schreibbarer Konfiguration nach Ende des Turns passiert, und Agent-CLIs auf Versionen festnageln, die die relevanten Fixes enthalten (CSA research note). Gehen Sie davon aus, dass injizierte Anweisungen über Issues, READMEs und abgerufene Seiten eintreffen, und stellen Sie Netzwerk-Egress auf Deny-by-Default, damit ein gesteuerter Agent nirgendwohin Daten senden kann (SecurityWeek).
Verlassen Sie sich nicht auf agenteninterne Approval-Prompts als Ihre Kontrollebene. Platzieren Sie das Enforcement außerhalb des Agenten — einen OS-Level-Supervisor auf Syscall-Ebene oder eine Hook-Level-Interception-Schicht mit Supply-Chain- und URL-Reputationsprüfungen —, damit die Entscheidung deterministisch ist und Auto-Approve überlebt (grith is live, Help Net Security). Bevorzugen Sie ephemere oder Snapshot-and-Fork-Umgebungen gegenüber langlebigen, um Konfigurations-Persistenz-Angriffe abzuschwächen (Augment Code, LangSmith Sandboxes GA), und binden Sie Credentials explizit mit angehängter Governance ein, statt die eigenen Entitlements des Entwicklers zu übernehmen (AWS Compute Blog). Wechseln Sie erst zu Adopt, wenn Sandbox-Profile, Secret-Handling, Egress-Policy, Audit-Logs und Exception-Workflows über jeden vom Team betriebenen Agenten hinweg reproduzierbar sind.
Quellen
- Thoughtworks Radar: sandboxed execution for coding agents
- GitHub Agentic Workflows sandboxes and CI integration tests
- Critical prompt injection vulnerability in GitHub Agentic Workflows (GitLost)
- CSA research note: AI coding agent sandbox escapes
- Sandbox selection for AI coding agents is a threat-model decision
- Sandboxed code execution gives AI agents a smaller computer
- LangSmith Sandboxes are generally available
- OpenAI Agents SDK sandbox: production code execution
- Sandboxing strategies secure AI agents in production
- Secure code execution for AI agents with AWS Lambda MicroVMs
- AI agent sandbox: how to safely run autonomous agents
- grith is live
- Open-source tool Sage puts a security layer between AI agents and the OS
- What is an agent execution sandbox?
- NVIDIA: practical security guidance for sandboxing agentic workflows
- Sandboxed code execution for AI agents in 2026: E2B vs Modal vs Daytona
Überblick
Sandboxed Execution isoliert Coding Agents von der primären Entwicklermaschine, Credentials, Netzwerken und Produktionssystemen, während sie Packages installieren, Tools aufrufen oder Dateien ändern. OpenAI beschreibt die Codex Sandbox als die Boundary, die einem Agent autonomes Handeln ohne uneingeschränkten Maschinenzugriff erlaubt und definiert, welche Dateien modifiziert werden dürfen und ob Commands das Netzwerk nutzen dürfen (Codex sandboxing).
Sandboxing und Approvals sind getrennte Controls. Die Sandbox setzt technische Grenzen; die Approval Policy entscheidet, wann der Agent stoppen und fragen muss, bevor er diese überschreitet (Codex sandboxing). Das Muster ist besonders wichtig für Coding Agents, weil ihr Normalworkflow Shell Commands, Package Manager, Test Harnesses, Dateiänderungen und manchmal externe Systeme umfasst.
Der Grund für Trial: Sandboxing soll Standard-Control werden, Implementierungen sind aber noch uneinheitlich. Teams sollten Sandboxing für lokale Coding Agents, Cloud Agents, CI Agents und Developer Workstations testen und erst nach Validierung von Filesystem, Netzwerk, Secrets, Approvals, Logs und Escape Hatches standardisieren.
Adoptionssignale
- Codex wendet Sandboxing automatisch im Default Permission Mode für lokale Commands in App, IDE Extension und CLI an, mit plattformnativer Enforcement auf macOS, Linux, WSL2 und native Windows (Codex sandboxing).
- Codex definiert gängige Sandbox Modes:
read-only,workspace-writeunddanger-full-access, plus Approval Policies wieuntrusted,on-requestundnever(Codex sandboxing). - Codex stellt fest, dass gespawnte Commands wie
git, Package Manager und Test Runner dieselben Sandbox Boundaries erben, nicht nur eingebaute File Operations des Agents (Codex sandboxing). - Claude Code dokumentiert ein sandboxed Bash Tool, bei dem Nutzer definieren, welche Dateien und Netzwerkdomains Commands berühren dürfen, und das Betriebssystem die Boundary für jeden Bash Command und Child Processes erzwingt (Claude Code sandboxing).
- Claude Code unterstützt macOS Seatbelt und Linux/WSL2 bubblewrap mit Filesystem Controls für erlaubte und verweigerte Reads/Writes sowie Network Controls für erlaubte oder verweigerte Domains (Claude Code sandboxing).
- Docker dokumentiert OpenCode in Docker Sandboxes mit
sbx run opencode, Project-Directory-Isolation, gespeicherten Secrets, Credential Injection und Host-User-Level-Config-Isolation (Docker OpenCode sandbox). - OpenCode bietet ein Permission Model mit
allow,askunddeny, inklusive Controls für File Reads, Edits, Bash Commands, Web Access, Subagents, Skills und External Directories (OpenCode permissions). - OWASPs Excessive Agency Guidance empfiehlt, Funktionen, Permissions und Autonomie für LLM-Systeme mit Tools oder Extensions zu begrenzen, inklusive Vermeidung offener Shell-Command-Tools, wo granularere Tools möglich sind (OWASP LLM06 Excessive Agency).
Risiken
- Full-Access-Modi können die Boundary aufheben. Codex dokumentiert
danger-full-accessals Entfernen von Filesystem- und Netzwerk-Grenzen; Full Access kombiniert diesen Mode mitapproval_policy = "never"(Codex sandboxing). - Network Allowlists sind schwer zu begründen. Claude Code warnt, dass breite erlaubte Domains Exfiltration-Pfade erzeugen und der eingebaute Proxy verschlüsselten Traffic nicht inspiziert; stärkere Garantien können einen custom TLS-inspecting Proxy erfordern (Claude Code sandboxing).
- Credential Files und geerbte Environment Variables können leaken. Claude Code weist darauf hin, dass Credentials wie
~/.aws/credentialsund~/.ssh/standardmäßig lesbar sind, sofern nicht verweigert, und sandboxed Bash Commands standardmäßig die Parent-Process-Environment erben (Claude Code sandboxing). - Docker-Zugriff kann Isolation brechen. Claude Code warnt, dass Zugriff auf
/var/run/docker.sockeffektiv Host-Zugriff über den Docker Socket gewährt (Claude Code sandboxing). - Permission Prompts sind nicht dasselbe wie OS Isolation. OpenCodes Permission Model kann fragen, erlauben oder verweigern, beschränkt aber nicht zwingend, was ein gespawnter Prozess auf OS-Ebene tut (OpenCode permissions).
- Tool-Kompatibilität kann Ausnahmen erzwingen. Claude Code nennt Tools wie Docker, Watchman, bestimmte Go-CLIs oder Windows-Binaries unter WSL, die außerhalb der Sandbox laufen müssen und reviewte Exception Paths brauchen (Claude Code sandboxing).
- Sandbox-Konfiguration kann pro Entwickler driften. Ist Sandboxing optional oder nur lokal konfiguriert, entstehen inkonsistente Safety Boundaries; Claude Code unterstützt Managed Settings, um Sandboxing zu erzwingen und unsandboxed Fallback zu verhindern (Claude Code sandboxing).
- Sandboxing stoppt keine schlechten Commits. Eine Sandbox kann Execution Effects begrenzen, generierte Änderungen brauchen aber Human Review, Tests, Static Analysis, Dependency Scanning und Branch Protection vor dem Verlassen der Sandbox.
Vorteile & Nachteile
Vorteile
- Gibt Coding Agents eine begrenzte Umgebung, in der sie Packages installieren, Dateien bearbeiten, Tests ausführen und Commands starten können, ohne uneingeschränkten Zugriff auf die Entwicklermaschine oder Produktionssysteme.
- Reduziert Freigabe-Fatigue, indem sichere Aktionen innerhalb eines vorab freigegebenen Filesystem- und Netzwerkrahmens erlaubt sind und grenzüberschreitende Aktionen eskaliert werden.
- Ermöglicht reproduzierbare und reviewbare Agent-Arbeit durch ephemere Umgebungen, explizite Secret Injection, resettbaren State, Artifact Review und klare Promotion-Pfade von Sandbox zu Branch oder Pull Request.
Nachteile
- Sandboxing ist nicht einheitlich über Agents, Betriebssysteme und Deployment-Modi; Filesystem-, Netzwerk-, Secret- und Approval-Verhalten muss pro Tool verifiziert werden.
- Breite Filesystem-Writes, Network Allowlists, Docker-Socket-Zugriff, geerbte Environment Variables oder unsandboxed Escape Hatches können eine Sandbox zur schwachen Boundary machen.
- Sandboxes reduzieren Blast Radius, ersetzen aber nicht Code Review, Test Validation, Dependency Scanning, Prompt-Injection-Defenses oder Least-Privilege-Credentials für nachgelagerte Systeme.
Empfehlung
Testen Sie Sandboxed Execution als Baseline-Control für Coding Agents, bevor autonome Command Execution erlaubt wird. Starten Sie mit ephemeren oder resettbaren Umgebungen, auf den Workspace begrenzte Schreibzugriffe, keinem Host-Credential-Zugriff by default, Network Deny-by-Default mit engen Allowlists, expliziter Secret Injection, Resource Limits und Approval Gates für Aktionen außerhalb der Sandbox.
Validieren Sie die tatsächliche Boundary, nicht den Produktclaim. Prüfen Sie, ob der Agent SSH Keys, Cloud Credentials, Shell History, .env Files, Sibling Directories, Docker Sockets, Browser Profiles, interne Netzwerk-Endpunkte, Package-Manager-Lifecycle-Scripts und Production Deployment Credentials lesen kann. Bestätigen Sie, dass gespawnte Commands dieselbe Boundary erben und Logs zeigen, was ausgeführt wurde.
Promoten Sie Ergebnisse über reviewbare Artifacts. Agents sollten Diffs, Logs, Test Outputs und Summaries liefern, die Menschen vor Push, Merge, Deploy oder breiterem Zugriff prüfen. Wechseln Sie von Trial zu Adopt nur, wenn Sandbox Profiles, Secret Handling, Network Controls, Audit Logs und Exception Workflows über die Agent-Tools des Teams reproduzierbar sind.