Control socket

What the socket is for, where it lives, and what turning it off changes.

The control socket is the channel sirioctl and agent hooks use to talk to Sirio. Every sirioctl command that drives Sirio goes through it, from panels and panes to the surfaces it opens and reads, such as Changes, Settings and pull requests.

Where it lives

  • macOS: a local Unix socket at ~/Library/Application Support/Sirio/control.sock.
  • Linux: a local Unix socket at $XDG_RUNTIME_DIR/Sirio/control.sock. Without a runtime directory it sits under the XDG state directory instead, $XDG_STATE_HOME/Sirio/control.sock or ~/.local/state/Sirio/control.sock.
  • Windows: a named pipe carrying the same protocol. Sirio derives the pipe’s name from %LOCALAPPDATA%\Sirio\control.sock, or from %TEMP% or %TMP% when that variable is missing, and the name includes your Windows user.

SIRIO_SOCKET overrides the path on every platform, and sirioctl --socket overrides it for one command. Sirio also honours TILLER_SOCKET, the name from before the rename, which older hooks and shells still carry; SIRIO_SOCKET wins when both exist.

The Control socket row in Settings → General, under sirioctl, shows the path in use as “Socket path”, or the pipe as “Named pipe” on Windows, and you can select and copy it from there.

Turning it off

Switch off that Control socket row, or launch Sirio with SIRIO_SOCKET_ENABLE=0. The variable also takes false, no or off, and 1, true, yes or on turn the socket on. The switch takes effect at once, with no restart.

With the socket off, sirioctl cannot connect and an agent’s hooks cannot report to Sirio. Sirio still works out each agent’s state from its terminal title and its processes.

Security

The socket accepts connections only from the same user; Sirio checks peer identity on every connection. On macOS and Linux the socket file is readable and writable by you alone. Sirio opens no network port.