Sub Agentsにも最適。Claude Codeから動的にプロンプト実行する CLI Prompt 管理ツール - Climpt
概要
CLIツールを使った、Agentic Codingのためのプロンプト実行です。
(Vibe用ではありません)
ユースケース
多様なプロンプトを使い分け、望んだプロンプトを1行のコマンドで実行します。
主に、以下のユースケースを想定しています。
- パターン化したプロンプトの使い分けを、一元管理したい
- Claude CodeのようなCLIエージェントから、動的に呼び出したい
- 処理の連鎖に、プロンプトを仲介して加工フローを構築したい
- 特定の実装領域に、特定の洗練されたプロンプトを使い分けたい
- Coding Agent にプロンプトを選ばせたい
また、応用ユースケースとしては、次のようなケースが想定されています。
- Coding Agent が生成するコードを導き、安定化させたい
- 抽象度の高い実装を、再現性高く実行したい
応用のために、Denoを用います。
Climptを複数Deno実行コマンドとして、最適化して用意します。
用意された実行コマンドは、プロファイルを切り替えることができます。
Climpt
Climptは、事前に用意したプロンプト群を使い分け、望んだプロンプトを1行のコマンドで呼び出し、出力します。
呼び出し時に、プロンプトへ差し込む値を引数で渡すことが可能です。
実行例:
# Bugレポートに基づいた新規テスト構築
cat bug_report.md | climpt-buld new test --input=bug
# 課題からタスクへの詳細なブレークダウン
climpt-breakdown to task --input=issue --from=github_issue_123.md --adaptation=detailed --uv-storypoint=5
このツールはAIコーディングエージェントと連携して動作するよう設計されており、特にCursorやClaude向けに最適化されています。基盤となるAIモデルはClaudeを想定していますが、構文や構造は他のAIモデルでも容易に解釈できるよう設計されています。
インストール
CLIとしてインストール
Climptは主にCLIツールとして使用することを想定しています。公式のDeno/JSR方式でインストールできます:
deno install --allow-read --allow-env --global climpt jsr:@aidevtool/climpt
jsr specifier を使った直接実行
sh から JSRを直接実行する場合は、インストール不要です。
権限に read/env は必要です。write/runは不要です。
exec deno run --allow-read --allow-env --no-config 'jsr:@aidevtool/climpt' --config=build "$@"
使い方
インストールした場合は、climptコマンドを直接使用できます:
climpt --help
climpt init
climpt to project --config=custom
セットアップ
初期設定
Climptは、.agent/climpt/config/default-app.yml
を必要とします。
通常は、プロジェクト直下にて climpt init
することで生成されます。手動で作成しても構いません。
任意の階層化へインストールすることもできます。例えば tests/ 配下で init することも可能です。
ただし、以下へ示すように、 .deno/bin/*
へ複数の実行ファイルを用意するほうが、利便性高く管理できます。
複数インストール設定
プロファイルの切り替えは、--config
オプションで行います。
Deno の呼び出し時に、 --config=profilename
を付与します。
これにより、以下のような複数インストールを実現します。
まず、.deno/bin 配下に --config 違いの呼び出しを複数用意します。
.deno/bin
├── climpt-arch # --config=arch
├── climpt-breakdown # --config=breakdown
├── climpt-build # --config=build
├── climpt-diagnose # --config=diagnose
├── climpt-research # --config=research
├── climpt-setup # --config=setup
└── climpt-verify # --config=verify
prefixの climpt-
は任意です。他のCLIツールと名称が被らない範囲で、「Claude Codeが自然に使う名称」が好ましいです。コンテキストの中で選定されやすい単語のほうが、適切に実行されやすくなります。
#!/bin/sh
# Check if help or version is requested
case "$1" in
-h|--help|-v|--version)
exec deno run --allow-read --allow-env --no-config 'jsr:@aidevtool/climpt' "$@"
;;
*)
exec deno run --allow-read --allow-env 'jsr:@aidevtool/climpt' --config=diagnose "$@"
;;
esac
次に、対応する設定を、複数用意します。 *-app.yml
の * 部分がプロファイル名です。
プロファイルごとに、受け付けられる引数指定を変えられます。
例えば arch
は climpt-arch optimize go
を実行できるが、climpt-setup optimize go
は実行できない状態を作ることが可能です。
.agent/climpt
├── config
│ ├── arch-app.yml
│ ├── arch-user.yml
│ ├── breakdown-app.yml
│ ├── breakdown-user.yml
│ ├── build-app.yml
│ ├── build-user.yml
# Breakdown Configuration
params:
two:
directiveType:
pattern: "^(optimize)$"
layerType:
pattern: "^(go)$"
# Breakdown Configuration
params:
two:
directiveType:
pattern: "^(climpt)$"
layerType:
pattern: "^(list)$"
directiveType
と layerType
の組み合わせ制御ができないため、増やしすぎないよう留意してください。
最後に、テンプレートプロンプトを用意します。
プロンプトの配置場所は、設定で切り替えられます。そのため、プロファイルごとに保存階層を変更できます。
以下の例では、同じ prompts/ 階層に、プロファイル名で分けて階層化しています。
.agent/climpt
├── prompts
│ ├── arch
│ │ └── optimize
│ │ └── go
│ │ └── f_default.md
│ ├── breakdown
│ │ └── to
│ │ ├── issue
│ │ │ ├── f_default.md
│ │ │ ├── f_detailed.md
│ ├── diagnose
│ │ └── trace
│ │ └── stack
│ │ └── f_test.md
│ ├── setup
│ │ └── climpt
│ │ └── list
│ │ └── f_default.md
運用
よく使うプロンプトファイルを、プロンプト階層へ保存します。
プロジェクトに重要なプロンプトは、Git管理下に置きます。
プロンプトには、置換のためのテンプレート変数を用いることができます。
# エラー対処方針
エラーを種類で分けて、方針を考えます。
その後、エラー種類ごとにファイルを分け、出力先へ保存します。
1つのファイルに記載する行数上限は、{uv-max-line-num} です。
出力先: `{destination_path}`
# エラー内容
`````
{input_text}
`````
上記のテンプレートに対し、以下のコマンドを実行すると、値が置き換わります。
echo "something error" | climpt-diagnose trace stack --input=test -o=./tmp/abc --uv-max-line-num=3
# エラー対処方針
エラーを種類で分けて、方針を考えます。
その後、エラー種類ごとにファイルを分け、出力先へ保存します。
1つのファイルに記載する行数上限は、3 です。
出力先: `/*****/.agent/climpt/tmp/abc`
# エラー内容
`````
something error
`````
uv-*
は自由に設定できるため、変数定義も必要な数だけ入れられます。
実行可能なコマンド一覧を作成する
運用するなかでプロンプトは増えていきます。変数の組み合わせも、増えると管理ができなくなります。
そこで、一覧表を用意します。
最新の一覧表をメンテナンスするために、以下のプロンプトを用意しました。
これを climpt-setup climpt list
で呼び出せるようにしています。
---
title: Climpt combinations
---
# 実施事項
使用可能な Climpt リストを作成する。
## Climpt とは
Deno JSR @https://jsr.io/@aidevtool/climpt である。
CLIでPromptを出力することが目的のツールである。
パラメータで渡した値をもとに、プロンプトテンプレートの変数を置換する。
通常利用時:
```zsh
climpt-* <Directive> <Layer> --*
```
STDIN利用時:
```zsh
echo "something" | climpt-* <Directive> <Layer> --*
```
使用できるプロンプトは、設定ごとにディレクトリが指定されている。
そのため、コマンドおよび設定ファイル、プロンプトファイルの存在を調べると、使用可能なコマンド一覧を作成できる。
実行可能なコマンド: `.deno/bin/climpt-*`
設定: `.agent/climpt/config/*.yml`
プロンプト: `.agent/climpt/prompts/**/f_*.md`
## 手順
1. `.agent/climpt/tools-list.md` を読む
2. 「実行可能なコマンド」を `.deno/bin/climpt-*` から取得する
3. `.agent/climpt/tools-list.md` の段落に記載する
3-1. すでにあれば記載不要、なければ段落を新説
4. プロンプトディレクトリからファイル一覧を取得する
5. 「プロンプト配置ルール」に従い、段落へコマンドを記載する
6. プロンプトのテンプレート内部を読み、オプションを特定する
6-1. テンプレート内部の {variable} パターンを取得する
6-2. 「オプション一覧」をもとに、利用可能な変数からオプションを判断する
7. コマンドの列に使用可を記載する
8. フロントマターがあれば、説明を添える
## 出力先
`.agent/climpt/tools-list.md`
# プロンプト配置ルール
`.agent/climpt/prompts/<コマンド名>/<Directive>/<Layer>/f_<input>_<adaptation>.md`
# オプション一覧
input_text : STDIN
input_file : --from, -f
destination_path : --destination, -o
uv-* : --uv-*
出力した結果は、以下のようになります。
# How To Use
## options
| option | description |
|--- |---|
-f, --file | ファイルのPATHを出力結果へ記述する(埋め込む)
-i, --input | プロンプトのファイル種類を入力に沿ったものへ切り替える(-fに合わせて選択することが望ましい)
-a, --adaptation | 適合度合いの調整用。プロンプト切り替え。 |
-o , --destination | 出力ファイル先のPATHを出力結果へ記述する(埋め込む) |
## Usage
`climpt-<cli_name> directive layer --option`
use STDIN for input_text
`cat <some_file> | climpt-<cli_name> directive layer --option`
# Available CLI List
## climpt-research
`climpt-research about src`
|directive| layer | input(-i) | adaptation(-a) | destination(-o) | input_text_file(-f) | input_text (STDIN) |
|--- |---|--- |---|--- |---| ---|
| about | src | src | | | ok | ok |
| to | issue | issue, project, task | | | ok | ok |
| to | project | issue, project, task | | | ok | ok |
| to | task | issue, project, task | strict | | ok | ok |
## climpt-arch
ex. `climpt-arch optimize go -o=docs/development/totality_go.ja.md < docs/development/totality.ja.md`
|directive| layer | input(-i) | adaptation(-a) | destination(-o) | input_text_file(-f) | input_text (STDIN) |
|--- |---|--- |---|--- |---| ---|
| optimize | go | | | ok | | ok |
## climpt-breakdown
`climpt-breakdown to task -i=project`
|directive| layer | input(-i) | adaptation(-a) | destination(-o) | input_text_file(-f) | input_text (STDIN) |
|--- |---|--- |---|--- |---| ---|
| defect | project | project | | | ok | ok |
| defect | task | task | critical | | ok | ok |
| summary | issue | issue | detailed | | ok | ok |
| summary | project | project | | | ok | ok |
| summary | task | task | a, strict | | ok | ok |
| to | issue | issue, project, task | ja, strict | ok | ok | ok |
| to | project | issue, project, task | | | ok | ok |
| to | task | issue, project, task | strict | | ok | ok |
## climpt-diagnose
`make test 2>&1 | tee tmp/output.log && cat tmp/output.log | climpt-diagnose trace stack -i=test`
|directive| layer | input(-i) | adaptation(-a) | destination(-o) | input_text_file(-f) | input_text (STDIN) |
|--- |---|--- |---|--- |---| ---|
| trace | stack | test | | | | ok |
## climpt-setup
`climpt-setup climpt list`
|directive| layer | input(-i) | adaptation(-a) | destination(-o) | input_text_file(-f) | input_text (STDIN) |
|--- |---|--- |---|--- |---| ---|
| climpt | list | | | | | |
## climpt-build
*現在プロンプトファイルが存在しません*
## climpt-verify
*現在プロンプトファイルが存在しません*
Deno 実行ファイルの名称と Coding Agent を合わせる
実行ファイルの差分は、--config=arch
部分の切り替えです。プロファイルを切り替えることで、Claude の Sub Agents にも合わせられます。
.deno/bin
├── climpt-arch # sub agents と合う名前にする
├── climpt-build # --config=build
└── climpt-verify # --config=verify
Climptは実行時に呼び出しやすい単語にしています。
sub Agents は、実行者を表す名前にしています。
Project agents (.claude/agents)
system-architect # climpt-arch を選びやすくする
database-specialist
system-architect のなかで climpt-arch
を呼ぶ記載も入れます。
カスタム変数
--uv-
をPrefixにした変数を、独自定義できます。
プロンプト中で、例えば最大値指定や、ニュアンスの表現などの差し込みが可能です。
独自変数も、Coding Agent から選ばれやすい単語に統一しておくことが望ましいでしょう。
状況適応
--adaptation
により、派生版のテンプレートを呼び出すことができます。
-a=strict
を付与すると、ファイルは f_test_strict.md
が選ばれます。
diagnose/trace/stack/f_test.md
diagnose/trace/stack/f_test_strict.md
「より厳格に行いたい場合にstrictを指定する」といった指示パターンを、持っておくことができます。
実行例
プロンプト
---
title: エラー診断
usage:
description:
---
# エラー対処方針
エラー内容を分析し、共通の種類のエラーを集約し、以下の形式に揃えて出力して。例文は最大 {uv-max-size} 個まで許容。
```
**エラー種類**:
- エラー例1
- エラー例2
```
# 出力先
集約・整形した結果を、下記へ保存する。
出力先: `{destination_path}`
# エラー内容
`````
{input_text_file}
`````
実行コマンド
Go のプロジェクトで make test
したあと、エラー解析プロンプトを処理させます。
次のコマンドは指示書を出力するものである。
実行し、表示された指示に従って。
`make test > tmp/output.log 2>&1 ; climpt-diagnose trace stack -f=tmp/output.log --input=test --destination=tmp/climpted.log --uv-max-size=5`
このコマンド実行がプロンプトを呼び出すため、 make test > tmp/output.log
が以下のように処理されます。
集約結果:
# エラー対処方針
エラー内容を分析し、共通の種類のエラーを集約し、以下の形式に揃えて出力して。例文は最大 5 個まで許容。
**データベース接続エラー**:
- failed to connect to `host=localhost user=*** database=***_**_test`: server error (FATAL: role "***" does not exist (SQLSTATE 28000))
- failed to connect to `host=localhost user=*** database=***`: server error (FATAL: role "***" does not exist (SQLSTATE 28000))
- failed to establish database connection: failed to connect after 3 attempts
**時刻比較エラー**:
- Not equal: expected: time.Date(2025, time.August, 1, 9, 0, 0, 0, time.Local) actual: time.Date(2025, time.August, 1, 9, 0, 0, 0, time.Location(""))
**文字列比較エラー**:
- Not equal: expected: "***-Server/1.0" actual: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
**数値比較エラー**:
- "0" is not greater than "0"
**レコード未検出エラー**:
- record not found
**テストファイル不在**:
- [no test files]
留意: プロンプトの効力
Climptはプロンプトを表示します。
しかしこれは、ユーザーがインプットしたわけでなく、実行結果がプロンプトになっている状態です。そのため、指示の効力は相対的に弱めです。
一方、入力プロンプトとして送信する仕組みとセットで用いると、入力指示としての強さを持たせられます。例えば claude -p に渡したり、tmuxで別paneへ渡す処理が使えます。
Discussion