<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Ponytail on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/ponytail/</link>
        <description>Recent content in Ponytail on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Wed, 24 Jun 2026 21:02:49 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/ponytail/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Ponytail Installation Guide: How to Use It with Codex, Claude Code, and Gemini CLI</title>
        <link>https://knightli.com/en/2026/06/24/ponytail-ai-agent-coding-plugin-guide/</link>
        <pubDate>Wed, 24 Jun 2026 21:02:49 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/06/24/ponytail-ai-agent-coding-plugin-guide/</guid>
        <description>&lt;p&gt;Ponytail is an interesting plugin for AI coding agents.&lt;/p&gt;
&lt;p&gt;It does not try to make AI more flashy. It does the opposite: it reminds the agent to pause before writing code and check whether the task can be solved by deleting code, reusing existing code, using a standard library, or relying on a browser or platform feature.&lt;/p&gt;
&lt;p&gt;Project: &lt;a class=&#34;link&#34; href=&#34;https://github.com/DietrichGebert/ponytail&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DietrichGebert/ponytail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you often see this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You only asked for a date picker, but the AI installed a component library, wrote a wrapper, added styles, and started discussing time zones.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You only wanted a small logic change, but the AI extracted three layers of helpers.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You only wanted to fix a bug, but the AI refactored half the file.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ponytail&amp;rsquo;s direction is exactly the point: make the AI behave more like a lazy but reliable senior developer, looking for the smallest useful change first.&lt;/p&gt;
&lt;h2 id=&#34;what-ponytail-is&#34;&gt;What Ponytail is
&lt;/h2&gt;&lt;p&gt;Ponytail is a set of working rules for AI coding agents.&lt;/p&gt;
&lt;p&gt;It asks the agent to follow a simple ladder before writing code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. Does this thing really need to exist?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Does the codebase already have it?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Can the standard library do it?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Can the platform do it natively?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. Can an installed dependency do it?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. Can one line solve it?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;7. Only then write just enough new code.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is not code golf. It is not about blindly making everything shorter. It is about avoiding unnecessary work: delete when possible, reuse when possible, and use native capabilities before reinventing them.&lt;/p&gt;
&lt;p&gt;The README gives a typical example: a date picker.&lt;/p&gt;
&lt;p&gt;A normal AI may install &lt;code&gt;flatpickr&lt;/code&gt;, write a wrapper, add styles, and explain many edge cases.&lt;/p&gt;
&lt;p&gt;The Ponytail style first considers:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That is the habit it tries to teach the agent.&lt;/p&gt;
&lt;h2 id=&#34;it-solves-overengineering-not-just-long-code&#34;&gt;It solves overengineering, not just long code
&lt;/h2&gt;&lt;p&gt;Ponytail is easy to misunderstand as &amp;ldquo;make AI write one-liners.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A better description is: make AI avoid unnecessary design.&lt;/p&gt;
&lt;p&gt;It keeps safety boundaries. It does not encourage removing necessary validation, error handling, security handling, or accessibility. Necessary work still needs to be done; Ponytail simply pushes the agent away from adding complexity for small requests.&lt;/p&gt;
&lt;p&gt;Good use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small frontend features;&lt;/li&gt;
&lt;li&gt;Form controls;&lt;/li&gt;
&lt;li&gt;Simple helper functions;&lt;/li&gt;
&lt;li&gt;Configuration changes;&lt;/li&gt;
&lt;li&gt;Small bug fixes;&lt;/li&gt;
&lt;li&gt;Code review for overimplementation;&lt;/li&gt;
&lt;li&gt;Adding constraints before an AI edits code;&lt;/li&gt;
&lt;li&gt;Asking the agent to search existing code first.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not interpret it as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Always write one line;&lt;/li&gt;
&lt;li&gt;Never add dependencies;&lt;/li&gt;
&lt;li&gt;Never refactor;&lt;/li&gt;
&lt;li&gt;Sacrifice maintainability to reduce code;&lt;/li&gt;
&lt;li&gt;Skip reading the codebase for speed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ponytail is lazy about implementation, not lazy about reading.&lt;/p&gt;
&lt;h2 id=&#34;supported-ai-coding-tools&#34;&gt;Supported AI coding tools
&lt;/h2&gt;&lt;p&gt;According to the README, Ponytail covers many tools, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code;&lt;/li&gt;
&lt;li&gt;Codex;&lt;/li&gt;
&lt;li&gt;GitHub Copilot CLI;&lt;/li&gt;
&lt;li&gt;Pi agent harness;&lt;/li&gt;
&lt;li&gt;OpenCode;&lt;/li&gt;
&lt;li&gt;Gemini CLI;&lt;/li&gt;
&lt;li&gt;Antigravity CLI;&lt;/li&gt;
&lt;li&gt;CodeWhale;&lt;/li&gt;
&lt;li&gt;Swival;&lt;/li&gt;
&lt;li&gt;OpenClaw;&lt;/li&gt;
&lt;li&gt;Cursor, Windsurf, Cline, Aider, Kiro, Zed, and other rule-file based tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The nice part is that you do not necessarily need to change your main AI tool.&lt;/p&gt;
&lt;p&gt;If you use Codex, install it as a Codex plugin. If you use Claude Code, use the Claude Code plugin marketplace. If you only want the rules inside your editor, copy the matching rule files.&lt;/p&gt;
&lt;h2 id=&#34;how-to-install-ponytail-in-codex&#34;&gt;How to install Ponytail in Codex
&lt;/h2&gt;&lt;p&gt;For Codex CLI, the README gives this entry point:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;codex plugin marketplace add DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;codex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then inside Codex:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;/plugins&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Select the Ponytail marketplace;&lt;/li&gt;
&lt;li&gt;Install Ponytail;&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;/hooks&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Review and trust its two lifecycle hooks;&lt;/li&gt;
&lt;li&gt;Start a new conversation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For the Codex desktop app, the README says to restart the app after installation so the plugin can be detected.&lt;/p&gt;
&lt;p&gt;One detail matters: Ponytail&amp;rsquo;s Claude Code and Codex plugins run two small Node.js lifecycle hooks, so &lt;code&gt;node&lt;/code&gt; must be available in PATH. The README also notes that if &lt;code&gt;node&lt;/code&gt; is missing, the skills can still work, but always-on activation will not happen automatically.&lt;/p&gt;
&lt;p&gt;Check first:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;node -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the command is not found, install Node.js or make sure the non-interactive shell PATH can find &lt;code&gt;node&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-install-it-in-claude-code&#34;&gt;How to install it in Claude Code
&lt;/h2&gt;&lt;p&gt;For Claude Code, use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin marketplace add DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then send:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin install ponytail@ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The README explicitly says these should be sent as two separate messages.&lt;/p&gt;
&lt;p&gt;If you use the Claude desktop app and do not have &lt;code&gt;/plugin&lt;/code&gt;, add a personal plugin marketplace from the UI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Customize;&lt;/li&gt;
&lt;li&gt;Click the plus button next to personal plugins;&lt;/li&gt;
&lt;li&gt;Create a plugin and add the marketplace;&lt;/li&gt;
&lt;li&gt;Choose Add from repository;&lt;/li&gt;
&lt;li&gt;Enter the Ponytail GitHub repository URL.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;how-to-install-it-in-github-copilot-cli&#34;&gt;How to install it in GitHub Copilot CLI
&lt;/h2&gt;&lt;p&gt;Copilot CLI can use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copilot plugin marketplace add DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copilot plugin install ponytail@ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Inside an interactive Copilot CLI session, you can also use slash commands:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin marketplace add DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin install ponytail@ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After installation, Copilot CLI can use Ponytail commands mentioned in the README, such as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/ponytail:ponytail ultra
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/ponytail:ponytail-review
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;gemini-cli-and-antigravity-cli&#34;&gt;Gemini CLI and Antigravity CLI
&lt;/h2&gt;&lt;p&gt;For Gemini CLI:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gemini extensions install https://github.com/DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;It loads the rule set as session context and registers &lt;code&gt;/ponytail&lt;/code&gt; commands.&lt;/p&gt;
&lt;p&gt;For Antigravity CLI:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agy plugin install https://github.com/DietrichGebert/ponytail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The README also notes that Google is renaming Gemini CLI to Antigravity CLI, so both paths may exist for a while. Use the CLI name that matches your installed tool.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-it-with-opencode&#34;&gt;How to use it with OpenCode
&lt;/h2&gt;&lt;p&gt;OpenCode can add this to &lt;code&gt;opencode.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;plugin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;@dietrichgebert/ponytail&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you run it from a local checkout, point to the local plugin file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;plugin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./.opencode/plugins/ponytail.mjs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is convenient if you already manage project configuration through OpenCode.&lt;/p&gt;
&lt;h2 id=&#34;what-if-you-only-want-the-rules&#34;&gt;What if you only want the rules
&lt;/h2&gt;&lt;p&gt;The Ponytail repository also contains rule files for different tools, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.cursor/rules/&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.windsurf/rules/&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.clinerules&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.kiro/steering/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your tool can read project-level rules, you can copy the relevant file directly.&lt;/p&gt;
&lt;p&gt;For example, the VS Code Codex extension reads &lt;code&gt;AGENTS.md&lt;/code&gt;. Putting Ponytail&amp;rsquo;s &lt;code&gt;AGENTS.md&lt;/code&gt; in the project root, or in a global Codex configuration location, lets Codex follow the same style through rules.&lt;/p&gt;
&lt;p&gt;The plugin route is more complete. The rule-file route is lighter.&lt;/p&gt;
&lt;h2 id=&#34;useful-prompts-with-ponytail&#34;&gt;Useful prompts with Ponytail
&lt;/h2&gt;&lt;p&gt;After installing it, do not rely only on automatic behavior. You can also write prompts that match Ponytail&amp;rsquo;s direction.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please check whether similar code already exists first. Reuse existing code where possible, and only add the smallest new implementation if it does not exist.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Or:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not overengineer this request. First check whether the standard library, native HTML controls, or installed dependencies can solve it.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For code review:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Review this change in the Ponytail style. Focus on over-abstraction, duplicate implementation, unnecessary dependencies, and places where native features can replace custom code.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;These prompts point in the same direction as Ponytail and usually produce more stable results.&lt;/p&gt;
&lt;h2 id=&#34;typical-tasks-for-ponytail&#34;&gt;Typical tasks for Ponytail
&lt;/h2&gt;&lt;h3 id=&#34;1-frontend-controls&#34;&gt;1. Frontend controls
&lt;/h3&gt;&lt;p&gt;Date pickers, color pickers, file uploads, numeric inputs, switches, and select boxes.&lt;/p&gt;
&lt;p&gt;AI often reaches for a component library, but native HTML controls are enough in many cases.&lt;/p&gt;
&lt;h3 id=&#34;2-helper-functions&#34;&gt;2. Helper functions
&lt;/h3&gt;&lt;p&gt;Deduplication, sorting, formatting, path handling, and date handling.&lt;/p&gt;
&lt;p&gt;Check the language standard library and existing helpers before writing a new function.&lt;/p&gt;
&lt;h3 id=&#34;3-configuration-changes&#34;&gt;3. Configuration changes
&lt;/h3&gt;&lt;p&gt;ESLint, TypeScript, Hugo, Vite, Docker, and CI configuration.&lt;/p&gt;
&lt;p&gt;Many configuration problems need a one-line change, not a new script or toolchain.&lt;/p&gt;
&lt;h3 id=&#34;4-small-bug-fixes&#34;&gt;4. Small bug fixes
&lt;/h3&gt;&lt;p&gt;Ponytail helps look for the smallest fix point instead of turning one bug into a large refactor.&lt;/p&gt;
&lt;h3 id=&#34;5-code-review&#34;&gt;5. Code review
&lt;/h3&gt;&lt;p&gt;It works well as an overengineering checker.&lt;/p&gt;
&lt;p&gt;Ask the AI to inspect a diff and answer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is anything reinvented?&lt;/li&gt;
&lt;li&gt;Are there unnecessary dependencies?&lt;/li&gt;
&lt;li&gt;Can any code be deleted?&lt;/li&gt;
&lt;li&gt;Is the implementation more complex than the requirement?&lt;/li&gt;
&lt;li&gt;Can existing modules be reused?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-to-watch-out-for&#34;&gt;What to watch out for
&lt;/h2&gt;&lt;p&gt;Ponytail has a good direction, but do not turn it into a new rulebook.&lt;/p&gt;
&lt;p&gt;Do not save code at the cost of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input validation;&lt;/li&gt;
&lt;li&gt;Permission checks;&lt;/li&gt;
&lt;li&gt;Data-loss protection;&lt;/li&gt;
&lt;li&gt;Concurrency and transaction safety;&lt;/li&gt;
&lt;li&gt;User privacy;&lt;/li&gt;
&lt;li&gt;Accessibility;&lt;/li&gt;
&lt;li&gt;Error handling;&lt;/li&gt;
&lt;li&gt;Important logs;&lt;/li&gt;
&lt;li&gt;Test coverage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple does not mean sloppy.&lt;/p&gt;
&lt;p&gt;If a feature touches security boundaries, money, user data, or production operations, even the smallest implementation must handle the boundaries clearly.&lt;/p&gt;
&lt;h2 id=&#34;my-suggested-way-to-try-it&#34;&gt;My suggested way to try it
&lt;/h2&gt;&lt;p&gt;For a first test:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install it in a small project;&lt;/li&gt;
&lt;li&gt;Try a request that AI often overbuilds, such as a date picker or color picker;&lt;/li&gt;
&lt;li&gt;Compare what AI writes without Ponytail;&lt;/li&gt;
&lt;li&gt;Ask it to review an existing diff;&lt;/li&gt;
&lt;li&gt;Then put it into daily projects.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Do not test it first with a large refactor.&lt;/p&gt;
&lt;p&gt;Ponytail is most useful for tasks that are small in reality but easy for AI to inflate.&lt;/p&gt;
&lt;h2 id=&#34;one-sentence-summary&#34;&gt;One-sentence summary
&lt;/h2&gt;&lt;p&gt;Ponytail does not turn AI into a tool that only writes short code. It makes the AI ask one more question before acting:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Does this code really need to be written?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you use Codex, Claude Code, Copilot CLI, Gemini CLI, or similar AI coding agents and often get annoyed by overimplementation, Ponytail is worth trying. It will not make every architecture decision for you, but it adds a useful constraint: reuse first, avoid detours, and stop reinventing wheels.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
