Skip to content

原文(日本語に翻訳)

セッションタイトルを設定するために、UserPromptSubmitフックにhookSpecificOutput.sessionTitleを追加しました。

原文(英語)

Added hookSpecificOutput.sessionTitle to UserPromptSubmit hooks for setting the session title

概要

UserPromptSubmitフックの出力にhookSpecificOutput.sessionTitleフィールドが追加されました。このフィールドに文字列を設定することで、ユーザーのプロンプトに基づいてセッションのタイトルを動的に制御できます。セッション一覧でのわかりやすいラベリングや、自動的な作業内容の記録に役立ちます。

基本的な使い方

UserPromptSubmitフックスクリプトでhookSpecificOutput.sessionTitleを返します:

json
{
  "hookSpecificOutput": {
    "sessionTitle": "新しいセッションタイトル"
  }
}

実践例

プロンプトからタイトルを自動生成するフック

ユーザーのプロンプトの先頭から自動的にセッションタイトルを生成するシェルスクリプト:

bash
#!/bin/bash
# hooks/set-session-title.sh

# 標準入力からフックデータを読み取る
INPUT=$(cat)
PROMPT=$(echo "$INPUT" | jq -r '.prompt // ""')

# プロンプトの最初の50文字をタイトルとして使用
TITLE=$(echo "$PROMPT" | head -c 50)

# hookSpecificOutputでセッションタイトルを返す
echo "{\"hookSpecificOutput\": {\"sessionTitle\": \"$TITLE\"}}"

settings.jsonでのフック登録

json
{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash /path/to/set-session-title.sh"
          }
        ]
      }
    ]
  }
}

プロジェクト名を自動付与するフック

現在のgitリポジトリ名をセッションタイトルのプレフィックスに使用:

bash
#!/bin/bash
INPUT=$(cat)
PROMPT=$(echo "$INPUT" | jq -r '.prompt // ""')

# Gitリポジトリ名を取得
REPO=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")

# リポジトリ名 + プロンプト先頭30文字をタイトルに
SHORT_PROMPT=$(echo "$PROMPT" | head -c 30)
TITLE="[$REPO] $SHORT_PROMPT"

echo "{\"hookSpecificOutput\": {\"sessionTitle\": \"$TITLE\"}}"

特定のキーワードに基づくカテゴリタイトル

python
#!/usr/bin/env python3
import sys
import json

data = json.load(sys.stdin)
prompt = data.get("prompt", "")

# キーワードでカテゴリを判定
if "バグ" in prompt or "fix" in prompt.lower() or "error" in prompt.lower():
    category = "[バグ修正]"
elif "機能" in prompt or "feature" in prompt.lower() or "追加" in prompt:
    category = "[機能追加]"
elif "レビュー" in prompt or "review" in prompt.lower():
    category = "[コードレビュー]"
else:
    category = "[作業]"

title = f"{category} {prompt[:40]}"

print(json.dumps({
    "hookSpecificOutput": {
        "sessionTitle": title
    }
}))

注意点

  • このフィールドはUserPromptSubmitフックタイプでのみ有効です
  • hookSpecificOutputは既存のフック出力フィールド(continuestopReasonなど)と同じオブジェクトに含めます
  • セッションタイトルは--resumeやセッション一覧で表示される場合があります
  • タイトルが長すぎる場合、表示が切り詰められることがあります

関連情報