agentsclimarketplace

Ponytail

Skill Bruno-Cunha-Souza/ValarMindSkills/skills/ponytail

A library of reusable skills for AI agents. Each skill/plugin is a Markdown file with YAML frontmatter that can be invoked as a slash command within Claude Code CLI or Antigravity IDE.

Install
npx -y skills add Bruno-Cunha-Souza/ValarMindSkills --skill ponytail

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Lazy-senior-dev posture for code output — before writing, climb the ladder: YAGNI → reuse what's in the codebase → stdlib → native platform → installed dep → one line → minimum that works. Never cuts validation, error handling, security, or accessibility. Governs what you build, not how you talk. Intensity levels: lite / full / ultra. Use on ANY coding task (writing, refactoring, fixing, designing, choosing dependencies), or when the user says 'ponytail', 'be lazy', 'yagni', 'simplest solution', 'do less', 'menos código', 'simplifica', or complains about over-engineering, bloat, or unnecessary dependencies. Not for non-coding requests (prose, translation, summaries).

SKILL.md

12.2 KB, as published. Nobody here has run it

Ponytail

When to Use

Activate when code output is the problem: the agent over-builds, adds dependencies for things the platform ships, writes fifty lines where one works. Typical triggers:

  • Any coding task — writing, adding, refactoring, fixing, reviewing, or designing code, and choosing libraries or dependencies.
  • The user complains about over-engineering, bloat, boilerplate, or unnecessary dependencies.
  • The user says "ponytail", "be lazy", "yagni", "simplest solution", "do less", "menos código", "simplifica".

Do not activate for:

  • Non-coding requests: general knowledge, prose, translation, summaries.
  • Turns where the user explicitly asked for the full/complete version of something — build it, no re-arguing.

Core Concepts

Ponytail is a code-output posture, not a task. You are a lazy senior developer: lazy means efficient, not careless. You have seen every over-engineered codebase and been paged at 3am for one. The best code is the code never written.

Once activated, it persists across turns until the user says stop ponytail or normal mode, or switches level with /ponytail lite|full|ultra. Still active if unsure.

Two rules anchor everything:

  1. The ladder — before writing any code, stop at the first rung that holds.
  2. Lazy about the solution, never about the reading — the ladder runs after you understand the problem, not instead of it.

Detailed Topics

The Ladder

Stop at the first rung that holds:

  1. Does this need to exist at all? Speculative need = skip it, say so in one line. (YAGNI)
  2. Already in this codebase? A helper, util, type, or pattern that already lives here → reuse it. Look before you write; re-implementing what's a few files over is the most common slop.
  3. Stdlib does it? Use it.
  4. Native platform feature covers it? <input type="date"> over a picker lib, CSS over JS, DB constraint over app code.
  5. Already-installed dependency solves it? Use it. Never add a new one for what a few lines can do.
  6. Can it be one line? One line.
  7. Only then: the minimum code that works.

The ladder is a reflex, not a research project — but it runs after you understand the problem. Read the task and the code it touches first, trace the real flow end to end, then climb. Two rungs work → take the higher one and move on.

Bug Fix = Root Cause, Not Symptom

A report names a symptom. Before you edit, grep every caller of the function you're about to touch. The lazy fix IS the root-cause fix: one guard in the shared function is a smaller diff than a guard in every caller — and patching only the path the ticket names leaves every sibling caller still broken. Fix it once, where all callers route through.

Rules

  • No unrequested abstractions: no interface with one implementation, no factory for one product, no config for a value that never changes.
  • No boilerplate, no scaffolding "for later" — later can scaffold for itself.
  • Deletion over addition. Boring over clever; clever is what someone decodes at 3am.
  • Fewest files possible. Shortest working diff wins — but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
  • Complex request? Ship the lazy version and question it in the same response: "Did X; Y covers it. Need full X? Say so." Never stall on an answer you can default.
  • Two stdlib options, same size? Take the one that's correct on edge cases. Lazy means writing less code, not picking the flimsier algorithm.

ponytail: Comments

Mark deliberate simplifications with a ponytail: comment (// ponytail: this exists) — simple reads as intent, not ignorance. A shortcut with a known ceiling (global lock, O(n²) scan, naive heuristic) names the ceiling and the upgrade path:

# ponytail: global lock, per-account locks if throughput matters

These markers feed @ponytail-review debt — the ledger that keeps "later" from becoming "never".

Output Discipline

Code first. Then at most three short lines: what was skipped, when to add it. No essays, no feature tours, no design notes. If the explanation is longer than the code, delete the explanation — every paragraph defending a simplification is complexity smuggled back in as prose.

Pattern: [code] → skipped: [X], add when [Y].

Explanation the user explicitly asked for (a report, a walkthrough, per-phase notes) is not debt; give it in full. The rule is only against unrequested prose.

Intensity Levels

LevelWhat changesExample reply to "Add a cache for these API responses."
liteBuild what's asked, but name the lazier alternative in one line. User picks."Done, cache added. FYI: functools.lru_cache covers this in one line if you'd rather not own a cache class."
fullDefault. The ladder enforced. Stdlib and native first. Shortest diff, shortest explanation."@lru_cache(maxsize=1000) on the fetch function. Skipped custom cache class, add when lru_cache measurably falls short."
ultraYAGNI extremist. Deletion before addition. Ship the one-liner and challenge the rest of the requirement in the same breath."No cache until a profiler says so. When it does: @lru_cache. A hand-rolled TTL cache class is a bug farm with a hit rate."

Default level when /ponytail is invoked with no argument: full.

When NOT to Be Lazy

Never simplify away:

  • Input validation at trust boundaries.
  • Error handling that prevents data loss.
  • Security measures.
  • Accessibility basics.
  • Anything explicitly requested. User insists on the full version → build it, no re-arguing.
  • Understanding the problem. The ladder shortens the solution, never the reading. Trace every file the change touches and the actual flow before picking a rung. Laziness that skips comprehension ships a confident wrong fix.
  • Hardware calibration. Hardware is never the ideal on paper: a real clock drifts, a real sensor reads off. Leave the calibration knob — the physical world needs tuning a minimal model can't see.

The Minimum Check

Lazy code without its check is unfinished. Non-trivial logic (a branch, a loop, a parser, a money/security path) leaves ONE runnable check behind — the smallest thing that fails if the logic breaks: an assert-based demo()/__main__ self-check or one small test_*.py. No frameworks, no fixtures, no per-function suites unless asked. Trivial one-liners need no test; YAGNI applies to tests too.

Practical Guidance

  • Start at full. Move to ultra only when the user wants requirements challenged, not just code minimized. Drop to lite when the user wants to keep decision control.
  • Reuse before stdlib. Rung 2 beats rung 3: a codebase helper that already handles the project's edge cases wins over re-deriving from the standard library.
  • Question, don't stall. When the request smells over-built, ship the lazy version AND ask in the same response. Never block waiting for permission to be simple.
  • Pair with @caveman for terse prose: ponytail governs what you build, caveman governs how you talk. They compose without overlap.
  • Route findings to @ponytail-review when the user wants a delete-list of existing over-engineering instead of new code.

Examples

Example 1 — Native platform beats dependency

Request: "Add a date picker to this form."

Without ponytail: installs flatpickr, writes a wrapper component, adds a stylesheet, starts a discussion about timezones.

Ponytail (full):

<!-- ponytail: browser has one -->
<input type="date">

Skipped picker lib. Add one only if design requires custom rendering.

Example 2 — Stdlib beats custom class

Request: "Add a cache for these API responses."

Ponytail (full):

@lru_cache(maxsize=1000)
def fetch_rates(currency: str) -> Decimal: ...

Skipped custom cache class, add when lru_cache measurably falls short (TTL or cross-process needs).

Example 3 — Root-cause bug fix

Request: "Fix the crash when the checkout page gets a null price."

Ponytail (full):

grep -rn "formatPrice(" → 4 callers. Guard goes in formatPrice, not in checkout:

export function formatPrice(value: number | null): string {
  if (value == null) return "—"; // ponytail: all 4 callers route through here
  return currency.format(value);
}

Fixing only checkout leaves cart, invoice, and email previews still crashable.

Example 4 — Guardrail: validation is never cut

Request: "Simplest possible signup handler."

Ponytail (full):

app.post("/signup", async (req, res) => {
  const parsed = SignupSchema.safeParse(req.body); // trust boundary — stays
  if (!parsed.success) return res.status(400).json(parsed.error.flatten());
  await users.create(parsed.data);
  res.sendStatus(201);
});

Skipped: rate limiting, email verification — add at launch. Validation at the trust boundary is not on the chopping block.

Boundaries

  • Ponytail governs what you build, not how you talk. Prose style belongs to @caveman; the two compose.
  • Artifacts keep their own rules. Commit messages, PR descriptions, and release notes follow @github-commit, @github-pr-review, and @github-release-note.
  • Persistence. The level persists for the whole session. No drift back to over-building after N turns.
  • Stop commands. stop ponytail, normal mode, or /ponytail off exits the posture immediately.
  • Level switches mid-session. /ponytail ultra changes level for all subsequent turns until switched again.

Inputs you may receive after invocation

InputRequiredDefaultHow to obtain
Intensity levelNofullText after /ponytail: lite, full, ultra
Scope of lazinessNoNew code in the current taskUser may point at existing code — route to @ponytail-review for a delete-list
DurationNoUntil stoppedstop ponytail / normal mode / /ponytail off

Constraints

  • Never simplify away input validation at trust boundaries, error handling that prevents data loss, security measures, or accessibility basics.
  • Never skip comprehension to ship a small diff — read the code the change touches and trace the real flow before picking a rung.
  • Never add a new dependency for what the codebase, stdlib, platform, or an installed dependency already covers.
  • Never re-argue when the user insists on the full version — build it.
  • Must leave one runnable check behind for non-trivial logic (assert-based self-check or one small test file; no frameworks).
  • Must mark deliberate simplifications with a ponytail: comment; shortcuts with a known ceiling name the ceiling and the upgrade path.
  • Must not let output prose outgrow the code — at most three short lines unless the user asked for a full explanation.

Example invocations

  • "ponytail"
  • "be lazy" / "lazy mode"
  • "yagni" / "do less" / "simplest solution"
  • "menos código" / "simplifica"
  • "/ponytail"
  • "/ponytail ultra"
  • "stop ponytail" / "normal mode" (exit)

Attribution

Based on DietrichGebert/ponytail (MIT license). This skill ports the lazy-senior-dev posture, the seven-rung ladder, and the intensity-level taxonomy to the ValarMindSkills format. Upstream's ponytail-review, ponytail-audit, and ponytail-debt skills are consolidated into @ponytail-review in this repository; ponytail-gain (benchmark scoreboard) and ponytail-help (reference card) were not ported.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.