Implements a unified permission notification UI that adapts to different runtime environments (Electron desktop vs web browser) with distinct visual presentations. ## What Changed ### New Components - `permission-notification-banner.tsx`: Adaptive notification component * Electron (desktop): Full banner with "⚠️ Approval Required" text and count badge * Web browser (portrait): Circular indicator badge showing pending count - `permission-approval-modal.tsx`: Interactive modal for reviewing/approving permissions * Displays permission type, detailed message, and diff viewer for file changes * Keyboard shortcuts: Enter (allow once), A (always), D (deny), Esc (close) * Queue management with "X of Y" counter for multiple pending permissions - `permission-notification.css`: Comprehensive styling with pulsing animations ### Integration - Updated `instance-shell2.tsx`: * Added banner to desktop center toolbar (next to Command Palette) * Added banner to mobile/phone layout center section * Added modal component for permission approval workflow - Updated `controls.css`: Imported new permission notification styles ## Why This Change **Before**: Permission requests had no visual indicator in the UI, making it difficult for users to know when agent/subagent actions required approval. **After**: Users receive clear, persistent visual notifications with: - Pulsing animation to draw attention - Environment-appropriate UI (full banner on desktop, compact badge on web) - Click-to-review workflow with full permission details ## Benefits 1. **Better UX**: Users immediately see when permissions need approval 2. **Responsive Design**: Adapts to desktop (Electron) and web browser contexts 3. **Accessible**: Proper ARIA labels, keyboard shortcuts, and focus management 4. **Queue Management**: Handles multiple pending permissions gracefully 5. **Contextual Information**: Shows diffs for file changes, permission types, etc. ## Impact - **No Breaking Changes**: Purely additive feature - **Build**: ✅ Verified successful build - **Testing**: ✅ Tested in Electron app and web browser
CodeNomad
A fast, multi-instance workspace for running OpenCode sessions.
CodeNomad is built for people who live inside OpenCode for hours on end and need a cockpit, not a kiosk. It delivers a premium, low-latency workspace that favors speed, clarity, and direct control.
Manage multiple OpenCode sessions side-by-side.
📸 More Screenshots
Global command palette for keyboard-first control.
Getting Started
Choose the way that fits your workflow:
🖥️ Desktop App (Recommended)
The best experience. A native application (Electron-based) with global shortcuts, deeper system integration, and a dedicated window.
- Download: Grab the latest installer for macOS, Windows, or Linux from the Releases Page.
- Run: Install and launch like any other app.
🦀 Tauri App (Experimental)
We are also working on a lightweight, high-performance version built with Tauri. It is currently in active development.
- Download: Experimental builds are available on the Releases Page.
- Source: Check out
packages/tauri-appif you're interested in contributing.
💻 CodeNomad Server
Run CodeNomad as a local server and access it via your web browser. Perfect for remote development (SSH/VPN) or running as a service.
npx @neuralnomads/codenomad --launch
For dev version
npx @neuralnomads/codenomad@dev --launch
This command starts the server and opens the web client in your default browser.
Highlights
- Multi-Instance: Juggle several OpenCode sessions side-by-side with tabs.
- Long-Session Native: Scroll through massive transcripts without hitches.
- Command Palette: A single global palette to jump tabs, launch tools, and control everything.
- Deep Task Awareness: Monitor background tasks and child sessions without losing flow.
Requirements
- OpenCode CLI: Must be installed and available in your
PATH. - Node.js 18+: Required if running the CLI server or building from source.
Troubleshooting
macOS says the app is damaged
If macOS reports that "CodeNomad.app is damaged and can't be opened," Gatekeeper flagged the download because the app is not yet notarized. You can clear the quarantine flag after moving CodeNomad into /Applications:
xattr -l /Applications/CodeNomad.app
xattr -dr com.apple.quarantine /Applications/CodeNomad.app
After removing the quarantine attribute, launch the app normally. On Intel Macs you may also need to approve CodeNomad from System Settings → Privacy & Security the first time you run it.
Architecture & Development
CodeNomad is a monorepo split into specialized packages. If you want to contribute or build from source, check out the individual package documentation:
| Package | Description |
|---|---|
| packages/electron-app | The native desktop application shell. Wraps the UI and Server. |
| packages/server | The core logic and CLI. Manages workspaces, proxies OpenCode, and serves the API. |
| packages/ui | The SolidJS-based frontend. Fast, reactive, and beautiful. |
Quick Build
To build the Desktop App from source:
- Clone the repo.
- Run
npm install(requires pnpm or npm 7+ for workspaces). - Run
npm run build --workspace @neuralnomads/codenomad-electron-app.

