Skip to content

Releases: raiseCatError/notMyShell

v0.17.0 — Context Engine, Themes & Discovery

Choose a tag to compare

@raiseCatError raiseCatError released this 05 Oct 22:32
82985f9

NMSh remains a terminal frontend around a real persistent zsh, Bash or Fish session. v0.17.0 brings native context routing, richer appearance controls, contextual tools and shell/transcript refinements.

Highlights

  • Context Engine foundation and Context Rail: immutable fact metadata, bounded trusted discovery, a native module registry and Surface Router for Main Prompt, Context Rail and Right Context. Rail controls, priority overflow and shared live/preview geometry preserve the independent shell anchor. Repository discovery never executes arbitrary repository-controlled code.
  • Theme Studio and Theme Bridge: built-in, imported and custom themes; bounded data-only imports; opt-in theming for supported tools through reviewed, NMSh-owned files and environment settings.
  • Contextual /tools: Relevant here discovery from cheap local facts, reviewed package-manager plans, bulk selection and factual activation status. Selection bands remain visible away from focus, including reverse video under NO_COLOR.
  • Shell and transcript UX: /transcript, /layout and Settings share Normal / Chat presentation. /shell clearly distinguishes current, default and keyboard focus; indicator visibility and Left / Right placement share the existing prompt module. Side changes preserve Hidden state.
  • Providers and integrations: inline provider choices, Oh My Posh support, shell-framework detection, supported tool configuration, tmux Config Studio, integration health and reviewed dotfiles imports. /btw is canonical local guidance; /ask remains its compatibility alias.
  • Keep Awake: detected OS backends, optional durations and ownership-verified background processes, with composer, status and idle presentation.
  • Presentation polish: expanded screensavers, Setup Cat and semantic focus states, Chroma/theme previews, reproducible demos and the hosted reel.
  • Compatibility, updates and hardening: host profiles, Linux/WSL groundwork, native shell backends, automatic stable-update staging with verification and rollback, and Homebrew provenance protection that prevents the source updater from modifying the Cellar.

Install and update

Homebrew

Homebrew is now available and is the recommended install method on macOS:

brew install raiseCatError/tap/nmsh
nmsh

Update with brew upgrade raiseCatError/tap/nmsh.

Build from source

Source installation remains available. Source installs require Node.js 22+, zsh by default (optionally Bash 4.4+ or Fish), and the native node-pty installation step.

git clone --branch v0.17.0 https://github.com/raiseCatError/notMyShell.git
cd notMyShell
npm install
npm run build
npm link
nmsh

Existing clean official source checkouts can review /update and use /update apply; automatic updates follow the same checks. Homebrew-owned installs are directed to Homebrew rather than mutated by NMSh.

Scope and validation

Installable declarative Context Packs, broader capability scheduling and a fuller first-party module catalog remain upcoming; no finalized pack SDK or executable plugin API is shipped.

Full macOS/Ubuntu suites, Node 22 compatibility, Fedora portability, build/type checks and bounded timing smoke passed on the release commit. Linux/WSL and additional terminal hosts have automated/profile coverage; physical validation on those platforms/hosts is not claimed.

Full changelog

v0.16.0 — Sessions, Agents & Portability

Choose a tag to compare

@raiseCatError raiseCatError released this 04 Oct 17:15

notMyShell v0.16.0

NMSh grows into a more complete workspace around your real shell: live sessions, agent activity, richer completion, local help and a calmer, more configurable interface. This release brings the work planned across v0.8–v0.15 together with v0.16.

Highlights

  • Switch between zsh, Fish and Bash without giving up the NMSh composer and transcript.
  • Find live sessions, track attention and inspect agent activity.
  • Explore richer completion, smarter history and local Ask.
  • Customize appearance, cursor effects and Clean or Rich motion through expanded Setup.

Shells & sessions

/shell supports zsh, Fish and Bash 4.4+, with a default-shell setting for new sessions. Persistent sessions keep commands running when a window detaches; /resume and /sessions show factual state and duration. Short-lived notices surface changes in other sessions. /agents offers local activity statistics, while /ai brings managed and observed agent sessions into view.

Ask, completion & tooling

Ask explains NMSh capabilities, with optional local Qwen understanding configured through /llm. Downloads always require confirmation. Completion combines live shell knowledge with static Fig and Carapace data and custom specs. History gains context ranking and filters. Optional providers, project tasks, mise awareness, /watch and a curated /tools catalog help with everyday work.

Appearance & interaction

/appearance brings prompt, cursor and motion controls together. Clean and Rich motion have their own tuning; cursor effects use portable rendering or supported host integration. Expanded Setup, grouped Config and Status, paste preview and review, transcript find/filter, editor opening and diff viewing make the interface easier to navigate. Images and links use capability checks and fallbacks.

Maintenance / portability

/doctor reports local diagnostics. Export/import moves settings between machines, and uninstall previews launcher removal while keeping data by default. Linux/WSL groundwork and host capability handling are included; physical Linux/WSL and additional terminal-host validation remains follow-up work. Host-specific effects depend on what your terminal supports.

Upgrade

From a clean official source checkout, use /update, review the plan, then /update apply. Restart NMSh to load the new build. Existing configurations are preserved and migrated where needed; updating does not replace your shell profile or remove transcripts. Older session services keep their live sessions running, but a newer frontend may not attach to sessions from an incompatible protocol version. Finish those sessions with the older frontend if needed.

Source installs require Node.js 22 or newer: npm install followed by npm run build. The package remains private and is not published to npm.

v0.7.0 — UI Foundation & Customization

Choose a tag to compare

@raiseCatError raiseCatError released this 30 Sep 19:56
b42aa40

UI Foundation & Customization: a shared internal UI toolkit (notMyUI), Chroma color roles, reduced-presentation modes, Markdown-authored help, and Settings v2.

Added

  • notMyUI toolkit: an internal presentation and interaction foundation for NMSh-owned surfaces (not a published package). docs/architecture/notmyui.md maps each primitive to its real consumers and lists what is deliberately not built.
  • Shared actions and contextual help: panel and palette actions share one model (identity, label, key, enabled state), and footer help is derived from it, so it stays in step with what a panel can actually do.
  • Shared form controls: toggles, selects, multi-selects, text fields and confirmations are reusable controls that report proposals while the feature layer persists. Settings rows and Settings search use them.
  • Accessibility baseline: NO_COLOR (or TERM=dumb) stops NMSh-generated color escapes while bold, inverse and glyphs remain. NMSH_COLOR=none|256|truecolor overrides the color level explicitly. NMSH_REDUCED_MOTION=1 holds the shimmer and the welcome blink still while durations keep counting. Focus, changed and error states are also carried by text or glyphs, not color alone. See docs/accessibility/baseline.md for criteria and known gaps.
  • Deterministic presentation: NMSH_DETERMINISTIC=1 fixes the displayed completion time, the shimmer and activity phase, and the welcome blink for repeatable captures, and implies reduced motion. Shell behavior, PTY output and measured durations stay real. See docs/testing/deterministic-presentation.md.
  • Chroma: shared color roles for NMSh-owned UI in three distinct categories (semantic status, theme and identity colors), plus gradients and curves, with truecolor, 256-color and no-color fallback.
  • Surface primitives: frames, fills, padding, insets, width and alignment, used by the shared panel frame.
  • Semantic motion engine: a pure engine of motion profiles per state, sampled at an elapsed time. It owns no timers and never changes width. The existing running-command shimmer and activity glyph now run on it.
  • Authored Markdown and /help: /help renders NMSh-authored Markdown (headings, tables, code fences, tips, links). Through the transcript, links appear as text (url) rather than clickable hyperlinks.
  • Settings v2: a simple and an advanced view, a changed marker on settings that differ from their defaults, reset of the current setting, search, and a remembered position within a run.

Notes

  • Authored Markdown applies to NMSh-owned content only. Raw PTY output, transcript command output, /copy and archived shell data are never interpreted as authored UI content or recolored.
  • Not included: automatic 256-color detection (NMSH_COLOR=256 selects it), a persisted reduced-motion setting, user key remapping, a shared animation scheduler, Linguist language colors (#176) and transient visual effects (#78). Screen-reader behavior is unverified, and not every surface uses authored Markdown yet.

v0.6.0 — Sessions & Continuity

Choose a tag to compare

@raiseCatError raiseCatError released this 29 Sep 16:27
04496ec

Sessions & Continuity: persistent live sessions you can detach from and reattach to, a Flow composer, and a /layout showcase.

Added

  • Persistent live sessions: zsh now runs in a small per-user session service (nmshd, started on demand over a private Unix socket), so closing a window detaches its shell instead of ending it. Running commands keep going. exit, Ctrl+D and /zsh still end the session. NMSH_SESSION_SERVICE=0 runs the shell in-process as before.
  • Reattach: get back to a detached session from the startup prompt, from /resume (LIVE sessions are listed above ARCHIVED transcripts; Enter attaches, and Ctrl+K kills after confirmation), or with nmsh --attach <id>. nmsh --sessions lists live sessions, and nmsh --new always starts a fresh one. A session attached in another window is never taken over.
  • Output while detached: what a detached session prints is kept (1 MB in memory, then up to 64 MB spooled to disk; NMSH_BACKLOG_MEMORY_BYTES, NMSH_BACKLOG_SPOOL_BYTES). It is added to the transcript on reattach, with a note of commands that completed and anything that exceeded the limit. Fullscreen apps are repainted at the new window size.
  • Multiplexer interoperability notes: docs/architecture/multiplexer-interop.md records how NMSh behaves inside and around tmux and GNU screen (rendering, resize, job control, fullscreen, paste, and live-session detach when a pane closes), what remains unverified (Zellij), and follow-ups. NMSh stays independent of any multiplexer.
  • Live session status: /resume LIVE rows and nmsh --sessions show what each live session is doing, from evidence only: the running command and elapsed time, the foreground process or a known CLI's name (Claude Code, Codex, Aider, …), active or quiet output, needs attention when the program sent a terminal notification or bell, fullscreen, the title it set, and the last command's result while idle. Nothing is guessed, and paths under your home directory are shown as ~/….
  • /layout showcase: preview composer position (Bottom, Top, Flow) × transcript presentation (Normal, Chat) on sample content through the real renderer, then save and apply live. Also under Config → Layout. Nothing in the preview runs or reaches the transcript, journal or /copy.
  • Flow composer: Config → Composer position → Flow (the command palette's Toggle composer position cycles Bottom, Top and Flow). The prompt and input follow the newest output inside NMSh's document, like a conventional terminal, and scroll with it. Typing while scrolled back returns to them; scrolling alone does not. Menus open below the input, panels pin to the bottom, and Chat presentation and fullscreen passthrough work as before.
  • Startup restore is your choice: Config → Sessions → Startup restore (Ask, the default; Always; or Never) and Multiple detached sessions (Ask which, or Open all). With one detached session, NMSh asks: Resume, Not now, Always or Don't resume at startup. With several, a picker restores the ones you select: this window takes one, and the others open in new Ghostty, Terminal.app or kitty windows. Where a host can't open windows, NMSh names the nmsh --attach command for each. Never only skips restoring at launch; it never ends a session.
  • Live-session hardening: live sessions that end while no window is attached are archived at the next launch or /resume, with the real exit code or a note that the service stopped or the system restarted. Output captured while detached is kept. A frontend that loses its service reports it and archives the transcript. /resume shows how long each idle live session has been at its prompt.
  • Exactly-once archiving: launch recovery, Kill Session and live journal checkpoints share a cross-process lock per journal, so concurrent launches never archive a session twice or overwrite a complete archive with partial state.
  • Fullscreen reattach: reattaching to a running fullscreen app restores the terminal modes it had turned on, including mouse reporting and bracketed paste.
  • Safe updates: each session-service protocol version has its own socket, so live sessions owned by an older service keep running after an update. A newer frontend never touches sessions it cannot verify, and it tells you they exist.
  • Session limit: at most 16 live sessions per service (NMSH_MAX_SESSIONS). When the limit is reached, a new window falls back to an in-process shell with a notice. Detached sessions are never ended to make room.

Fixed

  • Interactive terminal UIs that draw inline (agent CLIs such as Claude Code, including under a wrapper or alias like claude-account2) now get the terminal. NMSh hands over as soon as a running program turns on terminal input modes (bracketed paste, mouse, focus events or the kitty keyboard protocol), not only when it switches to the alternate screen or has a known name. Keys reach the program, NMSh's composer steps aside, no control sequences leak into the transcript, and the same applies after reattaching. Ordinary commands, including progress output, stay in NMSh.
  • Restoring several detached sessions (the startup picker or Open all) opens every selected session again. NMSh used to exit while waiting for the first extra window to open, printing "Detected unsettled top-level await": only that window appeared, and the current window never attached. In Terminal.app this looked like nmsh failing to start. A window launcher that hangs now times out after 15 s, and that session's nmsh --attach command is named instead.
  • Ctrl+Z suspends the foreground job again (raw ^Z and the Kitty keyboard encoding), and jobs and fg work as in plain zsh.
  • After Ctrl+Z, jobs could list a stray suspended (tty output) job. NMSh's own prompt hook ran stty as a job, and it could be stopped when it ran before zsh had taken the terminal back. The hooks now change terminal modes outside job control.
  • The session service no longer crashes when a window resize races a shell's exit. node-pty could throw EBADF for a PTY that had just closed, which inside nmshd would have ended every live session. Other resize failures are now reported to that window instead of ending the service.
  • A launch notice (for example, sessions archived while no window was attached) is no longer erased when the window reattaches to a live session.

Removed

  • scripts/pty-history-smoke.mjs: its checks had gone stale (it asserted retired UI text), it ran against the real config and live session service, and deterministic tests now cover everything it checked.

v0.5.0 — Interaction & Intelligence

Choose a tag to compare

@raiseCatError raiseCatError released this 28 Sep 12:27
bd3e455

NMSh v0.5.0 brings predictive suggestions, new layouts and presentations, a command palette, and a shared provider framework.

Highlights

Suggestions

  • NMSh Native Suggestions v2: ghost text ranked by fuzzy and acronym matching, frecency, the current directory, and what usually follows your previous command. → / End accepts, Alt+→ accepts the next word, Ctrl+N / Ctrl+P show ranked alternatives, and Esc dismisses. Empty-prompt prediction is optional. Everything stays local, and leading-space and HISTORY_IGNORE commands are never suggested.
  • Optional Deja provider: uses an installed Deja while NMSh draws the ghost text. It falls back to Native if Deja is missing or unhealthy.

Layout and presentation

  • Dock Top: put the composer at the top (Config → Composer position). The newest output and live activity stay together.
  • Chat presentation: commands align right and output stays left (Config → Transcript presentation). It works with Top or Bottom, and stored transcripts and /copy are unchanged.
  • Command palette: /palette, F1, or Ctrl+Shift+P to search NMSh commands, settings, and actions. It only runs NMSh actions, never shell text.

Providers and prompt

  • Welcome providers: Vespyr (default), Fastfetch with your own configuration, Neofetch (legacy, if installed), or None. /resume keeps each session's original welcome.
  • Shared provider gallery in /settings with installed/missing/version status, previews, explicit install confirmation, and safe fallback.
  • Native prompt styles: Powerline, Soft, Minimal, and Outline, with Safe glyph fallbacks.

Output

  • Output folding modes: Off, Smart (default), and Always.

Fixes

  • NMSh-owned Homebrew installs find brew in its standard Apple Silicon and Intel locations.
  • Right-aligned Chat commands keep their final character at the terminal's last column.
  • The command palette list stays stable and scrolls only at its edges.

Known limitations

  • Completion, richer History, and Picker providers are future work. Configured-zsh completion parity and fzf-tab are not supported yet (#52).
  • Flow / Classic composer mode and persistent live sessions are not included.
  • Deja is optional and not bundled. Neofetch is archived upstream and never installed by NMSh.
  • NMSh renders with truecolor. There is no separate 256-color mode.
  • Command-completion desktop notifications are not part of this release.

Full notes are in CHANGELOG.md.

notMyShell v0.4.0 — Shell Intelligence & Extensibility

Choose a tag to compare

@raiseCatError raiseCatError released this 25 Sep 19:15
54c7205

NMSh v0.4.0 brings a richer, context-aware prompt, calmer command output, and a new settings, session, and update foundation.

Highlights

Prompt

  • Right-side prompt context: any module can sit left or right (/prompt → Modules, P). The right side mirrors its geometry to face left by default (M) and is the first thing dropped on narrow terminals.
  • Show-on-command modules: Kubernetes and Docker context, and optionally toolchains, appear only while a relevant command is typed. Typed text is never executed.
  • Intelligent directory shortening: a width-aware path that keeps the repository name and current directory whole.
  • Richer Git state: staged, modified, untracked, conflicts, ahead/behind/diverged, operations, and a clean marker, with a dedicated Rich Git view. Also new: connector fade, fade colors, and Gap Wide.
  • Deterministic prompt showcase in /prompt, rendered by the real renderer.
  • Starship module editor with previewed, confirmed, and backed-up changes, plus a Powerlevel10k configurator handoff.

Output and history

  • Smart output folding: long, repetitive successful output folds to its first 3 and last 5 lines, while failures and useful output stay expanded. Ctrl+O expands, and /copy and /resume keep the full output (Config → Output folding: Smart / Never).
  • Sticky command headers while scrolling.
  • Continuous session journal and advanced /resume: interruption-safe checkpoints, search, and day/week/month navigation.

Editor, settings, and tooling

  • Theme-aware syntax highlighting and /syntax.
  • Central /settings (Settings / Status / Config) on a shared panel shell with consistent Esc/back navigation.
  • Glyph compatibility choice (Nerd Font or Safe/ASCII) on first run, persisted.
  • Reusable task progress for long-running installs.
  • /update reports newer releases and safely updates a clean official source checkout. Background checks are opt-in.
  • Compatible zsh hooks from your own config (zoxide, Atuin) keep working, and shell-theme prompts no longer leak into command output.

Known limitations

  • Configured-zsh completion parity and fzf-tab interoperability are not supported yet (#52).
  • Command-completion desktop notifications are not part of this release.
  • Powerlevel10k: NMSh shows only its left prompt. The right prompt, gitstatus daemon, and instant prompt are not reproduced.
  • Nested activity is limited to directly observed Node TAP v13 streams.
  • /update apply automates only clean source checkouts of the official repository.

Validated in Ghostty. No npm package is published. Full notes are in CHANGELOG.md.

notMyShell v0.3.0 — Session & Interaction UX

Choose a tag to compare

@raiseCatError raiseCatError released this 24 Sep 02:34
d0725d4

This GitHub/source release completes the v0.3.0 Session & Interaction UX milestone. The final candidate passed human visual and interaction validation in Ghostty, Terminal.app, and VS Code integrated terminal.

Highlights

  • Prompt and appearance: NMSh Native, optional Starship and Powerlevel10k prompt providers; five Native themes; independent Start, Connector, Gap, and End geometry; configurable icons and module manager.
  • Composer and history: one-line and two-line layouts, historical semantic prompt snapshots, and /transcript controls for dividers, prompt visibility, color, and density.
  • Session interaction: /clear archives history without replacing the live zsh; /resume restores archives; /zsh hands off to ordinary interactive zsh; nested NMSh is rejected.
  • Input and activity: exact-source rich paste atoms, nested activity rows for observed Node TAP streams, and a fresh-session welcome header with build identity.
  • Version identity: /version and --version expose notMyShell 0.3.0.
  • Final passive-hover fix: the last release-candidate fix preserves ordinary terminal text selection while providing optional passive hover feedback where the terminal host supports it (PR #82).

Known limitations

  • Native fzf-tab support remains future work (#52).
  • Powerlevel10k does not reproduce its right prompt, gitstatus daemon, instant prompt, or settings defined only in .zshrc.
  • Nested activity covers directly observed Node TAP v13 streams.

The release candidate passed npm ci, build, typecheck, 239/239 automated tests, the slow TAP fixture (2/2), diff check, and build identity verification. Release PR CI passed on Node 22 and Node 26. The package is private; no npm publication was performed.

v0.2.0 — Structured Execution

Choose a tag to compare

@raiseCatError raiseCatError released this 23 Sep 11:42
6128b02

This GitHub/source release introduces the v0.2.0 Structured Execution milestone, focusing on intelligent output presentation and factual lifecycle feedback.

Highlights

  • Structured Presentation: Dynamically categorizes PTY execution into INLINE, FOLDED, LIVE, and PASSTHROUGH modes based on output behavior.
  • Output Folding: Long, noisy output is automatically folded. You can expand/collapse specific commands via local click controls or toggle global details using Ctrl+O.
  • Full PTY Preservation: Raw output is preserved completely—using /copy correctly captures all hidden/folded lines without presentation chrome.
  • Factual Command Lifecycle: Replaces arbitrary loading messages with deterministic status reports (e.g., Running npm test).
  • Deterministic CLI Summaries: Specialized output adapters silently parse output from tools like npm, jest, mocha, git, Node TAP, and brew to render concise rich status summaries (e.g., 142 passed).
  • Native Selection Preservation: Shift+drag native terminal text selection is safely maintained alongside NMSh's interactive features.
  • SemanticService Resilience: Hardened background completion/highlighting service to safely bypass host-specific interactive initialization (e.g. macOS Terminal.app) and prevent deadlocks on unexpected exits.
  • Validated Compatibility: Human-verified PASSTHROUGH support for interactive TUIs (vim, nano, fzf), and robust runtime stability across Ghostty, macOS Terminal.app, and tmux.

NMSh v0.1.0

Choose a tag to compare

@raiseCatError raiseCatError released this 22 Sep 21:36

NMSh v0.1.0

The first public release of NMSh.

NMSh is a terminal frontend for a real persistent zsh session, adding a fixed bottom editor, semantic highlighting, autocomplete, scrollable history, and richer command feedback while preserving normal shell behavior.

Highlights

  • Persistent real zsh session
  • Fixed bottom multiline editor
  • Semantic command highlighting
  • Highlighted submitted-command history
  • Shell-aware completion and history suggestions
  • Animated command lifecycle feedback
  • Scrollable history viewport
  • Fullscreen application passthrough
  • Ghostty keyboard and appearance integration

Compatibility

  • macOS
  • zsh
  • Ghostty is the primary development host
  • macOS Terminal and VS Code terminal have partial/documented compatibility

Known limitations

  • Native mouse / Shift-drag selection behavior still has rough edges
  • Complex third-party ZLE UI plugins are not directly portable
  • Zsh semantic highlighting is intentionally not a complete parser
  • Multi-shell support is future roadmap work

Installation

See the README installation instructions for how to build and link from source.