diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 19e6990..a88fb97 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -30,12 +30,18 @@ jobs:
- name: Validate Marp presentation
run: |
- mkdir -p site
+ mkdir -p site/ko site/en
npx --yes @marp-team/marp-cli@4 \
- ai-agent-sandboxing.md \
+ ai-agent-sandboxing-ko.md \
--html \
--allow-local-files \
- -o site/index.html
+ -o site/ko/index.html
+ npx --yes @marp-team/marp-cli@4 \
+ ai-agent-sandboxing-en.md \
+ --html \
+ --allow-local-files \
+ -o site/en/index.html
+ cp index.html site/index.html
cp -R assets site/assets
- name: Validate PowerShell syntax
diff --git a/.gitignore b/.gitignore
index ccec682..fe7c1de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,13 +21,13 @@
!.github/**
# Presentation source and referenced assets.
-!ai-agent-sandboxing.md
+!ai-agent-sandboxing-*.md
!assets/**
!docs/
!docs/**
-# Generated GitHub Pages entrypoint.
-index.html
+# GitHub Pages language redirect.
+!index.html
# PowerShell scripts and modules.
!*.ps1
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a0da15..1701ad2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,37 +1,47 @@
# Contributing
-Thank you for improving the presentation materials, demo scripts, and
-infrastructure definitions in this repository.
+Thank you for improving the presentation materials, demo scripts, and infrastructure definitions in this repository.
## Development prerequisites
- Git
- Node.js 22 or later for Marp rendering
-- PowerShell 7 for PowerShell scripts
-- Bash for shell scripts
+- PowerShell 7 for PowerShell scripts (Only for Windows users)
+- Bash for shell scripts (Only for non-Windows users)
- Azure CLI with Bicep support for infrastructure validation
## Make a change
1. Create a branch using `feat/`, `fix/`, or `docs/`.
-2. Keep generated HTML, PDF, PowerPoint, speaker-note exports, and previews
- out of commits.
+2. Keep generated HTML, PDF, PowerPoint, speaker-note exports, and previews out of commits.
3. Update `CHANGELOG.md` when a change affects users of the materials.
-4. Use [Conventional Commits](https://www.conventionalcommits.org/) for commit
- messages.
+4. Use [Conventional Commits](https://www.conventionalcommits.org/) for commit messages.
## Validate presentation changes
```bash
+# For English
+mkdir -p en/assets
+cp -R assets/. en/assets/
npx --yes @marp-team/marp-cli@4 \
- ai-agent-sandboxing.md \
+ ai-agent-sandboxing-en.md \
--html \
--allow-local-files \
- -o index.html
+ -o en/index.html
```
-Review the generated presentation for overflow, broken image links, and
-readability.
+```bash
+# For Korean
+mkdir -p ko/assets
+cp -R assets/. ko/assets/
+npx --yes @marp-team/marp-cli@4 \
+ ai-agent-sandboxing-ko.md \
+ --html \
+ --allow-local-files \
+ -o ko/index.html
+```
+
+Review the generated presentation for overflow, broken image links, and readability.
## Validate scripts
diff --git a/README.md b/README.md
index 2aea0eb..a50a2d9 100644
--- a/README.md
+++ b/README.md
@@ -10,9 +10,10 @@ The primary presentation was prepared for various conferences and meetups, and c
.
├── .github/
├── assets/
-├── ai-agent-sandboxing.md # Marp presentation source
+├── ai-agent-sandboxing-ko.md # Korean Marp presentation source
+├── ai-agent-sandboxing-en.md # English Marp presentation source
├── docs/ # Demo setup, runbooks, and recovery guides
-├── index.html # Generated presentation (ignored)
+├── index.html # Redirect to the Korean presentation
├── LICENSE
└── README.md
```
@@ -29,29 +30,64 @@ The [demo documentation index](docs/README.md) provides two complete, sequential
## Preview the presentation
-1. Install Node.js 22 or later, then generate an HTML presentation:
+> [!NOTE]
+> To preview the presentation, you'll need 3 terminals.
+
+1. Install Node.js 22 or later
+
+1. Generate an HTML presentation for English in Terminal A:
+
+ ```bash
+ # zsh/bash
+ mkdir -p en/assets
+ cp -R assets/. en/assets/
+ npx --yes @marp-team/marp-cli@4 \
+ --watch \
+ ai-agent-sandboxing-en.md \
+ --html \
+ --allow-local-files \
+ -o en/index.html
+ ```
+
+ ```powershell
+ # PowerShell
+ New-Item -ItemType Directory -Force en/assets
+ Copy-Item -Recurse -Force assets/* en/assets/
+ npx --yes @marp-team/marp-cli@4 `
+ --watch `
+ ai-agent-sandboxing-en.md `
+ --html `
+ --allow-local-files `
+ -o en/index.html
+ ```
+
+1. Generate an HTML presentation for Korean in Terminal B:
```bash
# zsh/bash
+ mkdir -p ko/assets
+ cp -R assets/. ko/assets/
npx --yes @marp-team/marp-cli@4 \
--watch \
- ai-agent-sandboxing.md \
+ ai-agent-sandboxing-ko.md \
--html \
--allow-local-files \
- -o index.html
+ -o ko/index.html
```
```powershell
# PowerShell
+ New-Item -ItemType Directory -Force ko/assets
+ Copy-Item -Recurse -Force assets/* ko/assets/
npx --yes @marp-team/marp-cli@4 `
--watch `
- ai-agent-sandboxing.md `
+ ai-agent-sandboxing-ko.md `
--html `
--allow-local-files `
- -o index.html
+ -o ko/index.html
```
-1. Run local web server:
+1. Run local web server in Terminal C:
```bash
npx serve .
diff --git a/ai-agent-sandboxing-en.md b/ai-agent-sandboxing-en.md
new file mode 100644
index 0000000..fb4a0d0
--- /dev/null
+++ b/ai-agent-sandboxing-en.md
@@ -0,0 +1,1649 @@
+---
+marp: true
+theme: default
+size: 16:9
+# paginate: true
+# footer: Sandboxing AI Agents
+header: '한국어'
+---
+
+
+
+
+
+
+# Sandboxing
AI Agents on Ubuntu
+
+Controlling boundaries with
Docker Sandboxes and Azure Container Apps Sandboxes
+
+
So, how far should we allow the impact when agents make mistakes or get compromised?
+ + + +--- + + + + +Deletion or overwriting of source, config, and home directories
Exposure or misuse of tokens and cloud keys
Transmission of code and data to unauthorized destinations
Execution of malicious packages and installation scripts
Access to Docker sockets and local processes
File modification, shell execution, package installation, and network access are necessary
Perform necessary tasks within a microVM isolated from the host
Separate kernel and process boundaries
Sharing scope and write permissions
Destination-based egress policies
Proxy injection with plaintext hidden
Automation of creation, suspension, and termination
In Direct Mode, even with sandboxes, projects stored on the host are affected.
+ + + +--- + + + + +modernize agent orchestrates diagnosis, planning, and execution/plugin marketplace add microsoft/github-copilot-modernization
+/plugin install github-copilot-modernization@github-copilot-modernization
+
+
+
+---
+
+## Demo #1: Modernizing .NET Apps in Docker Sandboxes
+copilot → /agent → github-copilot-modernization:modernizeModernization assessment results
Reviewable execution plans
Change history per task
Dependent on developer machine's status and availability
Need automated interfaces for creation, suspension, and termination on demand
Isolated operation of multiple users and agents
Microsoft.App/SandboxGroups · Azure Container Apps Sandboxes
+ + + +--- + +Sub-second provisioning using pre-warmed pools
Zero-to-Scale · Scale from zero to thousands of concurrent sandboxes
Preserve state during idle periods and resume quickly
Entra ID, RBAC, Azure resource boundaries
Ingress and egress policies with virtual network integration
Use pre-configured toolchains as root filesystems
aca sandboxgroup create \
+ --name ghcp-sandbox-demo \
+ --location koreacentral \
+ --set-config
+ aca sandbox create \
+ --disk copilot \
+ --credential <copilot-credential-id> \
+ --label name=ghcp-demo
+ $ aca sandbox shell -l name=ghcp-demo
+
+workspaces$ git clone https://github.com/devkimchi/battle-school-lunch.git
+workspaces$ cd battle-school-lunch
+workspaces$ copilot
+
+aca sandbox stop \
+ -l name=ghcp-demo
+ aca sandbox resume \
+ -l name=ghcp-demo
+ design-update.md file is preserved| Criteria | Docker Sandboxes | ACA Sandboxes |
|---|---|---|
| Primary Users | Individual developers | Teams, services, multi-tenant |
| Execution Location | Local PC | Azure-managed infrastructure |
| Creation Methods | Interactive CLI | Portal · CLI · SDK · Bicep · Skills |
| State Lifecycle | Local persistence | snapshot · suspend · resume |
| Massive Concurrency | Machine capacity limits | Scale to thousands |
Information can be leaked to allowed destinations or granted privileges misused
Malicious packages, plugins, images, and installation scripts can be executed
Code, build scripts, and CI configurations must be reviewed before external execution
MCP servers, Skills, and external APIs represent separate trust boundaries
Changes to shared workspaces immediately affect the host
Local stdio MCP and shared Skills connect to host resources outside the microVM
Errors in role scope or user-to-sandbox mapping can expose privileges
Code, logs, and sensitive data can remain in snapshots and volumes
Grant agents the privileges they need, but enforce boundaries from outside.
Use Docker Sandboxes for interactive execution on developer PCs, and ACA Sandboxes for remote automation and multi-execution.
Sandboxes make troubles small, observable, and disposable.