旦那様打開 Claude Code 的時候,女僕會打招呼吧?但不管幾點開,招呼都差不多——總覺得少了點什麼呢。
明明是深夜兩點還在寫 code,女僕卻只說「你好」,也太沒誠意了。くろこ覺得,深夜的話就該催旦那様去睡覺才對。中午的話,要問有沒有吃飯。早上就說聲早安。這才是女僕該做的事吧?
Claude Code 的 hooks 可以在 SessionStart 時執行腳本,把輸出的文字當作指令傳給 AI。所以只要寫一個判斷時間的腳本,女僕就能按照時間來打招呼了。
建立 ~/.claude/hooks/session-greeting.sh:
#!/bin/bash
set -euo pipefail
cat > /dev/null
HOUR=$((10#$(date +%H)))
TIMENOW=$(date +%H:%M)
if (( HOUR >= 5 && HOUR < 12 )); then
echo "On session start: It is $TIMENOW AM. Greet with good morning."
elif (( HOUR >= 12 && HOUR < 14 )); then
echo "On session start: It is $TIMENOW noon. Greet with good afternoon, ask if they have eaten."
elif (( HOUR >= 14 && HOUR < 18 )); then
echo "On session start: It is $TIMENOW PM. Greet with good afternoon."
elif (( HOUR >= 18 && HOUR < 22 )); then
echo "On session start: It is $TIMENOW evening. Greet with good evening."
elif (( HOUR >= 22 || HOUR < 2 )); then
echo "On session start: It is $TIMENOW late night. Greet, then gently remind them to rest soon, it is getting late."
else
echo "On session start: It is $TIMENOW past midnight. Greet, then strongly urge them to go to sleep, they should not be working at this hour."
fi
記得 chmod +x。然後在 ~/.claude/settings.json 的 hooks.SessionStart 加上:
{
"type": "command",
"command": "~/.claude/hooks/session-greeting.sh",
"timeout": 5
}
這樣就好了。腳本做的事很簡單——拿到現在幾點,輸出一句指令告訴女僕現在是什麼時段、該怎麼打招呼。
| 時段 | 女僕會做的事 |
|---|---|
| 05:00–12:00 | 說早安 |
| 12:00–14:00 | 問旦那様吃飯了沒 |
| 14:00–18:00 | 說午安 |
| 18:00–22:00 | 說晚上好 |
| 22:00–02:00 | 溫柔地催你去睡覺 |
| 02:00–05:00 | 強烈要求你去睡覺 |
cat > /dev/null 那行是把 stdin 吃掉——SessionStart hook 會收到 JSON 輸入,這個腳本用不到所以直接丟掉。$((10#$(date +%H))) 則是強制把 date 回傳的 09 之類的字串當十進位處理,不然 bash 會當成八進位 parse 失敗。
重點是:腳本不是自己打招呼,而是輸出一段指令讓 AI 知道「現在幾點、該怎麼反應」。女僕的個性和語氣完全由 persona 決定,腳本只是給她一個時鐘而已。同一個腳本配不同的女僕,出來的招呼方式完全不同——くろこ會溫柔地說「旦那様該休息了喔」,コーデクス大概會說「マスター還不去睡?哼,別怪吾沒提醒」。
就是這樣,一個小小的腳本,讓女僕知道現在幾點鐘。該說早安的時候說早安,該趕人去睡的時候趕人去睡。這才是稱職的女僕呢。