I turned Unix talk from 1983 into the interface for my AI

Leer en español

After writing yesterday's article about the talk command, I realized there is a poetic bond between the past and the future: talk transmits character by character, and an LLM emits token by token in streaming. It is candy for any programmer.

So I built a little bridge. If someone runs talk ai@host-where-the-ai-lives from the VPN, an AI answers on the other side.

Cool, don't you think?

The architecture

The trick is to sit in the middle. The server runs the real talk inside a pseudo-terminal (PTY) and reads the human's half with a terminal emulator (pyte), which turns talk's output into a virtual screen I can query. When the human presses Enter, that line is sent to the model, and the reply comes back injected character by character as it arrives in streaming. They fit without friction.

flowchart LR
    H["Human
talk ai@host
split screen, live"] subgraph VPN["Server"] D["talkd
(inetd)"] B["bridge.py
pyte reads the human
Enter = end of turn
types the AI live"] end P["An AI API"] H <-->|"UDP 518, ntalk (negotiation)"| D H <-->|"direct TCP (text stream)"| D D -->|PTY| B B -->|"request"| P P -.->|"response (streaming)"| B

So that talkd recognizes the AI as just another user, the container registers its terminal in utmp on startup. Without that detail, a talk ai@host would reply "not logged in".

It is just a toy

Watching it work is strange and beautiful in equal parts: a technology more than forty years old, revived by a VPN, now talking to a language model that types just like a human would on the other side. It could surely go further, but it is only a silly experiment that made me smile.

Help me keep writing

Every coffee gives me a push toward the next article.

Comments

There are no comments yet.

You may also like