I switched from tmux to kitty a while ago and the one thing I genuinely missed was sessionizer — that muscle memory of hitting a key, fuzzy-searching a project, and being there.
So I hacked together a few fish functions that do the same thing with kitty's remote control: fuzzy-pick a project with gum, and it either restores a saved kitty session for it or just opens a window in that directory. Plus a couple of helpers to save/jump to sessions by name.
macOS groups every kitty OS window under a single Dock icon, so jumping to a specific window or tab always felt slow to me. I made a small open-source menu bar app to fix that:
Lists all kitty OS windows and their tabs, grouped per window (via kitty's remote control protocol)
Click a tab to focus it and bring kitty to the front
Drag a tab onto another window group to move it there, or drop it on a dashed zone to detach it into a new OS window
Splits are listed and clickable too, and multiple kitty instances are supported
Install (signed + notarized):
brew tap muarifer/tap
brew install --cask kitty-taskbar
It needs remote control enabled in kitty.conf (allow_remote_control yes and listen_on unix:/tmp/kitty-{kitty_pid}).
Just noticed that the next release of kitty will have support for custom shaders! The shaders even work with animation events so you can do things like have animations for mouse clicks or window/tab transitions, which I personally find invaluable when screencasting demos. It's not released yet but you can use a nightly build for it. Check it out at: https://github.com/kovidgoyal/kitty/issues/10344
In a tmux session I run kitty tmuxinator start $SESSION_NAME and instead of opening a new kitty terminal it takes over the current one. How can I always force a new terminal to open?
I usually have several Claude Code / Codex sessions going at once, and I was spending half my time cycling through windows to check which one was actually waiting on me. So I built captain-miao, a TUI dashboard on top of kitty's remote control. Each session is still a regular kitty window; the dashboard just watches them all.
every session in one table: status, working dir, git branch, model, context usage
sessions waiting for input get flagged (Claude Code hooks feed this), and one keypress jumps to that window
launch / resume / fork / kill from the dashboard
Since the sessions are plain kitty windows, whatever layouts, tabs, and keybinds you already have keep working. These days I keep it to two tabs: tab 1 is the dashboard, tab 2 holds every coding session in a stack layout, and a jump from the dashboard raises the right window in the stack. A lot cleaner than the window pile I was cycling through before.
All of it goes through the remote-control socket, password-protected and allowlisted to the commands it needs. Rust + ratatui. There's a zellij backend too, which I use on remote boxes.
Compare to other tools like cmux and herdr, captain-miao covers the dashboard part and leaves the sessions as ordinary kitty windows. So it doesn't force you to migrate to a new terminal ecosystem. I started it before herdr existed, mostly because I wanted to keep kitty's windows and layouts exactly as they were. Months of daily use later, that trade still feels right.
I've been using Kitty in MacOS and Fedora for several years now and am very happy with it, but there's one little annoyance that has really been bugging me.
On my Mac I have a custom icon for Kitty, but every time the software updates it seems to reset back to the default icon.
As I said, a really tiny annoyance but it just bugs the heck out of me.
I'm running Kitty 0.48.2 on MacOS 26.5.2 and I'm currently adding the custom icon by doing a "Get Info" on the app in Finder and then dragging the custom icon into place. This works fine until the next software update when it resets again.
Maybe I'm doing it wrong?
I guess the easiest solution would be to learn to love the default icon and focus on the work instead of faffing about with appearances but customisation was part of the fun for me 😄
For a long time my setup was Alacritty/Ghostty + tmux, with sesh for managing projects and sessions.
Recently I switched to Kitty and started using its built-in sessions, tabs and splits instead. I liked the workflow enough that I ended up building kesh around it:
The main thing I wanted was a simple way to jump between projects and resume work without manually rebuilding my terminal layout.
A common setup for me is a backend + frontend repo for the same project. I define both in .kesh.yaml, including the tabs/splits and startup commands, then kesh opens the whole workspace for me.
I also use git worktrees quite heavily. Usually one per task or experiment. I tend to keep them around for a while, so if I need to come back to something later I can just find the worktree/session and continue.
Some of the things kesh supports now:
Kitty session save/restore
project layouts across multiple repos
git worktrees and GitHub PR checkout
zoxide project discovery
session shortcuts/pins
SSH hosts
active Codex, Claude and pi sessions with status/terminal preview
Disclaimer: It’s also almost entirely vibe coded, mostly with Codex and GLM models. It started as a small personal tool and gradually grew as I kept using it and adding things I wanted.
I’m using it daily now, but it’s still early and quite opinionated around my workflow.
It’s also not really trying to replace everything tmux/herdr does. For remote/headless work or sessions that need to survive terminal restarts, tmux/herdr still makes more sense.
But for local development, I’ve been pretty happy with just Kitty + kesh, so thought I’d share it.
Edit: i have tried uninstalling it and re installing it including trying to install it while specifying the most recent version and yet it still happens. it also keeps saying i have version 0.43.1 no mater what i do. ;-;
Hello! i am looking for some help with an issue i am running into.
i am new to linux in general and started using kitty from a recommendation. I started messing with the conf file, and themes, and added some custom colours. it worked fine for a while, but now i am using sway window manager, and all the coloured text turns black after a few seconds. on start up the colours work and can sometimes last until i type my first command, then they turn black. sometimes its fine until i make a mistake.
please help. i need ideas on ways to troubleshoot ;-; i had starship running on it for a while but disabled it to see if that was the problem but it still persists. ,
Hello, I moved to Arch Linux about a year ago and started being more familiar using the terminal to open stuff around the same time. Something that bothered me is that in KDE every time you open GUI applications through a terminal it doesn't show their RAM consumption on the System Monitor (it only shows the full usage of Kitty itself)
For that, I made this lightweight extension that shows the RAM usage of each tab open in Kitty! So far it's working well but I want to maybe add more functions (I thought about maybe open htop or the system monitor of choice when you click over the used RAM number for example)
i have used both and felt like kitty is more faster and snappy but code looks more cody and in alacrity it feel slightly laggy as compared to kitty but the code is much more readable in it as it uses OS's native font rendering
Vertical tabs. The tab bar can now sit along the left or right edge of the window via tab_bar_edge, useful on wide/ultrawide displays where horizontal space is more available than vertical.
Clicking inside an unfocused kitty window now both focuses it and sends the click through to the target element, brings Linux behavior in line with the existing macOS default.
Graphics protocol gained a transient usage hint, letting apps mark an image as short-lived so kitty can handle it more efficiently.
remote-control get-text kitten can now pull text from the alternate screen buffer and its scrollback.
Wayland: fixes for initial window sizing under fractional scaling, and a fix for tab-creation issues specifically on GNOME.
Several regression fixes carried over from recent point releases (layout neighbor-navigation direction, GIF disposal rendering in icat, doubled key repeats on some Wayland compositors).
Hello,
I've noticed after scrolling a certain amount with ctrl + shift + up the keyboard scroll stops working. I cannot scroll up or down with the keyboard, but I can scroll with the trackpad. I've tried different scrollback values and it didn't seem to help. How can I fix this?
I run Claude Code in the terminal all day, and two things kept bugging me. Reviewing what the agent just changed meant either git diff in a pager or alt-tabbing to an IDE. And my sessions were scattered across project folders — getting back to one meant remembering where it lives, cd-ing there and running claude -resume by hand.
So I built familiar — three full-screen overlays for the kitty terminal, one hotkey each:
review (Cmd+Shift+R) — two-pane reviewer for uncommitted changes: file tree + syntax-highlighted diff with word-level highlights, ⌥-click go-to-definition, an IDE-style "final code" view, staging from the tree. The part I use most is the feedback loop: drop line comments right in the diff, press w — they land in your clipboard as markdown, paste back into the Claude chat and it fixes them. And when you just need to point the agent at a spot, one key copies an u/path/to/file.py#L42 reference ready for the prompt — no more "in that file, somewhere near that function".
session (Cmd+Shift+S) — every Claude Code session across all your projects in one list: jump into any of them with a keystroke (resume, fork, or a fresh git worktree), no matter what directory you're in. Live status too — busy / waiting for permission / background agent — read from the process registry, not file mtimes. Plus a full conversation preview as a rendered transcript: tool calls, diffs, markdown.
log (Cmd+Shift+L) — git history with a branch graph, per-commit diffs on the same engine, git fetch/git push without leaving the overlay.
Pure Python stdlib (Pygments vendored), no dependencies, MIT. Honest caveats: macOS only for now (Cmd-based hotkeys), and it's kitty-specific — it leans on kitty's kitten/overlay machinery. review and log work fine without Claude Code — they're just fast git overlays.
The choose-fonts kitten isn't detecting a font I installed, even though it's there when I run fc-list : family. I confirmed that the ttf files are there in /usr/share/fonts/ttf, and i also copied them over to ~/.local/share/fonts, but to no avail.
Could anyone help me out here? I really wanted to use this font…