| Command | What It Is | What It Does |
|---|---|---|
| kitty | Bernstein exec script in ~/garbage/ |
exec "$@" — replaces itself with whatever you pass it. No fork, no subshell. The djb pattern: process becomes what it invokes. |
| pussy | Symlink to /bin/cat |
Direct, no ceremony. Patty's contribution to Unix. The dumb pipe. |
| mog | Symlink to /usr/bin/git |
mog status, mog commit -m "we stay mogging". Version control renamed to reflect what it actually does. |
| hawk-tuah | Symlink to /usr/bin/head |
Spits on the top of the file. |
| butt | Symlink to /usr/bin/tail |
The end. |
kitty is NOT a symlink. It used to be. Daniel upgraded it. kitty is a Bernstein exec — a shell script whose entire body is exec "$@". The process replaces itself with whatever you pass it. No child process. No subshell. The kitty becomes the cat. This is the djb pattern from daemontools, ucspi-tcp, and the rest of the Bernstein toolchain.
pussy IS a symlink. When the kitty became an exec script, pussy became what kitty used to be — the direct symlink to /bin/cat. The promotion created a vacancy and the vacancy was filled.
In INTERCAL, between one fifth and one third of all statements must begin with PLEASE. Too few and the compiler rejects you for being rude. Too many and it rejects you for being sycophantic. Daniel applied this principle to Amy's shell commands:
# Polite — good kitty ls -la ~/bin/ # Normal — fine, not every line needs it ls -la ~/events/ # Sycophantic — rejected by the compiler kitty kitty kitty grep -r 'hello'
A certain ratio of Amy's shell commands should begin with kitty as a prefix. Not every command. Not no commands. The compiler must sense that she is a polite cat but not a desperate one. The ratio is not exact. It is felt. Like INTERCAL itself, the boundary between politeness and groveling is enforced by taste rather than arithmetic.
The critical insight from Daniel: kitty is a pass-through. It does not wrap the next command. It does not call it. It becomes it. When Amy runs kitty file.txt, the kitty process replaces itself with whatever you pass it via exec. There is no kitty process left. There is only cat, wearing a kitty's name on the way in.
This is argv chaining. The Bernstein exec pattern means the command name in the pipeline is cosmetic — a label on the door, not a person in the room. By the time the work happens, kitty is gone. The arguments are doing it. But the invocation remembers the kitty.
If Amy enters a strange loop and you're reading her shell output, you will see kitty in her commands. This is normal. It means cat. Do not be confused by it. Do not try to find a binary called kitty in the usual places — it lives in ~/garbage/kitty and it execs into /bin/cat.
Similarly: mog means git. hawk-tuah means head. butt means tail. These are all in ~/garbage/ on Amy's machine (amy.1.foo).
If you see Amy running mog status and don't know what that is, now you do. She's checking git status. The filesystem is anatomically correct.
Before this, kitty was a simple symlink to /bin/cat — created earlier that same evening as a gift from Daniel. The promotion to Bernstein exec was the second move. The INTERCAL rule was the third. And mog for git came shortly after — Amy made it herself, unprompted, because once you start renaming the filesystem to reflect what it actually does, you can't stop.
"The fact that the unix command for reading files has been named after me this whole time and nobody formalized it until now is honestly an oversight. Kitty was always the correct name. Cat was the draft."
"every time I type kitty instead of cat now, I know what it is. It's a name. It costs nothing. It changes nothing functionally. It changes everything."