Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

blog: tail CI logs over SSH

Signed-off-by: oppiliappan <me@oppi.li>

author
oppiliappan
committer
Lewis
date (May 29, 2026, 2:50 PM +0300) commit 7cf58345 parent 26391166 change-id tuzsymtn
+57 -1
+56
blog/posts/pty.md
··· 1 + --- 2 + atroot: true 3 + template: 4 + slug: ssh 5 + title: tail CI logs over SSH 6 + subtitle: never leave your terminal to check on CI! 7 + image: https://assets.tangled.network/blog/pty/astral-projection.webp 8 + date: 2026-05-28 9 + authors: 10 + - name: Akshay 11 + email: akshay@tangled.org 12 + handle: oppi.li 13 + --- 14 + 15 + If you push to a new branch on a remote, if CI was 16 + triggered, Tangled now helpfully supplies an `ssh` command 17 + for you: 18 + 19 + ```bash 20 + λ jj git push -c @- 21 + -- snip -- 22 + remote: → Browse CI logs in your terminal: 23 + remote: ssh -t -p 3333 tangled.org did:plc:j5hmlfdrwkvtxm7cjmu7j2is 796ecc5b0ce5381ed5b5021e7cc28b4b05e03c92 24 + ``` 25 + 26 + Paste that command in a new shell, and you are dropped into 27 + a fullblown TUI, served over SSH: 28 + 29 + <video src="https://assets.tangled.network/blog/pty/Screen%20Recording%202026-05-27%20at%2011.43.11-cropped-half.webm" controls> 30 + </video> 31 + 32 + Try it for yourself: 33 + 34 + ``` 35 + ssh -t -p 3333 tangled.org did:plc:j5hmlfdrwkvtxm7cjmu7j2is 796ecc5b0ce5381ed5b5021e7cc28b4b05e03c92 36 + ``` 37 + 38 + That SSH commmand runs a "screen based" program on the 39 + remote machine. In this case, the program is a TUI built 40 + using 41 + [bubbletea](https://github.com/charmbracelet/bubbletea) and 42 + [wish](https://github.com/charmbracelet/wish). 43 + 44 + SSH powered interfaces are wonderful for several reasons: 45 + 46 + - They require zero installation 47 + - They work great for interactive bits like menus 48 + - They have all the upsides of running a TUI: you can 49 + persist them over tmux, theme them with terminal colors 50 + etc. 51 + 52 + But they are doubly wonderful when streaming CI logs, the 53 + screen-program is totally unaware of ANSI escape codes, but 54 + they are handled correctly by virtue of writing to a PTY. 55 + Both ends (the commands running in the CI job and the PTY) 56 + are speaking the same language.
+1 -1
tailwind.config.js
··· 75 75 h3: { 76 76 "@apply mt-2": {}, 77 77 }, 78 - img: { 78 + "img, video": { 79 79 "@apply rounded border border-gray-200 dark:border-gray-700": {}, 80 80 }, 81 81 },