feat/newsletter plan#50
Closed
simion wants to merge 2 commits into
Closed
Conversation
simion
commented
Jun 26, 2026
Owner
- feat(sandbox): Docker sandbox mode (experimental, opt-in)
- docs: add newsletter signup plan (Kit, site + in-app)
Add a second, stronger sandboxing mode that runs the agent CLI inside a
Docker container instead of macOS Seatbelt. The container is the isolation
boundary: the agent can only touch the paths we bind-mount (worktree, its
parent .git, composition members, and a persistent per-agent config dir).
Backend (src-tauri):
- docker.rs: build_spec / render_argv / render_preview (single source of
truth for preview == spawn), check, content-addressed image_tag,
build_command (streamed) / build_image, image_status with image-exists
gating + stale detection (keep last-built), read/write_dockerfile,
cleanup_workspace / cleanup_all.
- Per-agent config-dir mapping: claude (CLAUDE_CONFIG_DIR), codex
(CODEX_HOME), gemini / copilot / agy via direct dir mounts; grok deferred.
Host dir is data_dir()/docker-agents/{agent}, shared across all Docker
workspaces of that agent (login + sessions + MCP persistence).
- Bundled default Dockerfile (all agents) as assets/Dockerfile.default.
- Data model: docker_sandbox_enabled + docker_extra_args on Workspace,
docker_sandbox_enabled master switch on Settings (serde-default migration).
- Commands: docker_check, docker_image_status, docker_get/default/set_
dockerfile, docker_build_image (background thread, never blocks the UI),
docker_preview_command, workspace_set_docker.
- pty_spawn: Docker branch rewrites to `docker run` (refuses if no image
built, never lazily builds), skips PID registration + login-env, forces
Seatbelt off. Cleanup wired into archive, spawn pre-removal, and app quit.
Frontend (src):
- Settings: Docker sandbox section (master toggle, docker availability,
CodeMirror Dockerfile editor, Build + Update-agents, image status with
"rebuild to apply" stale warning, streamed build log).
- Workspace sandbox dialog: Seatbelt | Docker cage selector (gated on
image-exists), how-it-works explainer, annotated mount rows, extra-args,
live command preview. Container glyph on the workspace row.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Captures the full design for an email subscriber list: Kit public form endpoint shared by termic.dev and the app, the bottom-left sidebar card (yields to UpdateCard), and the async Rust subscribe command. Implemented once then reverted; this doc is the record to re-apply. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.