臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速7.Google 搜索收录排查:为什么关键词搜得到别人,却搜不到我的网站?Obsidian、双向链接与知识图谱
架构设计
分布式分布式事务RPC原理
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
数据库
mysql01.MySQL基础语法与约束02.MySQL数据库类型03.MySQL多表查询04.MySQL 索引05.MySQL 事务06.MySQL 隔离级别07.MySQL MVCC08.MySQL 锁09.EXPLAIN10.慢查询与 SQL 优化
mysql面试题01.索引问题02.事务与隔离级别03.锁机制04.存储引擎与性能优化05.用户权限、字符集与备份恢复
mysql实战01.EXPLAIN实战02.测试环境菜单误删排查与恢复03.MySQL IN 详解
网络
网络安全1.无线监听网卡苹果M系列虚拟机安装Kali Linux教程3.kali怎么使用RTL8812AU4.kali基础命令
网络基础进程之间怎样通过网络传递数据
网址常用网址
中间键
esElasticsearch 入门
mq
RabbitMQRabbitMQ高级RabbitMQ基础
1. MQ 基础2. MQ 核心角色与代码对应3. MQ Consumer Group 与消费模式4. SOFAMQ 账户变更代码实践5. MQ 可靠性问题6. 消息幂等
redis缓存击穿、穿透与雪崩Redis 分布式锁Redis 缓存问题Redis 数据结构
AI
使用说明
第三方插件&技能简介Archify使用与安装指南geekgeekRun使用OfferFlow使用指南Ponytail使用指南Skills Manager使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发0-学习路线1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.*完成可运行聊天接口11.Function Calling、Tool Calling 原理12.用 Java 方法定义 Tool13.工具参数设计和校验14.实现订单查询工具15.实现物流查询工具16.实现库存查询工具17.多个工具自动选择18.工具异常、超时、重试
diy主机
主机零件学习1.CPU2.主板3.内存4.显卡5.硬盘6.散热7.风扇8.机箱热门型号价格表
捡垃圾diy-13600kf+5060diy-14600kf+5070
English高频词汇英文基础语法简单句子音标
GitGit常用命令Sublime Merge 使用指南
Java
工具库Caffeine本地缓存Reactor教程
工作实践如何使用@Async线程池使用与排查线上服务 CPU 使用率过高排查压测下RPC接口大量失败排查记录
基础1.HashMap2.ConcurrentHashMap3.HashSet4.final5.static6.volatile7.AtomicInteger8.String动态代理反射锁与线程同步线程注解
面试题1.HashMap 存储在方法内是线程安全的吗2.ArrayList参数传递与引用重新赋值3.== 和 equals 的区别、hashcode4.重载和重写的区别5.String、StringBuffer、StringBuilder区别及使用场景6.接口和抽象类7.ArrayList 与 LinkedList 的区别和扩容机制8.HashMap 和 Hashtable 的区别及底层实现9.Object 和 Objects 的区别10.ThreadLocal的原理和使用场景11.字节码是什么及作用12.Java类加载器有哪些13.双亲委派模型14.Java异常体系15.GC是什么16.GC如何判断对象可以被回收
面试总结0.HR面试模板1.面试一2.面试二3.面试三笔试
网络与 IO(黑马程序员-纯理论)01-网络编程基础02-IO模型与零拷贝03-BIO04-NIO基础与缓冲区05-NIO通道与选择器06-AIO
juc00-目录01-进程与线程02-线程同步与通信03-并发设计模式04-Java内存模型05-CAS与原子类06-ThreadLocal07-阻塞队列08-线程池使用与原理09-任务调度10-ForkJoin与享元模式11-AQS12-ReentrantLock13-读写锁14-并发协作工具15-ConcurrentHashMap16-CopyOnWrite与同步容器17-SkipListMap18-非阻塞队列
juc(工作常见)Java并发编程三个重点拆解
jvm1. JVM运行时数据区
Spring1.Spring IoC、DI与构造方法注入CGLIB、Byte Buddy 与 Spring AOPSpring 常用注解详解Spring Bean 生命周期
Spring MVC异常处理机制
linux常用命令
mac快捷键终端常用操作
python
基础01.Python是什么,为什么要安装Python02.Python项目中.venv是什么03.Python基础语法
基础实战sql替换
HTTPXHRMS员工详情接口调用(Python HTTPX)
windowswindows激活

Ponytail 使用指南

1. Ponytail 是什么

Ponytail 是一个面向 AI 编程助手的“最简实现”插件。

它不会替代编程能力,而是约束 AI 的实现方式:先充分理解需求和现有代码,再选择代码量更少、依赖更少、维护成本更低的方案。

核心原则:

  1. 判断需求是否真的需要实现
  2. 优先复用项目已有代码
  3. 优先使用标准库
  4. 优先使用平台原生能力
  5. 优先使用已经安装的依赖
  6. 能用一行解决就不写几十行
  7. 最后才编写最少的新代码

“最简”不代表忽略输入校验、数据安全、错误处理、无障碍支持或明确要求。


2. 快速开始

Ponytail 安装并启用后,直接描述开发需求即可:

帮我修复订单重复提交的问题。

给这个页面增加日期选择功能,使用最简单的实现。

也可以显式调用:

@ponytail 帮我实现这个功能

Ponytail 会优先寻找现有实现、标准库或原生能力,并尽量减少修改范围。


3. 三种模式

Lite

/ponytail lite

正常完成需求,同时用一句话指出更简单的替代方案,由用户决定是否采用。

适合:

  • 需求已经确定
  • 希望 AI 少质疑需求
  • 仍想知道有没有更省事的方案

Full

/ponytail

默认模式。严格执行“复用、标准库、原生能力、最少代码”的选择顺序。

适合:

  • 日常功能开发
  • Bug 修复
  • 小型重构
  • 控制新增依赖和代码复杂度

Ultra

/ponytail ultra

最激进的精简模式。优先删除而不是新增,并主动判断需求是否可以不做。

适合:

  • 清理历史包袱
  • 快速原型
  • 明显过度设计的项目
  • 强力控制代码膨胀

简单理解:

模式行为
Lite按要求做,同时提醒
Full选择最简单的正确方案
Ultra优先考虑不做或删除

模式通常持续到切换、关闭或会话结束。


4. 专项命令

@ponytail

开启 Ponytail 编程模式,使用最简单且可靠的方案完成任务。

示例:

@ponytail 给用户列表增加 CSV 导出功能

@ponytail-review

只检查当前 Git 修改内容是否存在过度设计。

主要寻找:

  • delete:无用代码或预留功能
  • stdlib:重复实现了标准库能力
  • native:代码或依赖可以由平台原生能力替代
  • yagni:暂时没有实际用途的抽象
  • shrink:相同逻辑可以明显缩短

示例:

@ponytail-review 检查当前修改

注意:

  • 默认检查当前修改,不检查整个项目
  • 只生成审查结果,不自动修改代码
  • 不负责检查正确性、安全漏洞和性能问题

/ponytail-audit

扫描整个代码库,查找可删除、简化或替换的设计。

示例:

/ponytail-audit

它与 ponytail-review 的区别:

命令检查范围
ponytail-review当前 Git 修改
ponytail-audit整个代码库

该命令只报告问题,不自动修改。

/ponytail-debt

收集代码中的 ponytail: 注释,形成简化事项清单。

示例注释:

# ponytail: 当前使用全局锁,并发量明显增长时改为按账号加锁

命令输出会说明:

  • 哪些地方采用了临时简化
  • 当前方案的能力上限
  • 什么情况下需要升级
  • 哪些注释缺少明确的升级条件

默认只读取和报告,不写入文件。

/ponytail-gain

显示 Ponytail 官方基准测试中的代码量、成本和速度数据。

这些数字来自公开基准测试,不代表当前项目实际节省的数据。

@ponytail-help

显示模式、命令和配置的快捷帮助。


5. 推荐使用流程

开发新功能

@ponytail 实现这个需求,优先复用项目已有能力,不增加非必要依赖。

Ponytail 会先阅读相关代码,再决定是否需要新增实现。

修复 Bug

@ponytail 查明根因并修复,不要只处理表面报错。

Ponytail 通常会检查相关函数的调用方,并尽量在共享入口修复一次。

检查本次修改

@ponytail-review 检查当前修改是否过度设计。

根据报告决定是否需要进一步执行修改。

检查整个项目

/ponytail-audit

适合定期清理依赖、包装层、单实现接口和废弃配置。

查看遗留的简化方案

/ponytail-debt

适合在版本发布或架构调整前检查此前主动留下的技术限制。


6. 它不会自动做什么

专项检查命令默认不会修改代码:

操作是否修改代码
@ponytail 执行开发需求会
@ponytail-review不会
/ponytail-audit不会
/ponytail-debt不会
/ponytail-gain不会
@ponytail-help不会

如果希望应用检查结果,需要明确提出:

根据刚才的 ponytail-review 结果,修复前两项。

7. 关闭与恢复

关闭:

stop ponytail

或者:

normal mode

恢复默认模式:

/ponytail

8. 默认模式配置

默认模式是 full。

可以通过环境变量设置:

export PONYTAIL_DEFAULT_MODE=ultra

或者使用配置文件:

{
  "defaultMode": "lite"
}

配置文件位置:

  • macOS/Linux:~/.config/ponytail/config.json
  • Windows:%APPDATA%\ponytail\config.json

支持的值:

lite
full
ultra
off

优先级为:

环境变量 > 配置文件 > 默认 full

9. 使用建议

日常开发使用 Full 即可。

只有在以下情况下才建议切换:

  • AI 经常质疑已经确定的需求:使用 Lite
  • 项目明显臃肿,需要强力精简:使用 Ultra
  • 只想检查本次改动:使用 ponytail-review
  • 想检查整个项目:使用 ponytail-audit

Ponytail 专注于减少不必要的复杂度。代码正确性、安全性和性能仍应通过正常代码审查和测试单独确认。