タグの重複を取り除くように頼んだら、新しいパッケージと設定ファイルまで増えていた。それらも次の変更から保守の対象になります。Dietrich Gebertが公開しているオープンソースのスキルPonytailは、コーディングエージェントに、既存のコードや言語の標準機能から検討するよう指示します。
Codexに導入する
ターミナルで次の2行を順番に実行します。プラグインのライフサイクルフックを実行するには、Codexの実行環境からNode.jsを呼び出せる必要があります。
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytailCodex CLIの /hooks でPonytailが登録した2つのフックの内容を確認し、信頼できる場合は承認して新しいチャットを開きます。デスクトップアプリを使う場合は、インストール後にアプリを再起動します。Ponytail公式のインストール手順
Claude Codeに導入する
Claude Codeの入力欄に次のコマンドを1行ずつ送ります。インストール後は新しいセッションで /ponytail full を実行すると、標準の強度を明示して使い始められます。
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail最初の依頼に動作条件を書く
公式プラグインを入れたCodexでは、入力欄でPonytailスキルを選ぶか、$ponytail:ponytail で呼び出せます。Claude Codeでは /ponytail full でモードを有効にしてから、次の依頼を送ります。
タグの一覧から重複を取り除いてください。
最初に現れた順序を保ち、大文字と小文字が異なるタグはそれぞれ残してください。
既存の共通処理を先に確認し、空の一覧と重複のある一覧を検証してください。実装の違いを見る
専用の重複チェック関数と、一覧を変換する処理をそれぞれ書く方法もあります。JavaScriptの Set は文字列を追加した順に取り出せて、大文字と小文字の違いも区別します。既存の共通処理がなければ、この例の条件は1行で満たせます。
次は動作を説明するための例です。tags.mjs に保存し、node tags.mjs を実行すると、順序と大文字・小文字、空の一覧を検証できます。
import assert from 'node:assert/strict';
const uniqueTags = tags => [...new Set(tags)];
assert.deepEqual(uniqueTags(['news', 'AI', 'news', 'ai']), ['news', 'AI', 'ai']);
assert.deepEqual(uniqueTags([]), []);大文字と小文字の違いを無視する製品では、どのタグを同じとみなすか、どちらの表記を残すかを先に決めます。実際のコードへ移すときは、既存の呼び出し元が期待する動作も確認します。
強度を選ぶ
Table 1 · 作業に合わせたPonytailの強度
| 強度 | 使う場面 |
|---|---|
| Lite | 依頼の範囲は維持し、より小さな選択肢も知りたいとき。 |
| Full | 既存コードや標準機能から検討し、必要な動作を満たす最小の変更を探すとき。標準設定です。 |
| Ultra | 機能やオプション自体が必要かどうかを見直したいとき。 |
外部入力の検証、データ消失を防ぐエラー処理、セキュリティ、アクセシビリティは、どの強度でも残す条件です。変更が返ってきたら差分とテストを開き、依頼に書いた動作条件を一つずつ確認します。Ponytailのスキル原文