Releases: EstebanForge/construct-cli
Releases · EstebanForge/construct-cli
The Construct CLI 1.8.12
[1.8.12] - 2026-05-20
Added
- CWD-Derived Container Naming: Each working directory now gets its own container (
construct-cli-<sha256[:8]>) instead of a shared singleton. Running agents from multiple terminals with different working directories no longer conflicts with "Container 'construct-cli' is already running." Same directory always hashes to the same container name, preserving attach semantics.
Fixed
- Daemon Killed by
sys doctor --fix:cleanupAgentContainerprefix-matchedconstruct-cli-daemonand killed it;recreateDaemonContainerthen saw it missing and no-op'd. Daemon is now excluded from session container cleanup. - Stopped Containers Returned by Network Manager:
runningSessionContainersuseddocker ps -aq(all states), causing spurious UFW rule warnings on stopped containers. Now filters by running state. - Legacy Singleton Missed by Migration:
collectSessionContainersonly discovered CWD-hash containers, missing pre-upgradeconstruct-clisingleton. Now includes exact-match discovery for the legacy name. - Stale Error Message:
sys doctor --fixsuggestion referenced olddocker rm -f construct-cliinstead of prefix-based cleanup. - Keyring Env Path Hardcoding:
readKeyringEnvusedos.UserHomeDir()instead ofconfig.GetConfigDir()for the keyring env file path.
Changed
- Container Discovery: All consumers of the static
"construct-cli"container name (doctor.go,migration.go,network/manager.go,reset-environment.sh) now discover containers by prefix"construct-cli-"viaruntime.ListContainersByPrefix(). - Architecture Docs: Updated
ARCHITECTURE-DESIGN.mdSections 4, 9.3, and 11.2.1 for the new naming pattern.
The Construct CLI 1.8.11
[1.8.11] - 2026-05-20
Added
- Antigravity Update Integration: Added
agy updateintegration to the dynamic Topgrade generator (packages.go),topgrade.tomltemplate, and the manual system update fallback script (update-all.sh).
Fixed
- Yolo Configuration for agy: Fixed yolo settings (
yolo_allandyolo_agents) to correctly apply the--dangerously-skip-permissionsflag when initializing theagyagent. - Agent Credential Persistence: Added
gnome-keyring,libsecret-1-0, anddbus-x11to the container image, with automatic daemon startup in the entrypoint. Agents (e.g.,agy) that rely on the OS keyring for OAuth tokens now persist credentials across container restarts. Previously, every session required a fresh login. - Keyring Daemon Startup: Fixed
gnome-keyring-daemoninvocation in the entrypoint. The--startand--unlockflags are mutually exclusive and caused the daemon to silently fail, leaving the keyring locked. Changed to--unlock --components=secretswhich both starts the daemon and unlocks the login keyring with a blank password. - Keyring Env Vars Not Reaching Agents:
docker execruns agents directly (no shell), so.bashrc/.profileare never sourced andGNOME_KEYRING_CONTROL/DBUS_SESSION_BUS_ADDRESSwere invisible to agent binaries. agy's keyring auth timed out after 1s, fell back to browser OAuth, and hung. Fixed by having the entrypoint write these vars to~/.construct-keyring-env, which the Go CLI reads from the host-side bind mount and injects via-eflags on everydocker exec.
The Construct CLI 1.8.10
[1.8.10] - 2026-05-20
Fixed
- Agent Credential Persistence: Added
gnome-keyring,libsecret-1-0, anddbus-x11to the container image, with automatic daemon startup in the entrypoint. Agents (e.g.,agy) that rely on the OS keyring for OAuth tokens now persist credentials across container restarts. Previously, every session required a fresh login.
[1.8.9] - 2026-05-20
Added
- Antigravity Update Integration: Added
agy updateintegration to the dynamic Topgrade generator (packages.go),topgrade.tomltemplate, and the manual system update fallback script (update-all.sh).
Fixed
- Yolo Configuration for agy: Fixed yolo settings (
yolo_allandyolo_agents) to correctly apply the--dangerously-skip-permissionsflag when initializing theagyagent.
[1.8.8] - 2026-05-20
Changed
- Replaced Gemini CLI with Antigravity CLI: Replaced
geminiagent (Google Gemini CLI, npm-installed) withagyagent (Google Antigravity CLI, curl-installed fromhttps://antigravity.google/cli/install.sh). Binary lands at~/.local/bin/agy. Removed Gemini-specific clipboard paste wrapper (~220 lines of Python PTY code). RenamedGEMINI_API_KEYtoANTIGRAVITY_API_KEYthroughout source, templates, and docs. Updated agent registration, memory paths, constants, env passthrough, runtime candidates, wayland/yolo flags, help text, aliases, verification loops, and all documentation.
[1.8.7] - 2026-05-15
Fixed
- Yolo Mode Ignored on Cold-Start: Config values (
yolo_all,yolo_agents) fromconfig.tomlwere not applied when running agents via the cold-start (non-daemon) path. Root cause:Execute()applied yolo flags to a local variable, butrunNewContainer()discarded itsargsparameter (_) and reade.argsdirectly from the struct. The daemon path worked because it passed yolo-applied args directly. Fixed by writing yolo results back toe.argsand removing the dead parameter fromrunNewContainer().
[1.8.6] - 2026-05-14
Fixed
- Global AGENTS.md Symlinks Leaked onto Host: Removed creation of
AGENTS.md,CLAUDE.md, andGEMINI.mdsymlinks in/workspaces/and/projects/. These directories are host bind mounts, so symlinks pointing to the container-internal/home/construct/AGENTS.mdleaked onto the host filesystem as dangling links. Symlink aliases are now created only inside/home/construct/(container-internal). Existing dangling symlinks on the host must be cleaned up manually.
[1.8.5] - 2026-05-12
Fixed
- AGENTS.md Symlink Scope: Fixed symlinks being created at every directory level (including project subdirectories), which overwrote pre-existing AGENTS.md files. Symlinks are now created only at
/workspaces/,/workspaces/<hash>/, and/projects/. Pre-existing real files are never overwritten. Now also createsCLAUDE.mdandGEMINI.mdsymlinks alongsideAGENTS.md, all pointing to the global rules file.
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - **Workspace ...
The Construct CLI 1.8.9
[1.8.9] - 2026-05-20
Added
- Antigravity Update Integration: Added
agy updateintegration to the dynamic Topgrade generator (packages.go),topgrade.tomltemplate, and the manual system update fallback script (update-all.sh).
Fixed
- Yolo Configuration for agy: Fixed yolo settings (
yolo_allandyolo_agents) to correctly apply the--dangerously-skip-permissionsflag when initializing theagyagent.
[1.8.8] - 2026-05-20
Changed
- Replaced Gemini CLI with Antigravity CLI: Replaced
geminiagent (Google Gemini CLI, npm-installed) withagyagent (Google Antigravity CLI, curl-installed fromhttps://antigravity.google/cli/install.sh). Binary lands at~/.local/bin/agy. Removed Gemini-specific clipboard paste wrapper (~220 lines of Python PTY code). RenamedGEMINI_API_KEYtoANTIGRAVITY_API_KEYthroughout source, templates, and docs. Updated agent registration, memory paths, constants, env passthrough, runtime candidates, wayland/yolo flags, help text, aliases, verification loops, and all documentation.
[1.8.7] - 2026-05-15
Fixed
- Yolo Mode Ignored on Cold-Start: Config values (
yolo_all,yolo_agents) fromconfig.tomlwere not applied when running agents via the cold-start (non-daemon) path. Root cause:Execute()applied yolo flags to a local variable, butrunNewContainer()discarded itsargsparameter (_) and reade.argsdirectly from the struct. The daemon path worked because it passed yolo-applied args directly. Fixed by writing yolo results back toe.argsand removing the dead parameter fromrunNewContainer().
[1.8.6] - 2026-05-14
Fixed
- Global AGENTS.md Symlinks Leaked onto Host: Removed creation of
AGENTS.md,CLAUDE.md, andGEMINI.mdsymlinks in/workspaces/and/projects/. These directories are host bind mounts, so symlinks pointing to the container-internal/home/construct/AGENTS.mdleaked onto the host filesystem as dangling links. Symlink aliases are now created only inside/home/construct/(container-internal). Existing dangling symlinks on the host must be cleaned up manually.
[1.8.5] - 2026-05-12
Fixed
- AGENTS.md Symlink Scope: Fixed symlinks being created at every directory level (including project subdirectories), which overwrote pre-existing AGENTS.md files. Symlinks are now created only at
/workspaces/,/workspaces/<hash>/, and/projects/. Pre-existing real files are never overwritten. Now also createsCLAUDE.mdandGEMINI.mdsymlinks alongsideAGENTS.md, all pointing to the global rules file.
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the up...
The Construct CLI 1.8.7
[1.8.7] - 2026-05-15
Fixed
- Yolo Mode Ignored on Cold-Start: Config values (
yolo_all,yolo_agents) fromconfig.tomlwere not applied when running agents via the cold-start (non-daemon) path. Root cause:Execute()applied yolo flags to a local variable, butrunNewContainer()discarded itsargsparameter (_) and reade.argsdirectly from the struct. The daemon path worked because it passed yolo-applied args directly. Fixed by writing yolo results back toe.argsand removing the dead parameter fromrunNewContainer().
[1.8.6] - 2026-05-14
Fixed
- Global AGENTS.md Symlinks Leaked onto Host: Removed creation of
AGENTS.md,CLAUDE.md, andGEMINI.mdsymlinks in/workspaces/and/projects/. These directories are host bind mounts, so symlinks pointing to the container-internal/home/construct/AGENTS.mdleaked onto the host filesystem as dangling links. Symlink aliases are now created only inside/home/construct/(container-internal). Existing dangling symlinks on the host must be cleaned up manually.
[1.8.5] - 2026-05-12
Fixed
- AGENTS.md Symlink Scope: Fixed symlinks being created at every directory level (including project subdirectories), which overwrote pre-existing AGENTS.md files. Symlinks are now created only at
/workspaces/,/workspaces/<hash>/, and/projects/. Pre-existing real files are never overwritten. Now also createsCLAUDE.mdandGEMINI.mdsymlinks alongsideAGENTS.md, all pointing to the global rules file.
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer, `shoul...
The Construct CLI 1.8.6
[1.8.6] - 2026-05-14
Fixed
- Global AGENTS.md Symlinks Leaked onto Host: Removed creation of
AGENTS.md,CLAUDE.md, andGEMINI.mdsymlinks in/workspaces/and/projects/. These directories are host bind mounts, so symlinks pointing to the container-internal/home/construct/AGENTS.mdleaked onto the host filesystem as dangling links. Symlink aliases are now created only inside/home/construct/(container-internal). Existing dangling symlinks on the host must be cleaned up manually.
[1.8.5] - 2026-05-12
Fixed
- AGENTS.md Symlink Scope: Fixed symlinks being created at every directory level (including project subdirectories), which overwrote pre-existing AGENTS.md files. Symlinks are now created only at
/workspaces/,/workspaces/<hash>/, and/projects/. Pre-existing real files are never overwritten. Now also createsCLAUDE.mdandGEMINI.mdsymlinks alongsideAGENTS.md, all pointing to the global rules file.
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer,shouldEnableYolo,yoloFlagForAgent,readLoginBridgePorts,parsePorts,formatPorts,mapDaemonWorkdir,warnDaemonMountFallback,getEffectiveCwd,execViaDaemon,runAgentPatchInDaemon,buildDaemonExecEnv,execInRunningContainer,startDaemonSSHBridge,ensureDaemonSSHProxy,waitForDaemonSSHProxy,checkDaemonSSHProxy,startDaemonBackground,waitForDaemon,ensureAgentRuntimeDirs,appendAgentSpecificRunFlags,appendAgentSpecificDaemonEnv, andappendAgentSpecificExecEnv. All behavior preserved inRuntimeEngine.
<!-...
The Construct CLI 1.8.5
[1.8.5] - 2026-05-12
Fixed
- AGENTS.md Symlink Scope: Fixed symlinks being created at every directory level (including project subdirectories), which overwrote pre-existing AGENTS.md files. Symlinks are now created only at
/workspaces/,/workspaces/<hash>/, and/projects/. Pre-existing real files are never overwritten. Now also createsCLAUDE.mdandGEMINI.mdsymlinks alongsideAGENTS.md, all pointing to the global rules file.
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer,shouldEnableYolo,yoloFlagForAgent,readLoginBridgePorts,parsePorts,formatPorts,mapDaemonWorkdir,warnDaemonMountFallback,getEffectiveCwd,execViaDaemon,runAgentPatchInDaemon,buildDaemonExecEnv,execInRunningContainer,startDaemonSSHBridge,ensureDaemonSSHProxy,waitForDaemonSSHProxy,checkDaemonSSHProxy,startDaemonBackground,waitForDaemon,ensureAgentRuntimeDirs,appendAgentSpecificRunFlags,appendAgentSpecificDaemonEnv, andappendAgentSpecificExecEnv. All behavior preserved inRuntimeEngine.
[1.7.7] - 2026-05-07
Changed
- Pi Coding Agent Package: Switched from
@mariozechner/pi-coding-agentto@earendil-works/pi-coding-agentin default npm packages. - Gemini CLI Distribution: Moved
gemini-clifrom Homebrew to npm (@google/gemini-cli) for consistent cross-platform installation. - OpenCode Install Source: Removed
opencodefrom default Homebrew packages; added automatic OpenCode installation via official installer in[post_install]commands.
Removed
- **Oh My Pi Ag...
The Construct CLI 1.8.4
[1.8.4] - 2026-05-11
Added
- Global AGENTS.md Symlinks: Automatically creates symlinks to the global
AGENTS.mdrules file in common mount points (/workspaces/,/projects/) and their subdirectories. This ensures agents can easily discover global instructions regardless of the project's mount path or random daemon hash.
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer,shouldEnableYolo,yoloFlagForAgent,readLoginBridgePorts,parsePorts,formatPorts,mapDaemonWorkdir,warnDaemonMountFallback,getEffectiveCwd,execViaDaemon,runAgentPatchInDaemon,buildDaemonExecEnv,execInRunningContainer,startDaemonSSHBridge,ensureDaemonSSHProxy,waitForDaemonSSHProxy,checkDaemonSSHProxy,startDaemonBackground,waitForDaemon,ensureAgentRuntimeDirs,appendAgentSpecificRunFlags,appendAgentSpecificDaemonEnv, andappendAgentSpecificExecEnv. All behavior preserved inRuntimeEngine.
[1.7.7] - 2026-05-07
Changed
- Pi Coding Agent Package: Switched from
@mariozechner/pi-coding-agentto@earendil-works/pi-coding-agentin default npm packages. - Gemini CLI Distribution: Moved
gemini-clifrom Homebrew to npm (@google/gemini-cli) for consistent cross-platform installation. - OpenCode Install Source: Removed
opencodefrom default Homebrew packages; added automatic OpenCode installation via official installer in[post_install]commands.
Removed
- Oh My Pi Agent: Removed
omp(Oh My Pi) from supported agents. Unregistered fromagent.go,help.go,memories.go,update-all.sh,packages.toml,README.md, andAGENTS.md.
[1.7.6] - 2026-05-03
Fixed
- OrbStack Repeated Launch: On macOS, Construct no longer brings OrbStack to the foreground on every invocation when Docker is already running in the background.
startRuntimenow checksdocker infobefore ...
The Construct CLI 1.8.3
[1.8.3] - 2026-05-09
Fixed
- ARM64 Setup & agent-browser: Fixed
agent-browserinstallation failure on ARM64 Linux by implementing an automatic wrapper that uses the system Chromium (/usr/bin/chromium). - Resilient Package Installation: Added failure-safe command execution (
cmd || echo ...) ininstall_user_packages.shto prevent a single tool failure from aborting the entire setup. - Sudo Detection: Improved
SUDO_AVAILABLEcheck to usesudo -n apt-get --version, resolving issues in restricted sudoers environments wheretruewas not permitted. - Multimodal Clipboard Regression: Resolved image pasting failures in Gemini and Codex agents.
- macOS Networking: Fixed
127.0.0.1hardcoding in the clipboard server; now correctly useshost.docker.internal(or configuredclipboard_host), making the host clipboard reachable from the container. - Ghostty / Bracketed Paste Support: Added PTY interception for
\x1b[200~sequences. PTY wrappers now consume bracketed paste content and inject image paths directly, bypassing terminal protocol mismatches. - Daemon Patching: Restored
runAgentPatchInDaemonlogic to ensure shims, wrappers, and Xvfb are correctly initialized in persistent daemon containers. - Headless X11 (Xvfb): Moved Xvfb startup to the agent-patch script to ensure a valid
DISPLAYis always available for agents that expect a real display. - Gemini @-prefix: Ensured Gemini uses the required
@pathinjection format while Codex uses raw paths.
- macOS Networking: Fixed
- Agent Update Hardening: Added defensive
command -vchecks for Claude and Pi update commands in Topgrade configuration, preventing errors in environments where these agents are not installed.
Changed
- Official Goose CLI Installer: Switched to the official Goose installation script (
github.com/aaif-goose/goose) for more reliable setup. - Updated OpenCode Installer: Updated the OpenCode post-install command to use the canonical
curl -fsSL https://opencode.ai/install | bash. - Pi Update Integration: Integrated
pi updateinto the primary Topgrade update path to ensure Pi and its internal packages are kept current duringct sys update. - Clean Brew Installation Logs: Optimized the Homebrew installation script to check for existing packages before running
brew install, replacing noisy "already installed" warnings with clean confirmation messages.
Optimized
- Fast Agent Startup (Patch Marker): Implemented a versioned marker-based guard (
~/.construct_patched) to skip redundant agent clipboard patching on startup. This significantly reduces latency when entering a shell or launching an agent in a warm daemon container. Patching is now only re-triggered after Construct version changes or package installations.
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer,shouldEnableYolo,yoloFlagForAgent,readLoginBridgePorts,parsePorts,formatPorts,mapDaemonWorkdir,warnDaemonMountFallback,getEffectiveCwd,execViaDaemon,runAgentPatchInDaemon,buildDaemonExecEnv,execInRunningContainer,startDaemonSSHBridge,ensureDaemonSSHProxy,waitForDaemonSSHProxy,checkDaemonSSHProxy,startDaemonBackground,waitForDaemon,ensureAgentRuntimeDirs,appendAgentSpecificRunFlags,appendAgentSpecificDaemonEnv, andappendAgentSpecificExecEnv. All behavior preserved inRuntimeEngine.
[1.7.7] - 2026-05-07
Changed
- Pi Coding Agent Package: Switched from
@mariozechner/pi-coding-agentto@earendil-works/pi-coding-agentin default npm packages. - Gemini CLI Distribution: Moved
gemini-clifrom Homebrew to npm (@google/gemini-cli) for consistent cross-platform installation. - OpenCode Install Source: Removed
opencodefrom default Homebrew packages; added automatic OpenCode installation via official installer in[post_install]commands.
Removed
- Oh My Pi Agent: Removed
omp(Oh My Pi) from supported agents. Unregistered fromagent.go,help.go,memories.go,update-all.sh,packages.toml,README.md, andAGENTS.md.
[1.7.6] - 2026-05-03
Fixed
- OrbStack Repeated Launch: On macOS, Construct no longer brings OrbStack to the foreground on every invocation when Docker is already running in the background.
startRuntimenow checksdocker infobefore launching OrbStack, avoiding redundantopen -a OrbStackcalls.
[1.7.5] - 2026-05-02
Fixed
- pnpm Update False Failure:
ct sys updatereportedpnpm: FAILEDbecause topgrade's native pnpm step exits non-zero when pnpm is managed by Homebrew. Topgrade's pnpm step is now disabled — brew alre...
The Construct CLI 1.8.2
[1.8.2] - 2026-05-09
Fixed
- Daemon shell with no args:
execViaDaemonnow defaults to the configured shell (sandbox.shellor/bin/bash) when invoked without arguments, matching the existing behavior ofexecInRunningContainer. Previously,ct sys shellpassed an empty command todocker exec, causing "requires at least 2 arguments" error.
[1.8.1] - 2026-05-09
Fixed
- Root exec in daemon containers:
resolveExecUserForRunningContainer()now returns"construct"on all code paths instead of"". Previously,docker exec -itinto the daemon ran agents as root (sinceUSER constructis commented out in the Dockerfile), causing Claude CLI to reject--dangerously-skip-permissions. Added uid==0 guard andUsesUserNamespaceRemap()check. - Pre-existing test failure on uid=0 CI:
TestAppendExecUserRunFlagsnow correctly handles root environments by expecting no--userflag when uid=0. - Missing daemon launch messages: Restored
"Running in Construct daemon: [args]","Entering Construct daemon shell...","✓ Started SSH Agent proxy (daemon)", and exit code 126/127 PATH hints that were lost in the v1.8.0 refactor.
Changed
- Claude install moved to packages.toml: Claude Code installation moved from hardcoded
packages.goto[post_install]section inpackages.toml, consistent with droid/opencode pattern. - Pi self-update in update routine: Added
pi updateto bothupdate-all.shmanual fallback and topgrade[commands]config.
Removed
- Dead code cleanup: Removed unused
containerHasUIDEntryFnvariable, deadexecUserForAgentExecfunction (never called from production), and stale test mocks that referenced removed behavior.
[1.8.0] - 2026-05-08
Changed
- Runtime Engine Extraction: Extracted ~1000 lines of monolithic container orchestration from
internal/agent/runner.gointo a dedicatedRuntimeEnginein newinternal/agent/engine.go.runner.gonow delegates toengine.Prepare()andengine.Execute(), centralizing daemon detection, clipboard server, SSH bridge, login forwarding, environment assembly, and container state handling. - Security Session Interface: Introduced a new
Sessioninterface ininternal/security/session_deep.gowithnoOpSession(disabled) andsecureSession(active) implementations. Replaces directSessionManagercoupling throughout the codebase with a clean, testable abstraction. - SecretShield Deep Module: Created
internal/security/shield.goas a deep module encapsulating secret detection and redaction into a single atomicProtect()operation.integration.gonow delegates scanning toSecretShieldinstead of orchestratingScannerdirectly. - Runner Integration Refactor:
internal/security/runner_integration.gocompletely rewritten around theSessioninterface. Uses the newsecurity.Open()factory and delegates env masking tosess.MaskEnv(). Eliminates redundantEnvMaskerinstantiation at every call site. - Scanner JSON Serialization: Replaced hand-rolled string-buffer JSON generation in
internal/security/scanner.gowith properencoding/jsonMarshalIndent/Unmarshalfor manifest and redaction index I/O. - RiPGrep Path Resolution: Changed hardcoded
/usr/bin/rgstat toexec.LookPath("rg")for cross-distro compatibility. - Session Manager Cleanup Removal: Removed
Manager.Cleanup()andisProcessAliveorphan-reaping logic frominternal/security/session.go. Session lifecycle is now managed explicitly through theSessioninterface. - Workspace Type Override: Added
CONSTRUCT_SECURITY_WORKSPACE_TYPEenvironment variable andWorkspaceTypeNonefor testability.DetectWorkspaceType()now respects the override. - OverlayFS Mount Fix: Corrected overlayfs mount options to use
lowerdir=<lower>,upperdir=<upper>,workdir=<work>instead of the erroneouslowerdir=<lower>:<upper>,upperdir=<upper>,workdir=<work>that duplicated the upper layer in the lower stack. - Setup PATH Construction:
runSetupnow constructsPATHandCONSTRUCT_PATHdirectly viaenv.BuildConstructPath()instead of the removedapplyConstructPath()helper.
Added
- Clipboard Server Stop: Added
Stop()method tointernal/clipboard/server.gofor clean listener shutdown. - Security Session Tests: Added
internal/security/session_test.gowith regression coverage for bothnoOpSession(disabled) andsecureSession(enabled withCONSTRUCT_SECURITY_WORKSPACE_TYPE=none) deep interface behavior.
Fixed
- Nil Status Guards: Added nil-pointer checks in
internal/security/integration.gobefore callingsm.status.IsEnabled(). - CI Lint Toolchain Pin: Bumped
golangci-lintpin fromv2.11.4tov2.12.2in build and release workflows; aligned local Makefile CI pin to2.12.2.
Removed
- ~29 Helper Functions from runner.go: Removed
collectForwardedEnv,buildRunFlags,shouldEnableLoginForward,applyYoloArgs,applyConstructPath,execUserForAgentExec,appendExecUserRunFlags,resolveExecUserForRunningContainer,shouldEnableYolo,yoloFlagForAgent,readLoginBridgePorts,parsePorts,formatPorts,mapDaemonWorkdir,warnDaemonMountFallback,getEffectiveCwd,execViaDaemon,runAgentPatchInDaemon,buildDaemonExecEnv,execInRunningContainer,startDaemonSSHBridge,ensureDaemonSSHProxy,waitForDaemonSSHProxy,checkDaemonSSHProxy,startDaemonBackground,waitForDaemon,ensureAgentRuntimeDirs,appendAgentSpecificRunFlags,appendAgentSpecificDaemonEnv, andappendAgentSpecificExecEnv. All behavior preserved inRuntimeEngine.
[1.7.7] - 2026-05-07
Changed
- Pi Coding Agent Package: Switched from
@mariozechner/pi-coding-agentto@earendil-works/pi-coding-agentin default npm packages. - Gemini CLI Distribution: Moved
gemini-clifrom Homebrew to npm (@google/gemini-cli) for consistent cross-platform installation. - OpenCode Install Source: Removed
opencodefrom default Homebrew packages; added automatic OpenCode installation via official installer in[post_install]commands.
Removed
- Oh My Pi Agent: Removed
omp(Oh My Pi) from supported agents. Unregistered fromagent.go,help.go,memories.go,update-all.sh,packages.toml,README.md, andAGENTS.md.
[1.7.6] - 2026-05-03
Fixed
- OrbStack Repeated Launch: On macOS, Construct no longer brings OrbStack to the foreground on every invocation when Docker is already running in the background.
startRuntimenow checksdocker infobefore launching OrbStack, avoiding redundantopen -a OrbStackcalls.
[1.7.5] - 2026-05-02
Fixed
- pnpm Update False Failure:
ct sys updatereportedpnpm: FAILEDbecause topgrade's native pnpm step exits non-zero when pnpm is managed by Homebrew. Topgrade's pnpm step is now disabled — brew already handles pnpm updates.
[1.7.4] - 2026-04-28
Fixed
- OpenCode First-Run SQLite Error: Pre-creates
~/.local/share/opencodeand~/.config/opencodedirectories before container startup, preventing theDrizzleError: Failed to run the query 'PRAGMA journal_mode = WAL'failure that occurred on first run in a fresh Construct environment.
[1.7.3] - 2026-04-27
Changed
- Expanded Default Env Passthroughs: Fresh configs now default
sandbox.env_passthroughto includeGITHUB_TOKEN,GEMINI_API_KEY,OPENAI_API_KEY,ANTHROPIC_API_KEY,QWEN_API_KEY,MINIMAX_API_KEY,KIMI_API_KEY,ZAI_API_KEY,MIMO_API_KEY,OPENCODE_API_KEY, andCONTEXT7_API_KEY.
[1.7.2] - 2026-04-21
Added
- Host Service Env: New
host_service_envfield in[sandbox]config section. Injects environment variables into the container withlocalhost/127.0.0.1automatically rewritten tohost.docker.internal. Enables agents inside the sandbox to reach host services like AgentMemory without complex IP detection. Example:"AGENTMEMORY_URL=http://localhost:3111". - AgentMemory config directory (
~/.agentmemory) is now created on container first run.
Changed
- Replaced the
[bridge]configuration section andinternal/bridgepackage (IP detection, gateway probing,CONSTRUCT_*env vars) with the simplerhost_service_envmechanism. The old[bridge]config is no longer recognized and should be removed fromconfig.toml.
Removed
- Deleted
internal/bridge/package (config, detector, injector, integration). - Removed
[bridge]section from config template andBridgeConfigtype.
[1.7.1] - 2026-04-20
Added
- Daemon Restart Command: New
construct sys daemon restartcommand that stops and starts the daemon container in one operation. Handles all container states: missing (starts), stopped (cleans up and starts), and running (stops then starts).
[1.7.0] - 2026-04-16
Changed
- Host Service Env: Replaced the
[bridge]configuration section withhost_service_envin[sandbox]. Configure environment variables that are injected into the container withlocalhost/127.0.0.1automatically rewritten tohost.docker.internal, enabling agents to reach host services (e.g., AgentMemory) without complex IP detection.
[1.6.4] - 2026-04-11
Added
- Hide Secrets Allowlist: Added
hide_secrets_allow_pathsconfiguration option to exclude specific files from redaction. This allo...