Download

Claude Code·Codex·OpenCode·your runner

Nojace

A symphony of agents. + your custom workflows.

said no · jace

Every agent. One window.

Run Claude Code, Codex and OpenCode or configure your runner, side by side, and see which one is working and which one needs you. Then turn the things you do every day into plugins: logins, deploys, pods, proxies, your own scripts. Nojace becomes the place you build and ship from.

29 MBthe whole app, with a Rust core
~46 MBof memory for the core process
0bundled Chromium: it uses the system's own WebKit
GPUterminals, with huge transcripts tailed in Rust

what it does

Everything you need while agents write the code.

sidebar

Every session, by folder

Sessions come from each CLI's own store, so the ones you started in a terminal show up too. Workspaces narrow the list; Recent shows only what you touched in the last two days.

signals

Know when you're needed

A green dot means working, yellow means it's waiting for you. A notification arrives when an agent finishes or asks something.

±review

Review, then send

Changed files open as diffs. Comment on any line, then send every comment to the agent as one message. Stage, revert a hunk, commit, push.

❯terminal

The real CLI

Each tab runs the actual claude, codex or opencode. Slash commands and the full TUI work as they do in your terminal. Paste a screenshot or a copied file and it's attached.

◆toolbox

Your workflow, one click away

Logins with live status, deploys, shells into pods, proxies to keep running, any script you run often. Keep a plugin to yourself, or share it with your team.

🎙voice

Speak instead of typing

Hold ⌥Space (Right Ctrl on Linux) and talk; the words land where you were: the agent's terminal, a text box or the editor. Apple's on-device speech on the Mac, or whisper.cpp for code words and names.

▤usage

See how you use them

⌘⇧U shows prompts, tokens, folders and models per agent, how long they waited on you, Toolbox runs and dictations. Sessions run outside Nojace count too.

⇡remote

Your other machines

Connect a devbox server to see your machines and what's running on them, hand a folder off, and bring it back.

⌘Pfind

Find any chat, or ask

⌘P opens on your recent sessions and searches them all. Or pick Ask AI: "where did I work on the transaction lake?" is answered in place, with links to the chats it found.

✦explain

See how a change flows

Explain changes lays your diff out on a canvas: each changed function as a card, in the order the code runs, with arrows for what calls what. Click a name to follow it.

🕸mind maps

Mind maps of all your chats

Insights draws your chats as graphs you can drag around: the business behind your work, the tech it touches, or the topics, rebuilt on a schedule with every build kept.

⌁phone

From your phone

Follow and answer your agents over Tailscale or your Wi-Fi, with a pairing key. Nothing is exposed to the internet.

workspaces

One sidebar for every project, focused when you need it.

A workspace is a named set of folders. Switch to one and the sidebar shows only its folders and their sessions, so a client, a side project or an open-source repo each gets its own calm view.

  • Recent is built in: only the folders you worked in over the last two days, or where an agent is busy right now.
  • A folder can be in several workspaces; taking it out of one leaves the others alone.
  • A yellow dot on the menu tells you a folder outside this view needs you, so focusing never means missing something.
  • Worktrees follow their repo, and the Toolbox isn't filtered: your tools stay the same in every workspace.
  • Rather see sessions than folders? ☰ (⇧⌘L) lists them as one list, the ones you used in the last 15 minutes first, each with the folders it worked in.

insights

Agents that remember what you already told them.

Turn on Insights for a workspace and every Claude, Codex and OpenCode session started in its folders begins with a short memory: how you like things done, how your systems connect, the traps you've hit. It's gathered from your own sessions, and you decide what stays.

  • Gathered from two things only: what you said to an agent, and what an agent figured out by investigating. One-off fixes are left out.
  • Every suggestion is yours to Remember or Dismiss; nothing joins the memory on its own.
  • Secrets are stripped before anything is read, and the gatherer runs without tools and saves no session.
  • Runs after sessions finish, once a day, or only when you press Gather now, per workspace.
  • Nothing is written into your repos: the memory reaches agents when their session starts, new or resumed.
  • Maps draw your chats, from any folders you pick, as Business, Tech or Work-topics graphs, and keep every build so you can go back.

ask ai in search

"Where did I work on that?" Ask, and jump straight there.

⌘P opens on your ten most recent sessions and searches every one by name, folder and first prompt. When you can't remember the name, pick ✦ Ask AI: an agent searches all your Claude and Codex chats, read-only, and answers right in the palette with the sessions it found. / switches to files and > to commands.

  • The answer appears in place; Continue chat turns it into a session if you want to keep asking.
  • It can only cite sessions that exist, and it never changes anything: it reads with rg, nothing else.

folders or sessions

See your work by folder, or as one list of sessions.

The sidebar groups sessions under their folders. Working across five repos at once? Switch to ☰ sessions (⇧⌘L): one list, the ones you used in the last 15 minutes first, then today and earlier, each with the folders it worked in beside it.

explain changes

A diff reads top to bottom. Code doesn't run that way.

Press ✦ explain in Changes and your uncommitted change opens as a canvas: every changed function as a card, numbered in the order the code runs, joined by what calls what, with the unchanged code you need to follow it. Step through it, drag it around, and click any name to open where it's defined.

  • Every card's code is read from your files; the agent only decides what to show and in what order, and anything it names that isn't there is dropped.
  • Changed lines are marked, removed ones counted, and context cards show the caller or callee you need.
  • One click explains the whole change, or ✦ on a single file. It runs read-only with Claude or Codex.
  • Click any name in a card and its definition opens as a new card beside it, so you keep following the code outwards.

mind maps

Everything you've worked on, as a mind map.

In Insights, a mind map reads the chats from the folders you pick and draws them as a graph you can drag around: the business behind your work (products, customers, processes, data), the tech it touches (services, stores, infra), or the topics you worked on. Every node says what was done or decided, links to its chats, and shows how it connects.

  • Pick what a map covers: all folders, a workspace, or folders you tick. Keep as many maps as you like.
  • Rebuilt after chats finish, once a day, or when you click, and every build is kept, so you can go back to what a map looked like.
  • The Timeline in Usage draws a map over time: what you worked on when, each chat a bar you can open.

toolbox

The things you do every day, right next to your agents.

Switch the sidebar to Toolbox. Each plugin gets a tab, its actions sit in cards, and the badges tell you before you click whether a login has expired.

GitHub

reviewweb #212api #872 waiting on you
yourschecksre-run failed✗ 1 failing

Meetings

nextJoin standupin 6 min
todaydesign review 14:00 · 1:1 16:30

Games

breakchess puzzletyping racewhile agents work

Services

dev serverrunning · :5173StopLog

Safe by default

  • Nothing in a plugin runs until you approve it. Approval covers every file, scripts included, and is asked again after any change.
  • Every button shows its exact command and asks before running.
  • Anything marked as production asks you to type its name.
  • If a login it needs has expired, Nojace offers the login first.
  • Logins and shells can keep no log, so tokens never land on disk.

Comes with plugins

Containers for Apple's container on macOS 26 (Docker on Linux), and GitHub for pull requests waiting on you, with checks and re-runs. Add them from + Plugin.

write a plugin

Turn a command you type every day into a button.

A plugin is a folder with a nojace.json and the scripts you already have. The JSON says what exists; the commands do the work. Here is a deploy button, built up in four steps.

  1. Make a folder

    Anywhere you like: keep it to yourself, or put it in a git repo your team shares. Or use + Plugin → Create your own: pick a name, a folder and the agent to build it with, and it opens as a working hello-world plugin.

    # a folder per team
    my-team/
    ├── nojace.json
    └── scripts/
        └── envs.sh
  2. Describe the button

    One button per environment, a service to pick, and the command to run. {{item}} and {{service}} are filled in and shell-quoted for you.

    nojace.json
    {
      "$schema": "…/docs/nojace.schema.json",
      "format": 1,
      "name": "My team",
      "actions": [{
        "id": "deploy", "group": "Deploy", "row": "Deploy",
        "each": { "run": "./scripts/envs.sh" },
        "inputs": [{ "id": "service", "options": ["api", "web"] }],
        "run": "mycli deploy {{item}} {{service}}",
        "title": "deploy {{item}} {{service}}"
      }]
    }
  3. Feed it live data

    Lists come from your CLI, never hardcoded. A script prints JSON on stdout, errors on stderr, and never prompts. Mark production so the button turns red and asks for the name.

    scripts/envs.sh
    #!/bin/sh
    # one button per environment
    mycli envs --json | jq '[.[] | {value: .name}
      + (if .name == "prod"
         then {tone: "danger"} else {} end)]'
    prints
    [
      { "value": "dev" },
      { "value": "prod",
        "tone": "danger" }
    ]
  4. Add it and approve

    Open Toolbox → + Plugin, paste the folder path or a git URL, and review what it will run. Save the file and the Toolbox reloads by itself. Typos show up right away with the field and a fix, for example keeplog: did you mean "keepLog"?

Or let your agent write it

The repo ships a skill that teaches Claude Code and Codex the format and the safety rules. Link it once, then ask in plain words.

# once
ln -s "$PWD/skills/nojace-plugin" ~/.claude/skills/nojace-plugin

# then, in any session
❯ add a Toolbox button for "mycli logs <env> <service>", prod in red
Build blockUse it for
actiona button: run, optional inputs, grouped with group and row
eachone button per item from a command: envs, clusters, regions
checka ✓ / ✗ badge next to a button, re-run every few minutes
needsa check that must pass first, like a login before a deploy
servicesomething that keeps running: start, stop, log, restart to apply new choices
lista table from a command, with on/off toggles or buttons on each row
tone · keepLogred for production; no saved output for logins and shells

The full format, with every field, ships with the app in docs/plugins.md.

configure

Plugins say what's possible. Your choices stay yours.

Your side of every plugin lives in one readable file. Back it up, move it to a new machine, or edit it by hand while the app is closed.

~/.nojace/plugins.json
{
  "plugins": [{
    "name": "My team",
    "source": "~/work/my-team",
    "buttons": [{
      "label": "Deploy api dev",
      "action": "deploy",
      "inputs": { "item": "dev", "service": "api" }
    }],
    "services": { "tunnel": { "port": "5173" } },
    "presets": { "tunnel": [{ "label": "demo", "vals": {…} }] }
  }]
}
WhatHow
Your own buttonsIn any action's dialog, choose the inputs and press Save as button.
Service choicesPick a service's options, like a port or an environment; save them as a preset to switch in one click.
ApprovalsStored with a fingerprint of every file, so any change asks again.
WorkspacesNamed sets of folders for the sidebar; a folder can be in several. Recent is built in.
AgentsTurn agents on or off, add extra arguments, or add any CLI as your own agent in Settings.
LayoutChat and code side by side, more of one, or only one, from the Layout menu.

devbox

Push your work to a server. Pull it back when you're back.

Leaving your desk with agents mid-task? Push the folder and its sessions to your devbox, a machine in the cloud or one you attach. The agents keep going there. When you're back, pull the work home and carry on from where they got to.

How it works for you

  • Connect a devbox server in Settings → Remote (or 🛰️ in the sidebar) and sign in through the browser.
  • See your machines and what's running on each; hand a folder off and bring it back.
  • Your files move through your own devbox connection: no SSH keys or git tokens on the server.
  • Preview what's running there over HTTPS, without opening a port.

Set up once

  • Start a cloud machine, or attach a Mac or Linux box you already have.
  • Admins define the cloud accounts, machine types and workspace rules; developers never see the credentials.
  • Each machine has one owner, with costs and an audit trail.
# leaving: send this folder and its sessions
devbox push
# …agents keep working on the devbox…

# back: bring it all home and resume
devbox pull

# or from Nojace: the Remote view lists your machines and what runs on them

Nojaceno · jace

Nojace doesn't mean anything, on purpose. It isn't "code editor", "agent manager" or "terminal", because it's a bit of each and becomes whatever your plugins make it.

Short to type, easy to say, and yours to fill in.

Get Nojace.

Free for your Mac, signed and notarized by Apple. It updates itself from then on.

macOS 11 or later · Linux coming soon: Ubuntu, Debian, Fedora and AppImage

Install notes
SystemFileInstall
macOSNojace_<version>_aarch64.dmg (Apple silicon) or _x64.dmg (Intel)Open it and drag Nojace to Applications.
Ubuntu, DebianNojace_<version>_amd64.deb or _arm64.debsudo apt install ./Nojace_<version>_amd64.deb
FedoraNojace-<version>-1.x86_64.rpm or .aarch64.rpmsudo dnf install ./Nojace-<version>-1.x86_64.rpm
Any LinuxNojace_<version>_amd64.AppImage or _aarch64.AppImagechmod +x it and run it. Needs libfuse2 on Ubuntu 22.04 and later.

On Linux, app shortcuts use Ctrl+Shift so plain Ctrl reaches the terminal, and terminals copy and paste with Ctrl+Shift+C / V.