Live data from Hacker News

Ghostling

github.com

51–60 of 72 posts

Re: Ghostling

#51
post #7

Earlier quoted context omitted.

I think your github readme is really missing a picture/screenshot to quickly understand what is the experience like. I.e. if your app is mainly about adding the chrome (as in the surrounding UI pixels) around the TUI, then it would be good to show what is the chrome like.

Nah, I think it’s pretty clear. It would look like a terminal emulator. Just like how Electron looks like a bunch of browser widgets - because it’s literally a single-web-app browser.

Does it have any extra controls? And is it using native windows (as opposed to Electron)?

Re: Ghostling

#52

Earlier quoted context omitted.

I've heard this a lot on HN over the years but it doesn't make much sense to me. Some thoughts: 1. App tabs improves UX for 99.999% of users who aren't using a WM with a good tab solution (if one even exists). 2. WM tabs means launching a new app instance for every tab you might want vs having lightweight app tabs. 3. App tabs can do all sorts of app-level things and UX polish that dumb WM tabs can't do because they…

Agree on all the points, except 4. There are even people out there who use lynx as their primary browser :) Although while I usually like tabs for most apps, I don't use tabs for terminal and rely either on window manager or tmux. I guess the difference is that I often want a mix of tabs and having multiple terminals side by side, whereas I don't really need that for a browser (or very seldom)

Which window manager do you use?

Sway had the better, though often tedious, WM tab solution that I've tried. Niri had a useless one.

I really tried to love sway splits and tabs for terminal windows. But I finally admitted I'd rather just alt-tab to a few different terminal apps, each with its own concern (maybe one per project, this one for my remote machine), and best of all, each with its own internal tabs.

That said, tabs in kitty and tmux, for example, are so basic that you don't necessarily lose much if you were to use WM tabs instead.

On the other hand, tabs in iTerm2, Ghostty, Cmux, probably macOS Terminal -- a bit more powerful and intuitive since you can do things like drag them, and they can show info like terminal state. And in some of those apps, they can be displayed vertically which is my favorite.

Re: Ghostling

#53

I have an idea of a terminal emulator where you could maximize panes but using a nested structure, does anyone know of one? Standard "Zoom" features in tmux or iTerm2 only maximize the single active pane to the full window, hiding everything else. If I have a layout like this: _____________________ | | B | | A |---------| | | C | |_________|_________| And I expand B, I want A to hide, while B and C remain visible tog…

[deleted]

Re: Ghostling

#54
I built my own macOS terminal app over the last two weeks using swift/appkit + ghostty's zig library.

I basically just wanted vertical tabs and notifications for when AI agents (claude code, codex) are finished.

I already use it as my main terminal over iTerm.

It's a fun project since I use my terminal all day, so I always have ideas for how something could be improved or polished. AI can do the chore work of figuring out how to impl some bugfix or UX polish, and I manage the last 10%.

This would have been too much work to maintain for fun before LLMs.

Re: Ghostling

#55

I built my own macOS terminal app over the last two weeks using swift/appkit + ghostty's zig library. I basically just wanted vertical tabs and notifications for when AI agents (claude code, codex) are finished. I already use it as my main terminal over iTerm. It's a fun project since I use my terminal all day, so I always have ideas for how something could be improved or polished. AI can do the chore work of figurin…

FWIW most of the agentic CLI tools also let you setup notification hooks so you can just do something like this:

  afplay /System/Library/Sounds/Glass.aiff                                                    
  osascript -e 'display notification "Waiting..." with title "Coding Agent"
The sound is especially useful since for longer running tasks I'll often do some chores around the house while waiting for it to finish up.

Re: Ghostling

#56
post #37

Earlier quoted context omitted.

Yeah xxd is the correct answer. If you don't want to install a dependency and have Lua installed, or if you're just feeling a little bit frisky, you can use my function which is Production Ready™. Xxd = function(name, input) if not name:find'^[_%a][_%w]*$' then error('bad name: '..tostring(name)) end local ans = { 'const unsigned int '..name..'_len = '..(#input)..';', 'const unsigned char '..name..'[] = {', } local t…

Feels like Lua is a more exotic dependency. I used to use xxd but this gets problematic when files grow (and they don't need to grow much at all), objcopy is much faster (which I didn't think would matter much, but it did) and don't have the same issues that accidentally opening the .h file in your editor or code-searching having to traverse that mess. Yes, you'd want to gitignore it and exclude it from search etc. b…

For some things there is nothing better than xxd. It is so simple.

Re: Ghostling

#57

I built my own macOS terminal app over the last two weeks using swift/appkit + ghostty's zig library. I basically just wanted vertical tabs and notifications for when AI agents (claude code, codex) are finished. I already use it as my main terminal over iTerm. It's a fun project since I use my terminal all day, so I always have ideas for how something could be improved or polished. AI can do the chore work of figurin…

FWIW most of the agentic CLI tools also let you setup notification hooks so you can just do something like this: afplay /System/Library/Sounds/Glass.aiff osascript -e 'display notification "Waiting..." with title "Coding Agent" The sound is especially useful since for longer running tasks I'll often do some chores around the house while waiting for it to finish up.

My notification hook pipes an OSC 777 (title, body) message into /dev/tty, Ghostty handles/ingests it and then emits the event for my terminal app to do things like craft a macOS notif and style the tab/pane of the originating terminal.

    #!/usr/bin/env bash
    MSG=$(cat | jq -r '.last_assistant_message // empty' | head -c 200)
    printf '\e]777;notify;Claude Code;%s\a' "${MSG:-Claude finished responding}" > /dev/tty
I tried the osascript solution first but had some issues, iirc no good way to focus the originating terminal pane on notif click.

Something I never figured out is why Claude Code's "Notification" hook waits minutes to fire. I had to use the "Stop" hook for actual end-of-response timing.

Re: Ghostling

#58

Earlier quoted context omitted.

FWIW most of the agentic CLI tools also let you setup notification hooks so you can just do something like this: afplay /System/Library/Sounds/Glass.aiff osascript -e 'display notification "Waiting..." with title "Coding Agent" The sound is especially useful since for longer running tasks I'll often do some chores around the house while waiting for it to finish up.

My notification hook pipes an OSC 777 (title, body) message into /dev/tty, Ghostty handles/ingests it and then emits the event for my terminal app to do things like craft a macOS notif and style the tab/pane of the originating terminal. #!/usr/bin/env bash MSG=$(cat | jq -r '.last_assistant_message // empty' | head -c 200) printf '\e]777;notify;Claude Code;%s\a' "${MSG:-Claude finished responding}" > /dev/tty I tried…

> iirc no way to focus the originating terminal pane on notif click.

Yeah mine has the same issue - it just brings up the script editor. It's not as much of an issue for me since I'm rarely running more than a single Opencode instance at a time.

Could definitely see that being useful if you were running quite a few agents to let you hone in on the correct terminal window/tab quickly though.

Re: Ghostling

#59

Earlier quoted context omitted.

My notification hook pipes an OSC 777 (title, body) message into /dev/tty, Ghostty handles/ingests it and then emits the event for my terminal app to do things like craft a macOS notif and style the tab/pane of the originating terminal. #!/usr/bin/env bash MSG=$(cat | jq -r '.last_assistant_message // empty' | head -c 200) printf '\e]777;notify;Claude Code;%s\a' "${MSG:-Claude finished responding}" > /dev/tty I tried…

> iirc no way to focus the originating terminal pane on notif click. Yeah mine has the same issue - it just brings up the script editor. It's not as much of an issue for me since I'm rarely running more than a single Opencode instance at a time. Could definitely see that being useful if you were running quite a few agents to let you hone in on the correct terminal window/tab quickly though.

Yeah, exactly. I have so many agents running these days. 1-2 per project.

Often one is polishing a plan file for the next feature/bugfix (claude), and the other is reviewing it to give feedback (codex). And that is my life now. But on the upside, it's trivial to maintain sideprojects now.

Re: Ghostling

#60

I have an idea of a terminal emulator where you could maximize panes but using a nested structure, does anyone know of one? Standard "Zoom" features in tmux or iTerm2 only maximize the single active pane to the full window, hiding everything else. If I have a layout like this: _____________________ | | B | | A |---------| | | C | |_________|_________| And I expand B, I want A to hide, while B and C remain visible tog…

This should be simple any time you have panes in a binary tree split view.

The hard part is the UX: making it clear that we're in a zoom state (esp with nested zooms), somehow showing the split-pane tree so that user knows what container will be filled when they zoom, etc.

Fork ghostty and get claude to one-shot it so you can see if you like the idea.

Post reply on HN