nocx

A terminal that keeps your working context

Tabs, the output they printed, your notes and your secret references are all still there after a restart.

macOS universal · Linux x86_64 AppImage, glibc 2.35+
MIT · v0.3.0, released 2026-08-28 · early release, no formal support

The macOS build is ad-hoc signed and not notarized — there is no Apple Developer ID — so the first launch needs one Terminal command. It is in Install, in full, before you download anything.

Shell transcript exit 0
nocx main
 git log --oneline -3
8422d6f8 Merge pull request #115 from shady2k/fix/resize-vertical-oscillation
165b2f51 chore(beads): close nocx-uus3o
b6f066f4 Merge remote-tracking branch 'origin/main' into pr-115

 go test ./internal/session/ ./internal/settings/
ok    github.com/shady2k/nocx/internal/session   0.155s
ok    github.com/shady2k/nocx/internal/settings  0.006s

 

Real output, captured from this repository — text on this page, not a screenshot of the app. Run the two commands yourself and you get the same thing.

01 — Restore

Close it. Open it. Keep working.

A restart used to cost you everything on screen. Here is exactly what survives one, and the one thing that does not.

WhatBefore you closeAfter you open
Your tabsopenrestored
The output they printedon screenstill readable
The tab you were onin frontwhere you land
Window size, sidebar width, open panelas you left themas you left them
A program that was mid-runrunningnot resumed

The last row is the honest one: what a program printed comes back, the program itself does not. Prefer a clean start? One switch in Settings turns the whole thing off.

02 — Workspace

Five panels, about the machine your tab is on

Tabs group into named, coloured workspaces. The sidebar follows whichever tab is in front, so the context on the left is the context you are typing into.

FILES
the directory the tab is in, and it follows — cd somewhere and the tree moves, with no click and no tab switch
GIT
changed files with line counts · stage · unstage · commit · log — and it refuses what git refuses, visibly
PORTS
what something in the tab is listening on, and the tunnels you forwarded
OPERATIONS
files going to and from the machine that tab is on — drop one on the terminal, or use the Files tree's menu · each transfer cancellable on its own · aggregate progress stays on the activity bar with the sidebar collapsed
NOTES
opens as a tab · saves as you pause · found later by any word inside it, not only its title
HISTORY
encrypted on disk · survives a restart · bounded by retention in days, a disk ceiling and a per-command output cap

03 — Secrets

A reference where the key used to be

Run a command with a key in it and the block offers to store it. What changes is nocx's own record of that command:

you type
TOKEN=<value> ./deploy.sh
↓  save to vault
nocx's record
TOKEN=[vault reference] ./deploy.sh
the vault
encrypted value
↓  recall the command, unlock
on run
reference resolved

That is a claim about nocx's record of the command, and nothing wider. Connection passwords and key passphrases live in the same vault.

04 — Ask

It acts in the scrollback, and every step is a row you can read

A switch beside the prompt sends the line to the assistant instead of the shell. A turn arrives as one entry with everything under it in the order it happened: the prose it wrote, the tools it called, the commands it ran. Scroll back through it later and you are reading what took place, not a summary of it. Restart, and it comes back off disk the same way.

You mark

Nothing attaches itself. A selection offers to be marked; so does one item in the block menu. What is marked is a count on one chip you can open, dismiss from, and scroll to. The question names those blocks and inlines none of their text.

You approve

A proposal to run something reads as a sentence — the command verbatim, the machine it would land on, the tab it would land in. Your answer has a width: once, this session, or always, and each control says what it covers next to itself.

You stop

Stop is on the live turn, where a command's Stop already is. The prose that arrived stays, the turn is marked stopped by you, and the next question works.

While a command is running, ⌘/Ctrl+Enter opens the question box over it — including over a full-screen program that owns the whole grid. The screen holds one frame while the box is open and the program is never told: no resize, no signal, and the frame the assistant reads is the frame you are looking at. Escape gives every key back.

nocx ships an integration, not a model — you configure the endpoint, and retention is your provider's. A standing yes is saved over the exact command you were shown, never over a class of them, and a rule can never be broader than the window that offered it. Settings shows the instructions nocx gives the assistant, unresolved, and a finished turn can show what was sent and what came back, verbatim. Over plain http nocx reaches loopback and private addresses only, checking the address it actually resolved and connected to on every request and every redirect; credentials are dropped on any change of scheme, host or port.

05 — API

An API client whose collections are files in a folder you own

Open a Postman export — a .json or a whole .zip — and it becomes ordinary JSON files, one per request. Edit in a form, press Send, read the response. Two people editing two requests conflict in two files. No account, no cloud, nothing to sign into.

Where it goes

A request leaves this machine, or leaves from inside an SSH connection you already have open. An environment carries both the address and the route to it, so a production request cannot go around its bastion by the two drifting apart.

What it resolves

Variables at three levels — request, folder, environment — edited where you are standing. A request's Variables tab shows the whole scope it will send under, and says which level answered each name.

What the file holds

A credential goes in any field — a header, the URL, the body, Auth — through a lock on the field itself. The file keeps an opaque handle: not the value, and not the name you chose for it.

So a collection you accepted from a pull request cannot reach the password behind an SSH profile, and importing somebody else's export never mints a secret out of what it happened to carry. Responses are read up to 2 MiB; bytes matching a stored secret are removed before the response reaches the window, and a badge says which one was there.

06 — The prompt

The command line is an editor

Built on CodeMirror 6: shell syntax highlighted as you type, commands and paths completed on Tab, the top candidate offered as ghost text.

Completion

  • Tab completes commands and paths
  • directories complete with a trailing slash
  • Tab again walks into them
  • Right accepts the ghost text
  • nothing matches → the panel says so

Snippets

  • save a phrase once, fire it anywhere
  • reaches a program mid-read on stdin
  • multi-line refused without bracketed paste, rather than pasted line by line into something that cannot take it

07 — Boundaries

What it takes in, and what it never builds around you

Imports your hosts

  • ~/.ssh/config
  • a Tabby export
  • passwords and key passphrases → the vault

A connection references a secret rather than carrying one.

Not part of nocx

  • an account — nothing to sign up for
  • a cloud service of its own
  • product telemetry
  • cloud sync

The network it touches is the network you point it at: your hosts, the assistant endpoint you configured, and a check for its own updates. There is no analytics on this page either — GitHub keeps ordinary server logs for it and for downloads, which is theirs.

Install — early release

What will happen when you open it

macOS · universal .dmg

Open the .dmg, drag nocx into Applications. There is no Apple Developer ID, so the build is ad-hoc signed rather than signed by an identity Apple can attest, and it is not notarized — macOS quarantines it on download. Clear that once:

xattr -dr com.apple.quarantine /Applications/nocx.app

Then open it normally; later in-app updates do not re-quarantine it. The reasoning is in ADR-0003.

Linux · x86_64 AppImage

chmod +x nocx-*-linux-amd64.AppImage
./nocx-*-linux-amd64.AppImage

It bundles its own GTK 3 and WebKitGTK, and links against glibc 2.35 — the floor set by building on Ubuntu 22.04. That covers Ubuntu 22.04+, Debian 12+, Fedora 39+, RHEL 9+ and Arch. It is not "runs everywhere": if it will not start and ldd --version reports a glibc below 2.35, your distribution is under the floor.

Updates: nocx verifies its update manifest with an embedded Ed25519 public key. That protects the integrity of its own update channel — it is not an Apple attestation, and the app is neither Developer ID signed nor notarized. Recovery commands are in the README.

Built with

Backend
Go — PTY, SSH, session, transport, settings
Terminal
xterm.js on WebGL
Prompt
CodeMirror 6
UI
SolidJS
Shell
Wails v3
Transport
one WebSocket — binary data plane, JSON-RPC 2.0 control plane