copilot_here: December 2025 Updates - Native CLI, Stability & More
On this page8 sections ▾
I'd like to start off by saying thanks to @NenoLoje, @gparrello, and @mattrandles for logging issues for bugs they found or feature requests (that made it into this milestone).
December's main change to copilot_here is a .NET 10 Native AOT CLI that replaces most of the Bash and PowerShell orchestration logic.
Shell differences in quoting, arrays, and error handling had become difficult to maintain. The shell scripts now download and run the compiled binary. Follow-up fixes cover Windows paths, PowerShell 5.1, updates, and installation.
If you're new to copilot_here, check out my previous posts about running GitHub Copilot CLI in a secure, sandboxed Docker environment.
#What's New in December 2025
- Native AOT CLI - The core logic is now a compiled binary
- Enhanced Windows Support - No more "too many colons" errors
- Cross-Shell Installation - Configure installed shells together
- Session Info - Give your AI context about its environment
- Quality of Life Improvements - Fixes for updates, mounts, and more
- License Update - Moving to the Functional Source License
- Completed PBIs - Full list of changes and contributors
#1. Native AOT CLI
The biggest change this month is under the hood. We've migrated the core orchestration logic from Bash/PowerShell scripts to a .NET 10 Native AOT application.
#Why the switch?
The previous shell-script-only approach was becoming difficult to maintain. Differences in how shells handle arrays, quoting, and error handling led to "works on my machine" bugs. Moving that logic into the compiled application reduces the amount of behaviour implemented separately in each shell.
- Stability: We can now write type-safe code with proper error handling and unit tests.
- Speed: Native AOT compiles to machine code, giving us short startup times without needing a .NET runtime installed.
- Consistency: The same binary logic runs on Linux, macOS, and Windows, reducing platform-specific bugs.
The shell scripts (copilot_here.sh and copilot_here.ps1) are now just thin wrappers that download and execute this binary.
#2. Enhanced Windows Support
We tested on fresh Windows installations with both PowerShell 5.1 and PowerShell Core. That exposed installation, path conversion, and terminal compatibility issues.
Even though the core application is now a native binary, the wrapper scripts that handle updates and initial execution are still PowerShell. We've hardened these scripts to handle dependency checks and path conversions correctly across all versions.
- Path Conversion: Fixed the "too many colons" error by correctly converting Windows paths (e.g.,
C:\Projects) to Docker-compatible paths (e.g.,/c/Projects). - Unicode Support: Replaced emojis with compatible characters on older terminals to prevent the
????display issues. - Installation: The install script now handles missing directories and profiles gracefully.
#3. Cross-Shell Installation
Using copilot_here across multiple shells (Bash, Zsh, PowerShell) used to require manual setup for each. Now, you can set them all up at once:
copilot_here --install-shellsThis command detects which shells you have installed and automatically configures the necessary profiles and integrations for all of them.
#4. Session Info
When you're working with an AI agent, it often needs to know about its environment. We've added a new session-info command (and a COPILOT_HERE_SESSION_INFO environment variable) that provides a JSON summary of the current session:
!session-infoThis gives you (and the AI) details about:
- Current working directory
- Mounted paths (and their read/write status)
- Active Docker image
- Airlock network status
#5. Quality of Life Improvements
- Mount Deduplication: We now handle duplicate mount requests, preferring read-only over read-write if specified multiple times (instead of the usual "first wins" logic) for better security.
- Symlink Support: The updater now respects symlinked scripts (common in dotfiles setups) instead of overwriting them.
- Update Loops: Fixed a bug where
copilot_herewould repeatedly prompt for the same update. - NPM Cache: Fixed permission issues with
~/.npminside the container.
#6. License Update
We've updated the project license to the Functional Source License (FSL-1.1-MIT).
This is a "source available" license that converts to MIT after 2 years. It allows you to use, copy, modify, and redistribute the code for any purpose, except for creating a competing software-as-a-service product.
The release remains available for personal and commercial use subject to those terms.
#Completed PBIs
Here is the list of Product Backlog Items (PBIs) completed in the December 2025 milestone:
- Feature: sandbox flags (#29) - (@mattrandles)
- ERROR after update: Unexpected token '}' in expression or statement (#31) - (@NenoLoje)
- WARNING: ⚠️ Failed to download compose template (non-fatal) (#32) - (@NenoLoje)
- README needs update: Command line parameter mismatch (#33) - (@NenoLoje)
copilot_hereorcopilot-here(#34) - (@NenoLoje)- Example does not work (#35) - (@NenoLoje)
- Getting "Warning: Failed to create appuser, running as root" with latest version. (#40) - (@gparrello)
- Refactor Orchestration: Migrate Shell Scripts to a Compiled CLI Application (#27)
- Add cross-shell auto-install for copilot_here integrations (--install-shells) (#37)
- Update prompt loop:
copilot_hererepeatedly offers same update after successful update (#38) - Bug: Bash updater breaks/fails with symlinked ~/.copilot_here.sh (#39)
- Duplicate Mount Points Not Being Removed (#41)
- Add session information environment variable for easy AI context access (#42)
- Windows PowerShell Installation Fails on Fresh Machines (#43)
- Windows PowerShell 5.1 - Unicode Display Issues (#44)
- Windows PowerShell 5.1: Docker Mount Path Conversion Error (#45)
- Standardize PowerShell Script Location to ~/.copilot_here.ps1 (#46)
- Install Script Should Clean Up Rogue Profile Entries on Reinstall (#47)
- Fix container home directory ownership for npm cache (#48)
- Shell update leaves PATH integration missing (macOS) (#49)