Under the hood

The daemon

The process that owns every session’s terminal, so that closing a window ends nothing.

There is no tmux underneath. The daemon opens a pseudo-terminal for every session itself, and holds it. The terminal UI is one client of it, and the commands are others. Quit them all and nothing stops.

When it runs

voodoo starts the daemon when it needs one, always from its own executable, never from whatever voodoo is first on your PATH. One binary means the daemon and its clients can never be different versions of each other by accident.

Once started it lets go of the terminal it came from, so closing that window ends nothing. It is alive exactly as long as it holds a lock on its pidfile, which the system releases however the process dies. There is no stale state to clean up after a crash.

Control it

CommandWhat it does
voodoo statusThe daemon, and every project with what is running in it.
voodoo stopStops the daemon, and every session with it.
voodoo restartStops it and starts it again, for example after changing the config.
voodoo logsFollows the daemon’s log until ^c.

What a session is

  • A pseudo-terminal of its own, with the last megabyte of its output kept, and every byte of that numbered from the session’s start.
  • The numbering is what makes coming back exact. A client says where its copy ends and gets precisely the bytes after that: no gap, no repeat. Away so long that those bytes are gone, it is told to clear its screen first.
  • A session ends when its process ends, not when its terminal closes. An agent can leave something behind that holds the terminal open, a dev server it started, and waiting for the terminal would leave a finished session looking alive.

The cost: you can’t tmux attach from a bare terminal. voodoo is how you attach.