Runs this case in a hardened, isolated container. The base image is built automatically on first use. Docker/Podman must be installed.
+ Already have a container running? — Codeman only docker execs in and never touches its lifecycle.
Container settings (optional, sensible defaults)
diff --git a/src/web/public/session-ui.js b/src/web/public/session-ui.js
index 9da4990d..8cedd647 100644
--- a/src/web/public/session-ui.js
+++ b/src/web/public/session-ui.js
@@ -2341,6 +2341,8 @@ Object.assign(CodemanApp.prototype, {
if (adoptToggle) adoptToggle.onchange = () => this._syncDockerAdoptMode();
const adoptCheck = document.getElementById('dockerAdoptCheckBtn');
if (adoptCheck) adoptCheck.onclick = () => this._dockerAdoptPreflight();
+ const adoptJump = document.getElementById('dockerAdoptJumpBtn');
+ if (adoptJump) adoptJump.onclick = () => this.jumpToDockerAdopt();
this._syncDockerAdoptMode();
// Scroll-into-view on focus for mobile keyboard visibility
modal.querySelectorAll('input[type="text"]').forEach(input => {
@@ -2913,6 +2915,20 @@ Object.assign(CodemanApp.prototype, {
else modal.removeAttribute('data-docker-adopt');
},
+ /**
+ * Cross-link from the Create New tab's "Run in an isolated Docker container"
+ * row. Adoption lives on the Docker tab, but the place users actually look for
+ * anything container-shaped is that checkbox, so this jumps them there with the
+ * toggle already on rather than leaving the feature undiscoverable.
+ */
+ jumpToDockerAdopt() {
+ this.switchCaseModalTab('case-docker');
+ const toggle = document.getElementById('dockerAdoptExisting');
+ if (toggle) toggle.checked = true;
+ this._syncDockerAdoptMode();
+ document.getElementById('dockerContainerName')?.focus();
+ },
+
/**
* Read-only preflight against an existing container. It links nothing, so the
* user can find out "not running" / "no tmux" / "codex present, claude missing"