Ponytail Configuration Options: Environment Variables, Config File, and CLI Setup
Ponytail provides three configuration options—defaultMode, quietStartup, and hideStatus—that can be set via environment variables, a JSON config file at XDG_CONFIG_HOME/ponytail/config.json, or the /ponytail default <mode> CLI command, with environment variables taking precedence.
Ponytail is an open-source coding assistant that exposes user-controllable settings through a layered configuration system. Understanding the available Ponytail configuration options allows you to customize runtime intensity, suppress startup notifications, and manage status-line visibility without modifying source code in DietrichGebert/ponytail.
Available Configuration Options
Ponytail exposes three primary settings controlled through hooks/ponytail-config.js:
- defaultMode: Determines the runtime intensity. Valid values are
"off","lite","full", and"ultra". The special"review"mode is valid for temporary use but cannot be persisted as a default. - quietStartup: When
true, suppresses the "Ponytail loaded" toast notification while keeping the extension active. Defaults tofalse. - hideStatus: When
true, hides the status-line indicator while leaving Ponytail running in the background. Defaults tofalse.
Configuration Resolution and Precedence
According to the DietrichGebert/ponytail source code, configuration values are resolved using a strict three-tier precedence system implemented in hooks/ponytail-config.js. The resolver checks sources in the following order, with the first found value winning:
- Environment variables (highest priority)
config.jsonfile at the path determined bygetConfigPath()(lines 54-68)- Built-in defaults (lowest priority)
The getDefaultMode() function (lines 76-99) checks PONYTAIL_DEFAULT_MODE first, then the JSON file, and finally falls back to "full". Similarly, getQuietStartup() (lines 101-117) and getHideStatus() (lines 119-133) follow this pattern for their respective environment variables.
How to Set Ponytail Configuration Options
Via Environment Variables
Export variables before launching your editor to override file-based configuration. This method is ideal for temporary or session-specific changes.
export PONYTAIL_DEFAULT_MODE=lite
export PONYTAIL_QUIET_STARTUP=1
export PONYTAIL_HIDE_STATUS=1
Environment variables take precedence over all other configuration sources. The resolver functions in hooks/ponytail-config.js read these values first before checking the configuration file.
Via the Configuration File
For persistent settings, create or edit config.json at the location returned by getConfigPath(). By default, this resolves to $XDG_CONFIG_HOME/ponytail/config.json on Linux, with platform-specific fallbacks for macOS and Windows.
Example configuration:
{
"defaultMode": "ultra",
"quietStartup": true,
"hideStatus": true
}
The file is automatically created when you persist settings via CLI commands.
Via CLI Commands
Ponytail provides the /ponytail default <mode> command to persist the default mode to the configuration file. This command is handled by hooks/ponytail-mode-tracker.js and invokes writeDefaultMode() in hooks/ponytail-config.js (lines 136-150), which validates that the mode is one of the runtime modes (off, lite, full, ultra) before writing.
ponytail default ultra
Attempts to store the special "review" mode via this command are ignored by the validation logic.
Programmatic Access to Configuration
For extension developers consuming Ponytail settings, import the resolver functions:
const { getDefaultMode, getQuietStartup, getHideStatus } = require('./hooks/ponytail-config');
const mode = getDefaultMode(); // → 'full' | 'lite' | 'ultra' | ...
const silent = getQuietStartup(); // → boolean
const hidden = getHideStatus(); // → boolean
The file pi-extension/index.js demonstrates practical consumption of these configuration values.
Summary
- Three options control Ponytail:
defaultMode(runtime intensity),quietStartup(suppress toast), andhideStatus(hide indicator). - Resolution order: Environment variables override
config.json, which overrides built-in defaults ("full",false,false). - Configuration file location: Determined by
getConfigPath()inhooks/ponytail-config.js(lines 54-68), usingXDG_CONFIG_HOME/ponytail/config.jsonwith platform fallbacks. - CLI persistence: Use
/ponytail default <mode>to write valid runtime modes to the config file viawriteDefaultMode()(lines 136-150). - Review mode limitation: The
"review"mode cannot be persisted as a default through any configuration mechanism.
Frequently Asked Questions
What are the valid values for defaultMode in Ponytail?
The defaultMode configuration option accepts four runtime values: "off", "lite", "full", and "ultra". These determine the AI processing intensity. The special "review" mode exists for temporary activation but cannot be persisted as a default in the configuration file or via CLI commands.
Where is the Ponytail configuration file located?
Ponytail stores configuration in config.json at a path constructed by getConfigPath() in hooks/ponytail-config.js. By default, this resolves to $XDG_CONFIG_HOME/ponytail/config.json on Linux, with macOS and Windows fallbacks following platform-specific conventions. The file is created automatically when you run persistence commands like /ponytail default.
Can I set the "review" mode as the default in Ponytail?
No. While "review" is a valid operational mode for temporary use, it cannot be persisted as the defaultMode. The writeDefaultMode() function in hooks/ponytail-config.js (lines 136-150) explicitly ignores attempts to store "review" in the configuration file. You must activate review mode manually per session.
How do I temporarily override a Ponytail setting without changing the config file?
Set the corresponding environment variable before launching your editor. PONYTAIL_DEFAULT_MODE, PONYTAIL_QUIET_STARTUP, and PONYTAIL_HIDE_STATUS take precedence over file-based configuration according to the resolver logic in hooks/ponytail-config.js. For example, running export PONYTAIL_DEFAULT_MODE=lite in your shell overrides the persisted setting for that session only.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →