Version 0.3.1 · Linux · MIT or Apache 2.0
A native Linux app for terminal coding agents.
Claude Code, Codex, opencode and a plain shell, each in a real terminal of its own, grouped by project in a sidebar. Each session carries a mark that says whether it is working, waiting for you or done.
No API key
Claude Code, Codex and opencode, as they are.
A session is the agent's own command line program, unmodified, on a terminal. codn talks to no model API
and never sees a token: you log in to claude, codex or opencode as you
always do, and your subscription works as it does in any other terminal.
One list starts any of them, and shows below them the earlier conversations of the project, whether they were started in codn or not. Any other CLI is a few lines of configuration.
# ~/.config/codn/config.toml
[[agent]]
name = "aider"
cmd = "aider" 01
Six marks, and you know where every agent stands.
The mark in front of a session says what it is doing, by its shape and its color. At rest, working, and stopped while you were away come from how its terminal behaves, so they work for any program.
Waiting for you, done and failed a program says itself, over a terminal sequence any program can send. Claude Code does. A desktop notification says when a session you are not looking at needs you, and what for.
The agents a session of Claude Code or opencode sends off are rows below it, each with the last step it reported.
02
What the agent in front says about itself.
A bar along the bottom shows the model and what it runs with and how full the context is, and where the program reports them, how much of the limits is used and how fast it answered last.
The program writes it, codn does not ask: Claude Code through a plugin, Codex through a reporter, opencode through its plugin, each loaded once by you. Claude Code reports all of it, Codex no speed, opencode no limits. A line of shell does as well.
03
What changed, beside the session that changed it.
A click on the branch of a project shows a diff of everything that changed in it, new files included.
04
The files of a project, in a column that folds away.
A file opens beside a session, in the colors of its language for nineteen languages, with what changed since the last commit, and can be changed and saved there.
Markdown is shown as it is meant, a PNG or a plain JPEG as a picture.
05
Two sessions side by side.
Shift and a click opens a session beside the one in front. The bar shows the one you type into.
Colors
Reckoned, not picked.
What codn draws itself is gray, of one hue and told apart by lightness alone. It keeps color for what means something: the state of a session, a line that changed, the parts of the code. So the eye goes where something happens.
Six hues, 60 degrees apart, equally light and equally colorful in OKLCH, so that none of them is louder than another. Their chroma was chosen low, because you look at them for hours. One red alone is louder, on purpose: it warns. The terminal has the same six for the colors a program names by number, so the output of a program and the window speak one language.
- red 15° a key, a removed line, a warning
#e69399 - amber 75° a type, a session at work
#d3a563 - green 135° a string, an added line, done
#92bc7c - cyan 195° a number, the rings of the bar
#53c2c1 - blue 255° a function, a session that waits
#82b1ed - magenta 315° a keyword
#c69bda
- L 0.17
- L 0.20
- L 0.24
- L 0.27
- L 0.29
- L 0.53
- L 0.65
- L 0.84
- L 0.885
pub fn total(&self) -> Meters {
// The length of all legs, in meters.
Meters(self.legs.iter().map(|leg| leg.length.0).sum())
}
let name = "Summit"; No color says anything alone: every state has a shape of its own, and a changed line its plus or minus, for an eye that tells red and green apart with effort.
In numbers
Small, and quiet when nothing happens.
- 32 ms
- to the first frame
- 0.65 ms
- from a key reaching codn to the frame it hands to the compositor, the median
- 0
- system calls in a minute at rest
- 20 MiB
- of memory of its own, with a shell session open
About 8 MB, linked against libc, libm and libgcc alone, and 15 crates, each named with why it is there. Measured with the release build of 0.3.0 on an i7-12700K with a GeForce GTX 980, under Wayland.
How it is built
Rust, and drawn by codn itself.
One process, one window, one draw call.
Everything on the screen is a quad: rectangles, glyphs from an atlas, box-drawing characters as geometry.
Drawn only when something changed.
Nothing runs on a timer while the window rests.
Foreign parsers run apart.
The colors of a file, Markdown and pictures are worked out by a second process with a bound on its memory and its time. A file made to break a parser ends that process, not codn and not your sessions.
The terminal emulator is not ours.
alacritty_terminal parses and keeps the state of a terminal, with small patches, each written down.
Details
What else it does.
Back after a restart.
Sessions return when codn starts again. Claude Code continues its conversation, opencode with its plugin, Codex the one chosen from its history.
A failed agent keeps its session.
It stays in the list with what it printed last, and Enter starts it again.
A repository runs nothing.
codn asks git about your projects with the hooks, monitors and drivers a repository could name switched off.
The clipboard stays yours.
A program can put text on it only in the session you are looking at, and never read it.
Links open on your click.
An address is opened with Ctrl and a click, never by the program, and only one that begins with http or https.
No network code.
codn itself opens no network connection. The only programs that reach a model are the ones you start.
It asks before it saves over.
Where another program changed a file while it was open, codn sees that at saving and lets you choose which to keep.
The sidebar folds to a strip.
It keeps the mark of every session, so the one that waits for you is still seen.
Keys by their place.
Ctrl+Shift+C is the same key on a Russian or a Greek layout, and Shift+Enter makes a new line for an agent.
Get it
Build it yourself.
Needs Rust 1.91 or newer, and no system development packages. At run time codn uses OpenGL 3.3 or OpenGL ES 3.0, fontconfig and git. It runs on Wayland and on X11.
$ git clone https://github.com/hoffmannroman/codn
$ cd codn
$ cargo build --release
$ ./target/release/codn ~/code/my-project Status
Early, and used every day.
Version 0.3 is used every day by its author on Arch Linux with KDE Plasma, and tested on plain X11. Linux only, and no packages yet. It is usable, and it is not finished.
Why it was built is in the first post about it, and what happens on the way on the blog.
Not there yet
- Themes and a light mode
- Search in scrollback
- A worktree per session
- Reordering of projects and sessions
- Projects on another machine
- Packages, and any system but Linux
codn is not affiliated with, endorsed by or sponsored by Anthropic, OpenAI or the makers of opencode. Claude and Claude Code are trademarks of Anthropic, and OpenAI and Codex are trademarks of OpenAI. codn names them only to say which program a session runs, and shows no logo of any of them. The icons in the pictures are Codicons, by Microsoft under CC BY 4.0.