Repository navigation
Releases: egeyesss/overterm
Release list
v1.1.0
Added
- Codex desktop threads as tabs. Pick a thread from the Codex desktop app and it opens as a chat tab in oTerm. You can follow the conversation live, send a message (or add to the turn Codex is already running), stop it with Esc, and answer its approvals. The window reacts to Codex working, waiting and finishing the same way it does for terminal agents. oTerm joins the desktop app's local bus to do this, so the Codex desktop app has to stay open. macOS only for now. (@alexsmolya, #36)
- Search in the thread picker. Matches the title you see, ignoring case, across your last thousand threads. (@alexsmolya, #51)
- Every approval choice Codex offers. The buttons now match what Codex offers for that request, such as "Allow similar commands" or allowing or blocking a network host. "Decline and stop" is labelled separately because it also ends the turn. oTerm only ever sends a choice Codex actually offered. (@alexsmolya, #48)
- Markdown in Codex replies. Headings, lists, bold, inline code, code blocks, links, quotes and tables. Names like
__init__andsrc/**/*.tsstay as written, HTML in a reply shows up as plain text, and a link whose text names a different site shows the real host next to it. (@alexsmolya, #50)
Fixed
- Codex tab paths show your home folder as
~on every platform. (@alexsmolya, #49) - Two tests that failed now and then on a busy macOS CI runner now wait on what they check instead of racing it. (#52, #53)
What's Changed
- feat: track read-only Codex live state by @alexsmolya in #36
- fix: shorten Codex tab paths on all platforms by @alexsmolya in #49
- feat: add Codex thread picker search by @alexsmolya in #51
- fix(platform): stopped the argv rename test racing node startup by @egeyesss in #52
- feat: expose all Codex approval decisions by @alexsmolya in #48
- feat: render common Markdown in Codex replies by @alexsmolya in #50
- fix(app): stopped the paged search test racing its own kill by @egeyesss in #53
- chore(release): released 1.1.0 by @egeyesss in #54
Full Changelog: v1.0.4...v1.1.0
v1.0.4
Added
- In-app update notifications. oTerm now asks GitHub for the newest release when it starts, at most once every six hours, and puts a small dot on the settings control when one is out. The sheet names the new version and has a button that runs the same install line the README gives, in a session you can watch rather than behind a progress bar. There's a switch beside it for anyone who would rather nothing reached out on launch. (@Tanker7, #37)
Fixed
- The Desktop, Documents and Downloads permission prompts no longer come back on every launch. Every release through 1.0.3 shipped a bundle carrying only the signature the linker leaves on the binary, which macOS could never match against a stored file access grant, so it asked again on every file a session touched. The bundle is now signed with sealed resources during the build. (#30)
- The Linux
process_name,process_path,process_argsandprocess_cwdlookups are filled in against/proc. Prep work for the eventual Linux port; nothing user-visible on macOS yet. (@alexsmolya, #34)
What's Changed
- ci(release): opened the Homebrew cask bump from the workflow by @egeyesss in #23
- docs(porting): added a Windows port guide by @egeyesss in #26
- fix(bundle): signed the app so macOS keeps a folder access grant by @egeyesss in #30
- fix: cleaned up misplaced comments and a few small bugs by @egeyesss in #32
- ci(app): added Linux and Windows jobs for the app crate by @egeyesss in #35
- fix(linux): fill in /proc process lookups by @alexsmolya in #34
- Notice a new release and add an update button to the settings sheet by @Tanker7 in #37
- chore(release): released 1.0.4 by @egeyesss in #38
New Contributors
- @alexsmolya made their first contribution in #34
- @Tanker7 made their first contribution in #37
Full Changelog: v1.0.3...v1.0.4
v1.0.3
Added
- Pi support. Pi sessions are recognised and get their own tab mark, label and detection patterns, instead of showing up as
node. - Pi reports its own turns. oTerm installs an extension into
~/.pi/agent/extensions/so a Pi session says exactly when a turn starts, finishes or needs you, rather than being read off the screen. There is a switch for it in the settings beside the Claude Code one, and deleting the file sticks.
Fixed
- A turn short enough that the window never collapsed no longer takes the terminal's keyboard focus. Answering a quick question needed a click first.
- A terminal's automatic replies now go to its own session. With two tabs open, a background agent's cursor position and palette replies were being typed into whichever tab was on screen, which showed up as junk like
35;3Ror11;rgb:...at an idle prompt. - A tool that renames its own process is identified properly. This is why Pi read as
node. - A session writing oTerm's markers is no longer assumed to be Claude Code, which renamed Pi sessions once they had the extension.
- The busy-line scan measures up from where a program's interface ends rather than from the bottom of the terminal, so it is not thrown off by blank rows on a session that has not scrolled yet.
Known issues
- Pi does not report a failed turn differently from a finished one. Its extension API does not expose whether a run ended on an answer or an error, and oTerm treats both as the turn ending.
- Pi's permission event only fires for prompts raised by extensions. A Pi install with no permission gate may never send one, in which case a session waiting on a question is revealed by the stall timer instead.
- There is no frontend test suite yet, so the input routing fix is held in place by types rather than by a test.
- If stray colour codes ever appear in a window with only one tab open, that is a different cause and worth reporting on #18.
What's Changed
- Add a demo animation and poster set to the README by @egeyesss in #13
- Recognise Pi, and read its turn events through an extension by @egeyesss in #19
- Stop a short turn taking the terminal's keyboard focus by @egeyesss in #20
- Send a terminal's own replies to its own session by @egeyesss in #21
- Release 1.0.3 by @egeyesss in #22
Full Changelog: v1.0.2...v1.0.3
v1.0.2
v1.0.1
What's Changed
Full Changelog: v1.0.0...v1.0.1
v1.0.0
What's Changed
Full Changelog: v0.2.0...v1.0.0
v0.2.0
What's Changed
- Give install instructions that actually work by @egeyesss in #5
- Sit over another application's full-screen space by @egeyesss in #6
- Fix multi-line prompts and add the terminal basics by @egeyesss in #7
- Add a settings sheet and stop the window climbing off screen by @egeyesss in #8
- Run several agents in one window, and say which is which by @egeyesss in #9
- Install with one command and open the repo up to contributors by @egeyesss in #10
Full Changelog: v0.1.0...v0.2.0
v0.1.0
First release. An always-on-top terminal that works out what the CLI
inside it is doing, gets out of the way while it works, and comes back
when it wants you.
Install
brew install --cask egeyesss/overterm/overterm
xattr -dr com.apple.quarantine /Applications/OverTerm.appThe second line is needed because the app is not signed with an Apple
Developer certificate yet. Homebrew marks anything it downloads as
quarantined, and macOS refuses to open a quarantined app it cannot
verify, reporting that the developer could not be checked for malware.
Removing that mark is what lets it open. On macOS 15 and later, opening
it from the right-click menu no longer works as a way around this.
Signing will remove the need for the second line entirely.
Universal build, Apple silicon and Intel, 7 MB.
What it does
- Runs any CLI in a real PTY, so full-colour interactive TUIs work
untouched - Works out whether the session is idle, busy, finished, or waiting on
you, by reading the terminal, with nothing to install or configure - Collapses to a one-line bar once you hand it a job, and expands again
when it wants you, without taking keyboard focus from whatever you are
typing in - Floats above other windows on every Space, including over full-screen
apps Cmd+Shift+Ofrom anywhere summons or hides it
Claude Code
Running Claude Code it reads the real events rather than inferring them.
On first launch it adds four hook entries to ~/.claude/settings.json,
one each for a prompt being submitted, a turn finishing, a turn failing,
and a permission prompt appearing. Each is a single printf that prints
a fixed JSON object, which Claude Code turns into an escape sequence in
the terminal that OverTerm reads back. Nothing listens on a port and
there is no secret to handle.
They go in once. Removing them sticks, and uninstalling through Homebrew
takes them with it.
Known rough edges
- Unsigned, so the install needs the second line above
- The icon is a placeholder
- Clicking the window makes the app frontmost, like any ordinary window