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.
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.
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 —
cdsomewhere 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
- nocx's record
- TOKEN=[vault reference] ./deploy.sh
- the vault
- encrypted value
- 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