Ponytail Mode Intensity Levels Explained: Lite, Full, and Ultra Behaviors

Ponytail provides three mode intensity levels—lite, full, and ultra—that control how aggressively the assistant applies minimal-code rules, ranging from explicit-only builds to challenging unnecessary requirements with one-liner solutions.

The DietrichGebert/ponytail repository implements configurable Ponytail mode intensity levels to govern exactly how much code the "lazy senior developer" assistant generates. These settings determine whether the assistant builds only what is explicitly requested, applies the complete rule ladder, or refuses to add anything unless strictly necessary. Understanding these three distinct behaviors allows precise control over implementation verbosity across every session.

Overview of the Three Ponytail Mode Intensity Levels

The canonical definitions for each intensity reside in skills/ponytail/SKILL.md, with specific line ranges distinguishing the behavioral boundaries for each tier.

Lite Mode

Defined in skills/ponytail/SKILL.md (lines 79‑82), lite mode instructs the assistant to build only what is explicitly asked for. While operating in this intensity, the assistant still mentions a lazier alternative in a single line, but it never adds code unless the user explicitly chooses that alternative. This represents a balanced approach that hints at efficiency without enforcing it.

Full Mode (Default)

Full mode, defined in skills/ponytail/SKILL.md (lines 79‑83), represents the standard ladder of minimal-code rules. This is the default intensity when no mode is supplied, as confirmed in ponytail-config.js (lines 16‑18). In this mode, the assistant applies YAGNI checks, reuses existing helpers, prefers standard-library solutions, and defaults to one-liner implementations where possible. The full ruleset ensures code generation remains aggressively minimal while still fulfilling requirements.

Ultra Mode

Ultra mode, defined in skills/ponytail/SKILL.md (lines 79‑84), takes the most extreme "lazy" stance. At this intensity, the assistant refuses to add anything unless the user explicitly asks for it, actively challenges unnecessary requirements, and only ever emits a one-liner solution. This behavior represents the strictest interpretation of the minimal-code philosophy, forcing users to justify every line of generated code.

How Ponytail Applies Mode Intensity Levels

The repository enforces intensity-specific behaviors through a three-stage pipeline involving resolution, filtering, and runtime tracking.

Mode Resolution and Normalization

When a request arrives, the system normalizes the requested mode through normalizeMode. If the mode is missing or set to off, the logic falls back to the persisted default and finally to full. This resolution chain is implemented in ponytail-mcp/instructions.js (lines 13‑22), ensuring that every request resolves to a valid, actionable intensity level.

Instruction Filtering by Intensity

The filterSkillBodyForMode function in hooks/ponytail-instructions.js (lines 22‑36) parses the skill markdown and keeps only the rows and worked examples that match the active intensity. This function uses the same mode names defined in the SKILL file (lite, full, or ultra), effectively stripping out any rules or examples that exceed the selected strictness level before they reach the generation layer.

Runtime Session Tracking

Real-time intensity management occurs in hooks/ponytail-mode-tracker.js. The tracker parses user prompts like /ponytail lite through a switch statement (lines 46‑49) and stores the selected intensity for the current session. When the command is invoked without an argument, the tracker reports the current level (lines 50‑53), providing immediate visibility into the active rule set.

Configuring Mode Intensity Levels

Users can interact with Ponytail intensities through command-line switches, programmatic API calls, or persistent configuration files.

Switching Intensity via Commands

The mode tracker monitors stdin for intensity changes, allowing real-time switching during a session:

// User types "/ponytail lite" → the mode-tracker reads the command
// (ponytail-mode-tracker.js, lines 46‑49)
process.stdin.on('data', chunk => { input += chunk; });
process.stdin.on('end', finish);

Programmatic Retrieval

Applications can request filtered instruction sets for specific intensities through the core resolver:

import { buildInstructions } from "./ponytail-mcp/instructions.js";

// Ask for the "ultra" intensity
const ultraRules = await buildInstructions("ultra");
console.log(ultraRules);   // only ultra‑specific rows/examples are present

Persisting Default Settings

To change the default intensity across all future sessions, use the configuration utility or set the PONYTAIL_DEFAULT_MODE environment variable (see ponytail-config.js, lines 76‑84):

// Set the default for all future sessions
const { writeDefaultMode } = require("./hooks/ponytail-config.js");
writeDefaultMode("lite");   // persisted to $XDG_CONFIG_HOME/ponytail/config.json

Summary

  • Lite mode generates only explicitly requested code while mentioning—but not enforcing—lazier alternatives.
  • Full mode (the default defined in ponytail-config.js) applies the complete rule ladder including YAGNI checks, helper reuse, and one-liner preferences.
  • Ultra mode refuses all additions unless explicitly required, challenges unnecessary requirements, and emits only one-liner solutions.
  • The system resolves modes via normalizeMode in ponytail-mcp/instructions.js, filters instructions through filterSkillBodyForMode in hooks/ponytail-instructions.js, and tracks runtime state in hooks/ponytail-mode-tracker.js.

Frequently Asked Questions

What is the default Ponytail mode intensity level?

The default intensity is full, as implemented in ponytail-config.js (lines 16‑18) and documented in the "Persistence" section of skills/ponytail/SKILL.md (lines 28‑31). When no mode is specified and no persisted override exists, the assistant defaults to applying the complete minimal-code ladder including YAGNI checks and std-lib preferences.

How do I switch between Ponytail mode intensity levels?

You can switch intensities by issuing the /ponytail command followed by the desired level (e.g., /ponytail ultra), which hooks/ponytail-mode-tracker.js parses at lines 46‑49. Alternatively, set the PONYTAIL_DEFAULT_MODE environment variable or use the writeDefaultMode function in hooks/ponytail-config.js to persist a new default across sessions.

What is the difference between lite and ultra modes?

While both lite and ultra restrict code generation, lite mode still generates explicitly requested features while merely mentioning alternatives, whereas ultra mode refuses to add anything unless the user explicitly asks for it and challenges unnecessary requirements. Lite operates at skills/ponytail/SKILL.md lines 79‑82, while ultra occupies lines 79‑84 with the additional constraint of emitting only one-liner solutions.

Where are the Ponytail mode intensity levels defined?

The human-readable definitions reside in skills/ponytail/SKILL.md (lines 79‑84), while the enforcement logic is distributed across hooks/ponytail-config.js for defaults, hooks/ponytail-instructions.js for markdown filtering, ponytail-mcp/instructions.js for resolution, and hooks/ponytail-mode-tracker.js for runtime session management.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →