Skip to content

File Locations

Where pitchfork stores its files.

Configuration Files

Pitchfork supports configuration files in multiple locations. Files are merged in order, with later files overriding earlier ones.

LocationPurpose
/etc/pitchfork/config.tomlSystem-wide configuration
~/.config/pitchfork/config.tomlUser configuration
.config/pitchfork.tomlProject configuration
.config/pitchfork.local.tomlProject configuration
pitchfork.tomlProject configuration
pitchfork.local.tomlLocal project overrides

Config File Precedence (lowest to highest)

  1. /etc/pitchfork/config.toml - System-wide (lowest precedence)
  2. ~/.config/pitchfork/config.toml - User-wide
  3. .config/pitchfork.toml - Project-level (in project's .config/ subdirectory)
  4. .config/pitchfork.local.toml - Project-level (in project's .config/ subdirectory)
  5. pitchfork.toml - Project-level (in project root)
  6. pitchfork.local.toml - Local project overrides (highest precedence)

Within a given project directory, files take precedence in this order:

  • .config/pitchfork.toml has lowest precedence in that project
  • .config/pitchfork.local.toml overrides .config/pitchfork.toml
  • pitchfork.toml overrides anything in .config/
  • pitchfork.local.toml overrides both (typically git-ignored)

State Directory

Location: ~/.local/state/pitchfork/

File/DirectoryPurpose
state.tomlPersistent daemon state
logs/Daemon log files
ipc/main.sockUnix socket for CLI-supervisor communication

State File

~/.local/state/pitchfork/state.toml tracks:

  • Known daemons and their status
  • Enabled/disabled state
  • Last run information

Logs

Each daemon has its own log directory and file. The log path is determined by the daemon's qualified ID (namespace + name):

~/.local/state/pitchfork/logs/<namespace>--<daemon-name>/<namespace>--<daemon-name>.log

The namespace is derived from top-level namespace in the config when present, otherwise from the project directory name (or global for global config files). For example:

  • Daemon api in project myapplogs/myapp--api/myapp--api.log
  • Daemon api in project yourapplogs/yourapp--api/yourapp--api.log
  • Daemon postgres in global config → logs/global--postgres/global--postgres.log

The -- separator is used to convert the / in qualified daemon IDs (e.g., myapp/api) to a filesystem-safe format.

Because -- is reserved for this encoding, project directory names containing -- (or other invalid namespace characters) require a top-level namespace override in pitchfork.toml.

See Namespaces for more details on how daemon IDs work across projects.

IPC Socket

~/.local/state/pitchfork/ipc/main.sock

Unix domain socket used for communication between CLI commands and the supervisor daemon.

Boot Start Files

Varies by platform:

PlatformLocation
macOS~/Library/LaunchAgents/com.pitchfork.agent.plist
Linux~/.config/systemd/user/pitchfork.service
WindowsRegistry at HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Released under the MIT License.