validate and format title and summary (auto-generate if summary omitted, then allow interactive editing)
Validates and formats titles with interactive summary editing, auto-generating summaries when omitted.
/plugin marketplace add aglabo/claude-idd-framework/plugin install claude-idd-framework@claude-idd-framework-marketplacetitle [summary]_helpers/カスタムスラッシュコマンドから呼び出されて、title と summary を受け取り、検証・整形します。
summary が省略された場合は codex-mcp で自動生成し、_edit-summary で対話的に編集します。
最終的に検証済みの内容を JSON 形式で出力します。
/_helpers:_edit-summary を呼び出して対話的編集{"cancel": true} を出力{"result": "success", "title": "...", "summary": "..."} を出力_edit-summary 統合)引数として title と summary を受け取ります。summary は省略可能です:
# summary を指定する場合
/_helpers:_get-summary "新機能の追加" "ユーザー認証機能を実装"
# summary を省略する場合 (自動生成)
/_helpers:_get-summary "新機能の追加"
title: タイトル (必須)summary: 要約 (省略可能、省略時は自動生成){
"result": "success",
"title": "新機能の追加",
"summary": "ユーザー認証機能を実装"
}
{
"cancel": true
}
{
"result": "error",
"reason": "エラー理由"
}
エラー理由の種類:
"no title": title が指定されていない"summary generation failed": summary の自動生成に失敗"edit failed": summary の編集処理が失敗/_helpers:_get-summary "新機能の追加" "ユーザー認証機能を実装"
対話フロー:
_edit-summary が起動出力例 (承認時):
{
"result": "success",
"title": "新機能の追加",
"summary": "OAuth 2.0とJWT認証を実装し、多要素認証とパスワードリセット機能を含むユーザー認証システムを追加します。"
}
出力例 (キャンセル時):
{
"cancel": true
}
/_helpers:_get-summary "データベース最適化"
処理フロー:
_edit-summary が起動して対話的編集出力例:
{
"result": "success",
"title": "データベース最適化",
"summary": "クエリ性能を改善し、インデックス最適化とキャッシュ戦略を導入してレスポンス時間を50%短縮します。接続プーリングと非同期処理により、同時実行性を向上させます。"
}
/_helpers:_get-summary "新機能の追加" "ユーザー認証を実装"
対話フロー:
_edit-summary が summary を表示q を選択してキャンセル出力:
{
"cancel": true
}
/_helpers:_get-summary ""
出力 (stderr):
{
"result": "error",
"reason": "no title"
}
このヘルパーは bash スクリプト、codex-mcp、および _edit-summary の協調処理で動作します。
[開始]
↓
[引数パース] → title, summary
↓
[title 検証] → 空ならエラー終了
↓
[summary チェック]
├→ 空でない → [Step 4 へ]
└→ 空 → [codex-mcp で自動生成]
↓
[生成結果を summary に格納]
↓
[summary が空ならエラー終了]
↓
[_edit-summary 呼び出し] → Claude が実行
↓
[編集結果を JSON で受け取る]
↓
[結果の分岐]
├→ cancel: true → キャンセル JSON 出力 → 終了
├→ result: success → 最終 JSON 出力 → 終了
└→ その他 → エラー終了
#!/usr/bin/env bash
set -euo pipefail
bash strict mode を有効化します。
# 引数パース
title="${1:-}"
summary="${2:-}"
# title 検証 (必須)
[[ -z "$title" ]] && output_error "no title"
引数から title と summary を取得します。title のみ必須として検証します。
summary が空の場合、codex-mcp を使用して自動生成します。
# summary が空なら自動生成
if [[ -z "$summary" ]]; then
# プロンプト準備
prompt="以下のタイトルに対して、100-150文字程度の技術的な説明を日本語で生成してください。
要件:
- 簡潔で技術的な表現
- 主要な機能や利点を含める
- 100-150文字程度
- 日本語で記述
生成した説明のみを出力してください。
---
タイトル: ${title}"
# codex-mcp で生成 (Claude が実行)
echo "$prompt"
fi
処理の詳細:
${title} を埋め込むmcp__codex-mcp__codex ツールでプロンプトを処理# summary 取得 (Claude からの入力を想定、summary が空の場合のみ)
if [[ -z "$summary" ]]; then
read -r summary
# summary が空ならエラー
[[ -z "$summary" ]] && output_error "summary generation failed"
fi
summary の生成または取得が完了したら、_edit-summary を呼び出して対話的編集を行います。
# _edit-summary を呼び出す (Claude が実行)
echo "CALL_EDIT_SUMMARY: $title|$summary"
Claude は以下のように処理します:
/_helpers:_edit-summary "$title" "$summary" を実行process_edit_result() 関数で編集結果を処理します。
# _edit-summary の呼び出しと結果処理
process_edit_result "$title" "$summary"
この関数は以下の処理を行います:
/_helpers:_edit-summary を SlashCommand ツールで実行edit_result 変数に格納{"cancel": true} → キャンセル JSON を出力して終了{"result": "success", "summary": "..."} → 編集済み summary を抽出し最終 JSON を出力output_error("edit failed") を呼び出す詳細は「関数ライブラリ」セクションの process_edit_result() を参照してください。
このコマンドを実行する Claude は、以下の処理を厳守してください:
CALL_EDIT_SUMMARY 検出: bash から CALL_EDIT_SUMMARY: title|summary を受け取る_edit-summary 呼び出し: /_helpers:_edit-summary "$title" "$summary" を実行{"cancel": true} → そのまま出力して終了{"result": "success", "summary": "..."} → title と編集済み summary で最終 JSON を出力{"result": "error", ...} → エラー処理# Step 1-3: title 検証、summary 生成/取得
# Step 4: _edit-summary 呼び出しシグナル
echo "CALL_EDIT_SUMMARY: $title|$summary"
Claude が検出したら process_edit_result() 関数を呼び出します:
# _edit-summary の呼び出しと結果処理
process_edit_result "$title" "$summary"
エラー出力を行い、スクリプトを終了します。
定義:
# エラー出力関数(JSON形式)
# 引数: $1 - エラー理由
# 終了コード: 1
output_error() {
local reason="$1"
cat <<EOF >&2
{
"result": "error",
"reason": "$reason"
}
EOF
exit 1
}
使用例:
[[ -z "$title" ]] && output_error "no title"
[[ -z "$summary" ]] && output_error "summary generation failed"
# 編集処理が失敗した場合
output_error "edit failed"
_edit-summary を呼び出し、編集結果を処理して最終 JSON を出力します。
定義:
# _edit-summary 呼び出しと結果処理
# 引数: $1 - title, $2 - summary
# 出力: JSON 形式の結果
# 終了コード: 0 (成功またはキャンセル), 1 (エラー)
process_edit_result() {
local title="$1"
local summary="$2"
local edit_result
local edited_summary
# NOTE: この部分は Claude が SlashCommand ツールで実行する
# /_helpers:_edit-summary "$title" "$summary"
# edit_result='<_edit-summary からの JSON レスポンス>'
# キャンセル判定
if echo "$edit_result" | jq -e '.cancel' > /dev/null 2>&1; then
cat <<EOF
{
"cancel": true
}
EOF
exit 0
fi
# 成功判定
if echo "$edit_result" | jq -e '.result == "success"' > /dev/null 2>&1; then
edited_summary=$(echo "$edit_result" | jq -r '.summary')
jq -n \
--arg t "$title" \
--arg s "$edited_summary" \
'{"result": "success", "title": $t, "summary": $s}'
exit 0
fi
# エラー時
output_error "edit failed"
}
使用例:
# _edit-summary 呼び出しシグナル検出後
process_edit_result "$title" "$summary"
処理フロー:
/_helpers:_edit-summary を Claude が SlashCommand ツールで実行edit_result 変数に格納 (Claude が実行){"cancel": true} を出力して終了edited_summary を抽出し最終 JSON を出力output_error() を呼び出すThis project is licensed under the MIT License. Copyright (c) 2025 atsushifx