[{"data":1,"prerenderedAt":1880},["ShallowReactive",2],{"guide:/guides/claude-code-notifications":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"tag":10,"date":11,"body":12,"_type":1874,"_id":1875,"_source":1876,"_file":1877,"_stem":1878,"_extension":1879},"/guides/claude-code-notifications","guides",false,"","How to get notified when Claude Code needs you (or finishes)","Stop tabbing back to check on Claude Code. Use the Notification and Stop hooks to get a desktop alert the moment a run needs your input or completes.","Notifications","2026-08-15",{"type":13,"children":14,"toc":1863},"root",[15,31,36,43,78,122,128,141,510,539,545,566,785,796,802,807,954,974,980,993,1155,1168,1315,1328,1334,1339,1458,1471,1477,1482,1595,1616,1622,1642,1814,1826,1832,1837,1857],{"type":16,"tag":17,"props":18,"children":19},"element","p",{},[20,23,29],{"type":21,"value":22},"text","Claude Code is at its best when you let it run: give it a task, switch to something else, come back when it is done. The catch is knowing ",{"type":16,"tag":24,"props":25,"children":26},"em",{},[27],{"type":21,"value":28},"when",{"type":21,"value":30}," to come back. Stare at the terminal and you have not really stepped away; ignore it and it sits waiting for a permission you never saw.",{"type":16,"tag":17,"props":32,"children":33},{},[34],{"type":21,"value":35},"You do not have to guess. Claude Code fires a hook the moment it needs you, and another when it finishes. Wire either one to a desktop notification and the terminal comes to you.",{"type":16,"tag":37,"props":38,"children":40},"h2",{"id":39},"the-two-events-that-matter",[41],{"type":21,"value":42},"The two events that matter",{"type":16,"tag":44,"props":45,"children":46},"ul",{},[47,64],{"type":16,"tag":48,"props":49,"children":50},"li",{},[51,62],{"type":16,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":16,"tag":56,"props":57,"children":59},"code",{"className":58},[],[60],{"type":21,"value":61},"Notification",{"type":21,"value":63}," fires when Claude wants your attention. That means either a permission prompt it cannot answer on its own, or an input prompt that has been sitting idle for a while.",{"type":16,"tag":48,"props":65,"children":66},{},[67,76],{"type":16,"tag":52,"props":68,"children":69},{},[70],{"type":16,"tag":56,"props":71,"children":73},{"className":72},[],[74],{"type":21,"value":75},"Stop",{"type":21,"value":77}," fires when Claude finishes its turn and hands control back to you.",{"type":16,"tag":17,"props":79,"children":80},{},[81,83,88,90,95,97,103,105,111,113,120],{"type":21,"value":82},"Between them, they cover the two moments you actually care about: ",{"type":16,"tag":24,"props":84,"children":85},{},[86],{"type":21,"value":87},"it needs me now",{"type":21,"value":89},", and ",{"type":16,"tag":24,"props":91,"children":92},{},[93],{"type":21,"value":94},"it is done",{"type":21,"value":96},". Both are configured the same way, in a ",{"type":16,"tag":56,"props":98,"children":100},{"className":99},[],[101],{"type":21,"value":102},"settings.json",{"type":21,"value":104}," file under the ",{"type":16,"tag":56,"props":106,"children":108},{"className":107},[],[109],{"type":21,"value":110},"hooks",{"type":21,"value":112}," key. (If hooks are new to you, start with our ",{"type":16,"tag":114,"props":115,"children":117},"a",{"href":116},"/guides/claude-code-hooks",[118],{"type":21,"value":119},"complete guide to Claude Code hooks",{"type":21,"value":121},".)",{"type":16,"tag":37,"props":123,"children":125},{"id":124},"macos",[126],{"type":21,"value":127},"macOS",{"type":16,"tag":17,"props":129,"children":130},{},[131,133,139],{"type":21,"value":132},"macOS ships ",{"type":16,"tag":56,"props":134,"children":136},{"className":135},[],[137],{"type":21,"value":138},"osascript",{"type":21,"value":140},", which can post a real notification to Notification Center:",{"type":16,"tag":142,"props":143,"children":147},"pre",{"className":144,"code":145,"language":146,"meta":7,"style":7},"language-json shiki shiki-themes github-light github-dark","{\n  \"hooks\": {\n    \"Notification\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"osascript -e 'display notification \\\"Claude needs you\\\" with title \\\"Claude Code\\\" sound name \\\"Ping\\\"'\" }\n        ]\n      }\n    ],\n    \"Stop\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"osascript -e 'display notification \\\"Run finished\\\" with title \\\"Claude Code\\\" sound name \\\"Glass\\\"'\" }\n        ]\n      }\n    ]\n  }\n}\n","json",[148],{"type":16,"tag":56,"props":149,"children":150},{"__ignoreMap":7},[151,163,178,192,201,214,317,326,335,344,357,365,377,467,475,483,492,501],{"type":16,"tag":152,"props":153,"children":156},"span",{"class":154,"line":155},"line",1,[157],{"type":16,"tag":152,"props":158,"children":160},{"style":159},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[161],{"type":21,"value":162},"{\n",{"type":16,"tag":152,"props":164,"children":166},{"class":154,"line":165},2,[167,173],{"type":16,"tag":152,"props":168,"children":170},{"style":169},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[171],{"type":21,"value":172},"  \"hooks\"",{"type":16,"tag":152,"props":174,"children":175},{"style":159},[176],{"type":21,"value":177},": {\n",{"type":16,"tag":152,"props":179,"children":181},{"class":154,"line":180},3,[182,187],{"type":16,"tag":152,"props":183,"children":184},{"style":169},[185],{"type":21,"value":186},"    \"Notification\"",{"type":16,"tag":152,"props":188,"children":189},{"style":159},[190],{"type":21,"value":191},": [\n",{"type":16,"tag":152,"props":193,"children":195},{"class":154,"line":194},4,[196],{"type":16,"tag":152,"props":197,"children":198},{"style":159},[199],{"type":21,"value":200},"      {\n",{"type":16,"tag":152,"props":202,"children":204},{"class":154,"line":203},5,[205,210],{"type":16,"tag":152,"props":206,"children":207},{"style":169},[208],{"type":21,"value":209},"        \"hooks\"",{"type":16,"tag":152,"props":211,"children":212},{"style":159},[213],{"type":21,"value":191},{"type":16,"tag":152,"props":215,"children":217},{"class":154,"line":216},6,[218,223,228,233,239,244,248,252,257,262,267,271,276,280,285,289,294,298,303,307,312],{"type":16,"tag":152,"props":219,"children":220},{"style":159},[221],{"type":21,"value":222},"          { ",{"type":16,"tag":152,"props":224,"children":225},{"style":169},[226],{"type":21,"value":227},"\"type\"",{"type":16,"tag":152,"props":229,"children":230},{"style":159},[231],{"type":21,"value":232},": ",{"type":16,"tag":152,"props":234,"children":236},{"style":235},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[237],{"type":21,"value":238},"\"command\"",{"type":16,"tag":152,"props":240,"children":241},{"style":159},[242],{"type":21,"value":243},", ",{"type":16,"tag":152,"props":245,"children":246},{"style":169},[247],{"type":21,"value":238},{"type":16,"tag":152,"props":249,"children":250},{"style":159},[251],{"type":21,"value":232},{"type":16,"tag":152,"props":253,"children":254},{"style":235},[255],{"type":21,"value":256},"\"osascript -e 'display notification ",{"type":16,"tag":152,"props":258,"children":259},{"style":169},[260],{"type":21,"value":261},"\\\"",{"type":16,"tag":152,"props":263,"children":264},{"style":235},[265],{"type":21,"value":266},"Claude needs you",{"type":16,"tag":152,"props":268,"children":269},{"style":169},[270],{"type":21,"value":261},{"type":16,"tag":152,"props":272,"children":273},{"style":235},[274],{"type":21,"value":275}," with title ",{"type":16,"tag":152,"props":277,"children":278},{"style":169},[279],{"type":21,"value":261},{"type":16,"tag":152,"props":281,"children":282},{"style":235},[283],{"type":21,"value":284},"Claude Code",{"type":16,"tag":152,"props":286,"children":287},{"style":169},[288],{"type":21,"value":261},{"type":16,"tag":152,"props":290,"children":291},{"style":235},[292],{"type":21,"value":293}," sound name ",{"type":16,"tag":152,"props":295,"children":296},{"style":169},[297],{"type":21,"value":261},{"type":16,"tag":152,"props":299,"children":300},{"style":235},[301],{"type":21,"value":302},"Ping",{"type":16,"tag":152,"props":304,"children":305},{"style":169},[306],{"type":21,"value":261},{"type":16,"tag":152,"props":308,"children":309},{"style":235},[310],{"type":21,"value":311},"'\"",{"type":16,"tag":152,"props":313,"children":314},{"style":159},[315],{"type":21,"value":316}," }\n",{"type":16,"tag":152,"props":318,"children":320},{"class":154,"line":319},7,[321],{"type":16,"tag":152,"props":322,"children":323},{"style":159},[324],{"type":21,"value":325},"        ]\n",{"type":16,"tag":152,"props":327,"children":329},{"class":154,"line":328},8,[330],{"type":16,"tag":152,"props":331,"children":332},{"style":159},[333],{"type":21,"value":334},"      }\n",{"type":16,"tag":152,"props":336,"children":338},{"class":154,"line":337},9,[339],{"type":16,"tag":152,"props":340,"children":341},{"style":159},[342],{"type":21,"value":343},"    ],\n",{"type":16,"tag":152,"props":345,"children":347},{"class":154,"line":346},10,[348,353],{"type":16,"tag":152,"props":349,"children":350},{"style":169},[351],{"type":21,"value":352},"    \"Stop\"",{"type":16,"tag":152,"props":354,"children":355},{"style":159},[356],{"type":21,"value":191},{"type":16,"tag":152,"props":358,"children":360},{"class":154,"line":359},11,[361],{"type":16,"tag":152,"props":362,"children":363},{"style":159},[364],{"type":21,"value":200},{"type":16,"tag":152,"props":366,"children":368},{"class":154,"line":367},12,[369,373],{"type":16,"tag":152,"props":370,"children":371},{"style":169},[372],{"type":21,"value":209},{"type":16,"tag":152,"props":374,"children":375},{"style":159},[376],{"type":21,"value":191},{"type":16,"tag":152,"props":378,"children":380},{"class":154,"line":379},13,[381,385,389,393,397,401,405,409,413,417,422,426,430,434,438,442,446,450,455,459,463],{"type":16,"tag":152,"props":382,"children":383},{"style":159},[384],{"type":21,"value":222},{"type":16,"tag":152,"props":386,"children":387},{"style":169},[388],{"type":21,"value":227},{"type":16,"tag":152,"props":390,"children":391},{"style":159},[392],{"type":21,"value":232},{"type":16,"tag":152,"props":394,"children":395},{"style":235},[396],{"type":21,"value":238},{"type":16,"tag":152,"props":398,"children":399},{"style":159},[400],{"type":21,"value":243},{"type":16,"tag":152,"props":402,"children":403},{"style":169},[404],{"type":21,"value":238},{"type":16,"tag":152,"props":406,"children":407},{"style":159},[408],{"type":21,"value":232},{"type":16,"tag":152,"props":410,"children":411},{"style":235},[412],{"type":21,"value":256},{"type":16,"tag":152,"props":414,"children":415},{"style":169},[416],{"type":21,"value":261},{"type":16,"tag":152,"props":418,"children":419},{"style":235},[420],{"type":21,"value":421},"Run finished",{"type":16,"tag":152,"props":423,"children":424},{"style":169},[425],{"type":21,"value":261},{"type":16,"tag":152,"props":427,"children":428},{"style":235},[429],{"type":21,"value":275},{"type":16,"tag":152,"props":431,"children":432},{"style":169},[433],{"type":21,"value":261},{"type":16,"tag":152,"props":435,"children":436},{"style":235},[437],{"type":21,"value":284},{"type":16,"tag":152,"props":439,"children":440},{"style":169},[441],{"type":21,"value":261},{"type":16,"tag":152,"props":443,"children":444},{"style":235},[445],{"type":21,"value":293},{"type":16,"tag":152,"props":447,"children":448},{"style":169},[449],{"type":21,"value":261},{"type":16,"tag":152,"props":451,"children":452},{"style":235},[453],{"type":21,"value":454},"Glass",{"type":16,"tag":152,"props":456,"children":457},{"style":169},[458],{"type":21,"value":261},{"type":16,"tag":152,"props":460,"children":461},{"style":235},[462],{"type":21,"value":311},{"type":16,"tag":152,"props":464,"children":465},{"style":159},[466],{"type":21,"value":316},{"type":16,"tag":152,"props":468,"children":470},{"class":154,"line":469},14,[471],{"type":16,"tag":152,"props":472,"children":473},{"style":159},[474],{"type":21,"value":325},{"type":16,"tag":152,"props":476,"children":478},{"class":154,"line":477},15,[479],{"type":16,"tag":152,"props":480,"children":481},{"style":159},[482],{"type":21,"value":334},{"type":16,"tag":152,"props":484,"children":486},{"class":154,"line":485},16,[487],{"type":16,"tag":152,"props":488,"children":489},{"style":159},[490],{"type":21,"value":491},"    ]\n",{"type":16,"tag":152,"props":493,"children":495},{"class":154,"line":494},17,[496],{"type":16,"tag":152,"props":497,"children":498},{"style":159},[499],{"type":21,"value":500},"  }\n",{"type":16,"tag":152,"props":502,"children":504},{"class":154,"line":503},18,[505],{"type":16,"tag":152,"props":506,"children":507},{"style":159},[508],{"type":21,"value":509},"}\n",{"type":16,"tag":17,"props":511,"children":512},{},[513,515,521,523,529,531,537],{"type":21,"value":514},"The ",{"type":16,"tag":56,"props":516,"children":518},{"className":517},[],[519],{"type":21,"value":520},"sound name",{"type":21,"value":522}," part rings a system sound, so you get an audible cue even if you are not looking at the screen. If you want alerts that stay on screen until you dismiss them, install ",{"type":16,"tag":56,"props":524,"children":526},{"className":525},[],[527],{"type":21,"value":528},"terminal-notifier",{"type":21,"value":530}," and use ",{"type":16,"tag":56,"props":532,"children":534},{"className":533},[],[535],{"type":21,"value":536},"terminal-notifier -title 'Claude Code' -message 'Claude needs you'",{"type":21,"value":538}," instead.",{"type":16,"tag":37,"props":540,"children":542},{"id":541},"linux",[543],{"type":21,"value":544},"Linux",{"type":16,"tag":17,"props":546,"children":547},{},[548,550,556,558,564],{"type":21,"value":549},"On most desktops, ",{"type":16,"tag":56,"props":551,"children":553},{"className":552},[],[554],{"type":21,"value":555},"notify-send",{"type":21,"value":557}," is available (from ",{"type":16,"tag":56,"props":559,"children":561},{"className":560},[],[562],{"type":21,"value":563},"libnotify",{"type":21,"value":565},"):",{"type":16,"tag":142,"props":567,"children":569},{"className":144,"code":568,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"Notification\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"notify-send -u critical 'Claude Code' 'Claude needs you'\" }\n        ]\n      }\n    ],\n    \"Stop\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"notify-send 'Claude Code' 'Run finished'\" }\n        ]\n      }\n    ]\n  }\n}\n",[570],{"type":16,"tag":56,"props":571,"children":572},{"__ignoreMap":7},[573,580,591,602,609,620,660,667,674,681,692,699,710,750,757,764,771,778],{"type":16,"tag":152,"props":574,"children":575},{"class":154,"line":155},[576],{"type":16,"tag":152,"props":577,"children":578},{"style":159},[579],{"type":21,"value":162},{"type":16,"tag":152,"props":581,"children":582},{"class":154,"line":165},[583,587],{"type":16,"tag":152,"props":584,"children":585},{"style":169},[586],{"type":21,"value":172},{"type":16,"tag":152,"props":588,"children":589},{"style":159},[590],{"type":21,"value":177},{"type":16,"tag":152,"props":592,"children":593},{"class":154,"line":180},[594,598],{"type":16,"tag":152,"props":595,"children":596},{"style":169},[597],{"type":21,"value":186},{"type":16,"tag":152,"props":599,"children":600},{"style":159},[601],{"type":21,"value":191},{"type":16,"tag":152,"props":603,"children":604},{"class":154,"line":194},[605],{"type":16,"tag":152,"props":606,"children":607},{"style":159},[608],{"type":21,"value":200},{"type":16,"tag":152,"props":610,"children":611},{"class":154,"line":203},[612,616],{"type":16,"tag":152,"props":613,"children":614},{"style":169},[615],{"type":21,"value":209},{"type":16,"tag":152,"props":617,"children":618},{"style":159},[619],{"type":21,"value":191},{"type":16,"tag":152,"props":621,"children":622},{"class":154,"line":216},[623,627,631,635,639,643,647,651,656],{"type":16,"tag":152,"props":624,"children":625},{"style":159},[626],{"type":21,"value":222},{"type":16,"tag":152,"props":628,"children":629},{"style":169},[630],{"type":21,"value":227},{"type":16,"tag":152,"props":632,"children":633},{"style":159},[634],{"type":21,"value":232},{"type":16,"tag":152,"props":636,"children":637},{"style":235},[638],{"type":21,"value":238},{"type":16,"tag":152,"props":640,"children":641},{"style":159},[642],{"type":21,"value":243},{"type":16,"tag":152,"props":644,"children":645},{"style":169},[646],{"type":21,"value":238},{"type":16,"tag":152,"props":648,"children":649},{"style":159},[650],{"type":21,"value":232},{"type":16,"tag":152,"props":652,"children":653},{"style":235},[654],{"type":21,"value":655},"\"notify-send -u critical 'Claude Code' 'Claude needs you'\"",{"type":16,"tag":152,"props":657,"children":658},{"style":159},[659],{"type":21,"value":316},{"type":16,"tag":152,"props":661,"children":662},{"class":154,"line":319},[663],{"type":16,"tag":152,"props":664,"children":665},{"style":159},[666],{"type":21,"value":325},{"type":16,"tag":152,"props":668,"children":669},{"class":154,"line":328},[670],{"type":16,"tag":152,"props":671,"children":672},{"style":159},[673],{"type":21,"value":334},{"type":16,"tag":152,"props":675,"children":676},{"class":154,"line":337},[677],{"type":16,"tag":152,"props":678,"children":679},{"style":159},[680],{"type":21,"value":343},{"type":16,"tag":152,"props":682,"children":683},{"class":154,"line":346},[684,688],{"type":16,"tag":152,"props":685,"children":686},{"style":169},[687],{"type":21,"value":352},{"type":16,"tag":152,"props":689,"children":690},{"style":159},[691],{"type":21,"value":191},{"type":16,"tag":152,"props":693,"children":694},{"class":154,"line":359},[695],{"type":16,"tag":152,"props":696,"children":697},{"style":159},[698],{"type":21,"value":200},{"type":16,"tag":152,"props":700,"children":701},{"class":154,"line":367},[702,706],{"type":16,"tag":152,"props":703,"children":704},{"style":169},[705],{"type":21,"value":209},{"type":16,"tag":152,"props":707,"children":708},{"style":159},[709],{"type":21,"value":191},{"type":16,"tag":152,"props":711,"children":712},{"class":154,"line":379},[713,717,721,725,729,733,737,741,746],{"type":16,"tag":152,"props":714,"children":715},{"style":159},[716],{"type":21,"value":222},{"type":16,"tag":152,"props":718,"children":719},{"style":169},[720],{"type":21,"value":227},{"type":16,"tag":152,"props":722,"children":723},{"style":159},[724],{"type":21,"value":232},{"type":16,"tag":152,"props":726,"children":727},{"style":235},[728],{"type":21,"value":238},{"type":16,"tag":152,"props":730,"children":731},{"style":159},[732],{"type":21,"value":243},{"type":16,"tag":152,"props":734,"children":735},{"style":169},[736],{"type":21,"value":238},{"type":16,"tag":152,"props":738,"children":739},{"style":159},[740],{"type":21,"value":232},{"type":16,"tag":152,"props":742,"children":743},{"style":235},[744],{"type":21,"value":745},"\"notify-send 'Claude Code' 'Run finished'\"",{"type":16,"tag":152,"props":747,"children":748},{"style":159},[749],{"type":21,"value":316},{"type":16,"tag":152,"props":751,"children":752},{"class":154,"line":469},[753],{"type":16,"tag":152,"props":754,"children":755},{"style":159},[756],{"type":21,"value":325},{"type":16,"tag":152,"props":758,"children":759},{"class":154,"line":477},[760],{"type":16,"tag":152,"props":761,"children":762},{"style":159},[763],{"type":21,"value":334},{"type":16,"tag":152,"props":765,"children":766},{"class":154,"line":485},[767],{"type":16,"tag":152,"props":768,"children":769},{"style":159},[770],{"type":21,"value":491},{"type":16,"tag":152,"props":772,"children":773},{"class":154,"line":494},[774],{"type":16,"tag":152,"props":775,"children":776},{"style":159},[777],{"type":21,"value":500},{"type":16,"tag":152,"props":779,"children":780},{"class":154,"line":503},[781],{"type":16,"tag":152,"props":782,"children":783},{"style":159},[784],{"type":21,"value":509},{"type":16,"tag":17,"props":786,"children":787},{},[788,794],{"type":16,"tag":56,"props":789,"children":791},{"className":790},[],[792],{"type":21,"value":793},"-u critical",{"type":21,"value":795}," keeps the \"needs you\" alert on screen until you dismiss it, which is what you want for something that is blocking.",{"type":16,"tag":37,"props":797,"children":799},{"id":798},"windows-and-wsl",[800],{"type":21,"value":801},"Windows and WSL",{"type":16,"tag":17,"props":803,"children":804},{},[805],{"type":21,"value":806},"On Windows, PowerShell can raise a toast through the BurntToast module, but the dependency-free option is a message box:",{"type":16,"tag":142,"props":808,"children":810},{"className":144,"code":809,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"Stop\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"powershell -c \\\"[System.Windows.Forms.MessageBox]::Show('Run finished','Claude Code')\\\"\" }\n        ]\n      }\n    ]\n  }\n}\n",[811],{"type":16,"tag":56,"props":812,"children":813},{"__ignoreMap":7},[814,821,832,843,850,861,919,926,933,940,947],{"type":16,"tag":152,"props":815,"children":816},{"class":154,"line":155},[817],{"type":16,"tag":152,"props":818,"children":819},{"style":159},[820],{"type":21,"value":162},{"type":16,"tag":152,"props":822,"children":823},{"class":154,"line":165},[824,828],{"type":16,"tag":152,"props":825,"children":826},{"style":169},[827],{"type":21,"value":172},{"type":16,"tag":152,"props":829,"children":830},{"style":159},[831],{"type":21,"value":177},{"type":16,"tag":152,"props":833,"children":834},{"class":154,"line":180},[835,839],{"type":16,"tag":152,"props":836,"children":837},{"style":169},[838],{"type":21,"value":352},{"type":16,"tag":152,"props":840,"children":841},{"style":159},[842],{"type":21,"value":191},{"type":16,"tag":152,"props":844,"children":845},{"class":154,"line":194},[846],{"type":16,"tag":152,"props":847,"children":848},{"style":159},[849],{"type":21,"value":200},{"type":16,"tag":152,"props":851,"children":852},{"class":154,"line":203},[853,857],{"type":16,"tag":152,"props":854,"children":855},{"style":169},[856],{"type":21,"value":209},{"type":16,"tag":152,"props":858,"children":859},{"style":159},[860],{"type":21,"value":191},{"type":16,"tag":152,"props":862,"children":863},{"class":154,"line":216},[864,868,872,876,880,884,888,892,897,901,906,910,915],{"type":16,"tag":152,"props":865,"children":866},{"style":159},[867],{"type":21,"value":222},{"type":16,"tag":152,"props":869,"children":870},{"style":169},[871],{"type":21,"value":227},{"type":16,"tag":152,"props":873,"children":874},{"style":159},[875],{"type":21,"value":232},{"type":16,"tag":152,"props":877,"children":878},{"style":235},[879],{"type":21,"value":238},{"type":16,"tag":152,"props":881,"children":882},{"style":159},[883],{"type":21,"value":243},{"type":16,"tag":152,"props":885,"children":886},{"style":169},[887],{"type":21,"value":238},{"type":16,"tag":152,"props":889,"children":890},{"style":159},[891],{"type":21,"value":232},{"type":16,"tag":152,"props":893,"children":894},{"style":235},[895],{"type":21,"value":896},"\"powershell -c ",{"type":16,"tag":152,"props":898,"children":899},{"style":169},[900],{"type":21,"value":261},{"type":16,"tag":152,"props":902,"children":903},{"style":235},[904],{"type":21,"value":905},"[System.Windows.Forms.MessageBox]::Show('Run finished','Claude Code')",{"type":16,"tag":152,"props":907,"children":908},{"style":169},[909],{"type":21,"value":261},{"type":16,"tag":152,"props":911,"children":912},{"style":235},[913],{"type":21,"value":914},"\"",{"type":16,"tag":152,"props":916,"children":917},{"style":159},[918],{"type":21,"value":316},{"type":16,"tag":152,"props":920,"children":921},{"class":154,"line":319},[922],{"type":16,"tag":152,"props":923,"children":924},{"style":159},[925],{"type":21,"value":325},{"type":16,"tag":152,"props":927,"children":928},{"class":154,"line":328},[929],{"type":16,"tag":152,"props":930,"children":931},{"style":159},[932],{"type":21,"value":334},{"type":16,"tag":152,"props":934,"children":935},{"class":154,"line":337},[936],{"type":16,"tag":152,"props":937,"children":938},{"style":159},[939],{"type":21,"value":491},{"type":16,"tag":152,"props":941,"children":942},{"class":154,"line":346},[943],{"type":16,"tag":152,"props":944,"children":945},{"style":159},[946],{"type":21,"value":500},{"type":16,"tag":152,"props":948,"children":949},{"class":154,"line":359},[950],{"type":16,"tag":152,"props":951,"children":952},{"style":159},[953],{"type":21,"value":509},{"type":16,"tag":17,"props":955,"children":956},{},[957,959,964,966,972],{"type":21,"value":958},"Running Claude Code inside WSL? ",{"type":16,"tag":56,"props":960,"children":962},{"className":961},[],[963],{"type":21,"value":555},{"type":21,"value":965}," will not reach the Windows desktop unless you have WSLg. Call PowerShell from the Linux side instead: ",{"type":16,"tag":56,"props":967,"children":969},{"className":968},[],[970],{"type":21,"value":971},"powershell.exe -c \"...\"",{"type":21,"value":973}," works from any WSL shell.",{"type":16,"tag":37,"props":975,"children":977},{"id":976},"say-which-project-pinged",[978],{"type":21,"value":979},"Say which project pinged",{"type":16,"tag":17,"props":981,"children":982},{},[983,985,991],{"type":21,"value":984},"A notification that says \"Claude needs you\" is useless once you run more than one session. The payload arriving on ",{"type":16,"tag":56,"props":986,"children":988},{"className":987},[],[989],{"type":21,"value":990},"stdin",{"type":21,"value":992}," carries the session's working directory, so a two-line script can name the project:",{"type":16,"tag":142,"props":994,"children":998},{"className":995,"code":996,"language":997,"meta":7,"style":7},"language-bash shiki shiki-themes github-light github-dark","#!/usr/bin/env bash\n# .claude/hooks/notify.sh\npayload=$(cat)\nproject=$(basename \"$(echo \"$payload\" | jq -r '.cwd')\")\nnotify-send -u critical \"Claude Code\" \"$project needs you\"\n","bash",[999],{"type":16,"tag":56,"props":1000,"children":1001},{"__ignoreMap":7},[1002,1011,1019,1049,1119],{"type":16,"tag":152,"props":1003,"children":1004},{"class":154,"line":155},[1005],{"type":16,"tag":152,"props":1006,"children":1008},{"style":1007},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[1009],{"type":21,"value":1010},"#!/usr/bin/env bash\n",{"type":16,"tag":152,"props":1012,"children":1013},{"class":154,"line":165},[1014],{"type":16,"tag":152,"props":1015,"children":1016},{"style":1007},[1017],{"type":21,"value":1018},"# .claude/hooks/notify.sh\n",{"type":16,"tag":152,"props":1020,"children":1021},{"class":154,"line":180},[1022,1027,1033,1038,1044],{"type":16,"tag":152,"props":1023,"children":1024},{"style":159},[1025],{"type":21,"value":1026},"payload",{"type":16,"tag":152,"props":1028,"children":1030},{"style":1029},"--shiki-default:#D73A49;--shiki-dark:#F97583",[1031],{"type":21,"value":1032},"=",{"type":16,"tag":152,"props":1034,"children":1035},{"style":159},[1036],{"type":21,"value":1037},"$(",{"type":16,"tag":152,"props":1039,"children":1041},{"style":1040},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[1042],{"type":21,"value":1043},"cat",{"type":16,"tag":152,"props":1045,"children":1046},{"style":159},[1047],{"type":21,"value":1048},")\n",{"type":16,"tag":152,"props":1050,"children":1051},{"class":154,"line":194},[1052,1057,1061,1065,1070,1075,1080,1085,1090,1095,1100,1105,1110,1115],{"type":16,"tag":152,"props":1053,"children":1054},{"style":159},[1055],{"type":21,"value":1056},"project",{"type":16,"tag":152,"props":1058,"children":1059},{"style":1029},[1060],{"type":21,"value":1032},{"type":16,"tag":152,"props":1062,"children":1063},{"style":159},[1064],{"type":21,"value":1037},{"type":16,"tag":152,"props":1066,"children":1067},{"style":1040},[1068],{"type":21,"value":1069},"basename",{"type":16,"tag":152,"props":1071,"children":1072},{"style":235},[1073],{"type":21,"value":1074}," \"$(",{"type":16,"tag":152,"props":1076,"children":1077},{"style":169},[1078],{"type":21,"value":1079},"echo",{"type":16,"tag":152,"props":1081,"children":1082},{"style":235},[1083],{"type":21,"value":1084}," \"",{"type":16,"tag":152,"props":1086,"children":1087},{"style":159},[1088],{"type":21,"value":1089},"$payload",{"type":16,"tag":152,"props":1091,"children":1092},{"style":235},[1093],{"type":21,"value":1094},"\" ",{"type":16,"tag":152,"props":1096,"children":1097},{"style":1029},[1098],{"type":21,"value":1099},"|",{"type":16,"tag":152,"props":1101,"children":1102},{"style":1040},[1103],{"type":21,"value":1104}," jq",{"type":16,"tag":152,"props":1106,"children":1107},{"style":169},[1108],{"type":21,"value":1109}," -r",{"type":16,"tag":152,"props":1111,"children":1112},{"style":235},[1113],{"type":21,"value":1114}," '.cwd')\"",{"type":16,"tag":152,"props":1116,"children":1117},{"style":159},[1118],{"type":21,"value":1048},{"type":16,"tag":152,"props":1120,"children":1121},{"class":154,"line":203},[1122,1126,1131,1136,1141,1145,1150],{"type":16,"tag":152,"props":1123,"children":1124},{"style":1040},[1125],{"type":21,"value":555},{"type":16,"tag":152,"props":1127,"children":1128},{"style":169},[1129],{"type":21,"value":1130}," -u",{"type":16,"tag":152,"props":1132,"children":1133},{"style":235},[1134],{"type":21,"value":1135}," critical",{"type":16,"tag":152,"props":1137,"children":1138},{"style":235},[1139],{"type":21,"value":1140}," \"Claude Code\"",{"type":16,"tag":152,"props":1142,"children":1143},{"style":235},[1144],{"type":21,"value":1084},{"type":16,"tag":152,"props":1146,"children":1147},{"style":159},[1148],{"type":21,"value":1149},"$project",{"type":16,"tag":152,"props":1151,"children":1152},{"style":235},[1153],{"type":21,"value":1154}," needs you\"\n",{"type":16,"tag":17,"props":1156,"children":1157},{},[1158,1160,1166],{"type":21,"value":1159},"Point the hook at it, and use ",{"type":16,"tag":56,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":21,"value":1165},"$CLAUDE_PROJECT_DIR",{"type":21,"value":1167}," so the path resolves from any subdirectory:",{"type":16,"tag":142,"props":1169,"children":1171},{"className":144,"code":1170,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"Notification\": [\n      {\n        \"hooks\": [\n          { \"type\": \"command\", \"command\": \"$CLAUDE_PROJECT_DIR/.claude/hooks/notify.sh\", \"timeout\": 10 }\n        ]\n      }\n    ]\n  }\n}\n",[1172],{"type":16,"tag":56,"props":1173,"children":1174},{"__ignoreMap":7},[1175,1182,1193,1204,1211,1222,1280,1287,1294,1301,1308],{"type":16,"tag":152,"props":1176,"children":1177},{"class":154,"line":155},[1178],{"type":16,"tag":152,"props":1179,"children":1180},{"style":159},[1181],{"type":21,"value":162},{"type":16,"tag":152,"props":1183,"children":1184},{"class":154,"line":165},[1185,1189],{"type":16,"tag":152,"props":1186,"children":1187},{"style":169},[1188],{"type":21,"value":172},{"type":16,"tag":152,"props":1190,"children":1191},{"style":159},[1192],{"type":21,"value":177},{"type":16,"tag":152,"props":1194,"children":1195},{"class":154,"line":180},[1196,1200],{"type":16,"tag":152,"props":1197,"children":1198},{"style":169},[1199],{"type":21,"value":186},{"type":16,"tag":152,"props":1201,"children":1202},{"style":159},[1203],{"type":21,"value":191},{"type":16,"tag":152,"props":1205,"children":1206},{"class":154,"line":194},[1207],{"type":16,"tag":152,"props":1208,"children":1209},{"style":159},[1210],{"type":21,"value":200},{"type":16,"tag":152,"props":1212,"children":1213},{"class":154,"line":203},[1214,1218],{"type":16,"tag":152,"props":1215,"children":1216},{"style":169},[1217],{"type":21,"value":209},{"type":16,"tag":152,"props":1219,"children":1220},{"style":159},[1221],{"type":21,"value":191},{"type":16,"tag":152,"props":1223,"children":1224},{"class":154,"line":216},[1225,1229,1233,1237,1241,1245,1249,1253,1258,1262,1267,1271,1276],{"type":16,"tag":152,"props":1226,"children":1227},{"style":159},[1228],{"type":21,"value":222},{"type":16,"tag":152,"props":1230,"children":1231},{"style":169},[1232],{"type":21,"value":227},{"type":16,"tag":152,"props":1234,"children":1235},{"style":159},[1236],{"type":21,"value":232},{"type":16,"tag":152,"props":1238,"children":1239},{"style":235},[1240],{"type":21,"value":238},{"type":16,"tag":152,"props":1242,"children":1243},{"style":159},[1244],{"type":21,"value":243},{"type":16,"tag":152,"props":1246,"children":1247},{"style":169},[1248],{"type":21,"value":238},{"type":16,"tag":152,"props":1250,"children":1251},{"style":159},[1252],{"type":21,"value":232},{"type":16,"tag":152,"props":1254,"children":1255},{"style":235},[1256],{"type":21,"value":1257},"\"$CLAUDE_PROJECT_DIR/.claude/hooks/notify.sh\"",{"type":16,"tag":152,"props":1259,"children":1260},{"style":159},[1261],{"type":21,"value":243},{"type":16,"tag":152,"props":1263,"children":1264},{"style":169},[1265],{"type":21,"value":1266},"\"timeout\"",{"type":16,"tag":152,"props":1268,"children":1269},{"style":159},[1270],{"type":21,"value":232},{"type":16,"tag":152,"props":1272,"children":1273},{"style":169},[1274],{"type":21,"value":1275},"10",{"type":16,"tag":152,"props":1277,"children":1278},{"style":159},[1279],{"type":21,"value":316},{"type":16,"tag":152,"props":1281,"children":1282},{"class":154,"line":319},[1283],{"type":16,"tag":152,"props":1284,"children":1285},{"style":159},[1286],{"type":21,"value":325},{"type":16,"tag":152,"props":1288,"children":1289},{"class":154,"line":328},[1290],{"type":16,"tag":152,"props":1291,"children":1292},{"style":159},[1293],{"type":21,"value":334},{"type":16,"tag":152,"props":1295,"children":1296},{"class":154,"line":337},[1297],{"type":16,"tag":152,"props":1298,"children":1299},{"style":159},[1300],{"type":21,"value":491},{"type":16,"tag":152,"props":1302,"children":1303},{"class":154,"line":346},[1304],{"type":16,"tag":152,"props":1305,"children":1306},{"style":159},[1307],{"type":21,"value":500},{"type":16,"tag":152,"props":1309,"children":1310},{"class":154,"line":359},[1311],{"type":16,"tag":152,"props":1312,"children":1313},{"style":159},[1314],{"type":21,"value":509},{"type":16,"tag":17,"props":1316,"children":1317},{},[1318,1320,1326],{"type":21,"value":1319},"The same payload also carries ",{"type":16,"tag":56,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":21,"value":1325},"session_id",{"type":21,"value":1327},", if you would rather key your notifications on the session than on the folder.",{"type":16,"tag":37,"props":1329,"children":1331},{"id":1330},"just-want-a-sound",[1332],{"type":21,"value":1333},"Just want a sound?",{"type":16,"tag":17,"props":1335,"children":1336},{},[1337],{"type":21,"value":1338},"You do not need a full notification. A single bell in the terminal is often enough:",{"type":16,"tag":142,"props":1340,"children":1342},{"className":144,"code":1341,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"Stop\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"printf '\\\\a'\" }] }\n    ]\n  }\n}\n",[1343],{"type":16,"tag":56,"props":1344,"children":1345},{"__ignoreMap":7},[1346,1353,1364,1375,1437,1444,1451],{"type":16,"tag":152,"props":1347,"children":1348},{"class":154,"line":155},[1349],{"type":16,"tag":152,"props":1350,"children":1351},{"style":159},[1352],{"type":21,"value":162},{"type":16,"tag":152,"props":1354,"children":1355},{"class":154,"line":165},[1356,1360],{"type":16,"tag":152,"props":1357,"children":1358},{"style":169},[1359],{"type":21,"value":172},{"type":16,"tag":152,"props":1361,"children":1362},{"style":159},[1363],{"type":21,"value":177},{"type":16,"tag":152,"props":1365,"children":1366},{"class":154,"line":180},[1367,1371],{"type":16,"tag":152,"props":1368,"children":1369},{"style":169},[1370],{"type":21,"value":352},{"type":16,"tag":152,"props":1372,"children":1373},{"style":159},[1374],{"type":21,"value":191},{"type":16,"tag":152,"props":1376,"children":1377},{"class":154,"line":194},[1378,1383,1388,1393,1397,1401,1405,1409,1413,1417,1422,1427,1432],{"type":16,"tag":152,"props":1379,"children":1380},{"style":159},[1381],{"type":21,"value":1382},"      { ",{"type":16,"tag":152,"props":1384,"children":1385},{"style":169},[1386],{"type":21,"value":1387},"\"hooks\"",{"type":16,"tag":152,"props":1389,"children":1390},{"style":159},[1391],{"type":21,"value":1392},": [{ ",{"type":16,"tag":152,"props":1394,"children":1395},{"style":169},[1396],{"type":21,"value":227},{"type":16,"tag":152,"props":1398,"children":1399},{"style":159},[1400],{"type":21,"value":232},{"type":16,"tag":152,"props":1402,"children":1403},{"style":235},[1404],{"type":21,"value":238},{"type":16,"tag":152,"props":1406,"children":1407},{"style":159},[1408],{"type":21,"value":243},{"type":16,"tag":152,"props":1410,"children":1411},{"style":169},[1412],{"type":21,"value":238},{"type":16,"tag":152,"props":1414,"children":1415},{"style":159},[1416],{"type":21,"value":232},{"type":16,"tag":152,"props":1418,"children":1419},{"style":235},[1420],{"type":21,"value":1421},"\"printf '",{"type":16,"tag":152,"props":1423,"children":1424},{"style":169},[1425],{"type":21,"value":1426},"\\\\",{"type":16,"tag":152,"props":1428,"children":1429},{"style":235},[1430],{"type":21,"value":1431},"a'\"",{"type":16,"tag":152,"props":1433,"children":1434},{"style":159},[1435],{"type":21,"value":1436}," }] }\n",{"type":16,"tag":152,"props":1438,"children":1439},{"class":154,"line":203},[1440],{"type":16,"tag":152,"props":1441,"children":1442},{"style":159},[1443],{"type":21,"value":491},{"type":16,"tag":152,"props":1445,"children":1446},{"class":154,"line":216},[1447],{"type":16,"tag":152,"props":1448,"children":1449},{"style":159},[1450],{"type":21,"value":500},{"type":16,"tag":152,"props":1452,"children":1453},{"class":154,"line":319},[1454],{"type":16,"tag":152,"props":1455,"children":1456},{"style":159},[1457],{"type":21,"value":509},{"type":16,"tag":17,"props":1459,"children":1460},{},[1461,1463,1469],{"type":21,"value":1462},"There is a per-platform walkthrough in ",{"type":16,"tag":114,"props":1464,"children":1466},{"href":1465},"/guides/claude-code-sound-when-done",[1467],{"type":21,"value":1468},"play a sound when Claude Code finishes",{"type":21,"value":1470},".",{"type":16,"tag":37,"props":1472,"children":1474},{"id":1473},"or-let-your-terminal-carry-the-alert",[1475],{"type":21,"value":1476},"Or let your terminal carry the alert",{"type":16,"tag":17,"props":1478,"children":1479},{},[1480],{"type":21,"value":1481},"A desktop notification is not the only option, and in a terminal-heavy setup it is often not the best one. Ringing the bell from the hook lets your multiplexer flag the exact window the event came from:",{"type":16,"tag":142,"props":1483,"children":1485},{"className":144,"code":1484,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"Notification\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"printf '\\\\a' > /dev/tty\" }] }\n    ]\n  }\n}\n",[1486],{"type":16,"tag":56,"props":1487,"children":1488},{"__ignoreMap":7},[1489,1496,1507,1518,1574,1581,1588],{"type":16,"tag":152,"props":1490,"children":1491},{"class":154,"line":155},[1492],{"type":16,"tag":152,"props":1493,"children":1494},{"style":159},[1495],{"type":21,"value":162},{"type":16,"tag":152,"props":1497,"children":1498},{"class":154,"line":165},[1499,1503],{"type":16,"tag":152,"props":1500,"children":1501},{"style":169},[1502],{"type":21,"value":172},{"type":16,"tag":152,"props":1504,"children":1505},{"style":159},[1506],{"type":21,"value":177},{"type":16,"tag":152,"props":1508,"children":1509},{"class":154,"line":180},[1510,1514],{"type":16,"tag":152,"props":1511,"children":1512},{"style":169},[1513],{"type":21,"value":186},{"type":16,"tag":152,"props":1515,"children":1516},{"style":159},[1517],{"type":21,"value":191},{"type":16,"tag":152,"props":1519,"children":1520},{"class":154,"line":194},[1521,1525,1529,1533,1537,1541,1545,1549,1553,1557,1561,1565,1570],{"type":16,"tag":152,"props":1522,"children":1523},{"style":159},[1524],{"type":21,"value":1382},{"type":16,"tag":152,"props":1526,"children":1527},{"style":169},[1528],{"type":21,"value":1387},{"type":16,"tag":152,"props":1530,"children":1531},{"style":159},[1532],{"type":21,"value":1392},{"type":16,"tag":152,"props":1534,"children":1535},{"style":169},[1536],{"type":21,"value":227},{"type":16,"tag":152,"props":1538,"children":1539},{"style":159},[1540],{"type":21,"value":232},{"type":16,"tag":152,"props":1542,"children":1543},{"style":235},[1544],{"type":21,"value":238},{"type":16,"tag":152,"props":1546,"children":1547},{"style":159},[1548],{"type":21,"value":243},{"type":16,"tag":152,"props":1550,"children":1551},{"style":169},[1552],{"type":21,"value":238},{"type":16,"tag":152,"props":1554,"children":1555},{"style":159},[1556],{"type":21,"value":232},{"type":16,"tag":152,"props":1558,"children":1559},{"style":235},[1560],{"type":21,"value":1421},{"type":16,"tag":152,"props":1562,"children":1563},{"style":169},[1564],{"type":21,"value":1426},{"type":16,"tag":152,"props":1566,"children":1567},{"style":235},[1568],{"type":21,"value":1569},"a' > /dev/tty\"",{"type":16,"tag":152,"props":1571,"children":1572},{"style":159},[1573],{"type":21,"value":1436},{"type":16,"tag":152,"props":1575,"children":1576},{"class":154,"line":203},[1577],{"type":16,"tag":152,"props":1578,"children":1579},{"style":159},[1580],{"type":21,"value":491},{"type":16,"tag":152,"props":1582,"children":1583},{"class":154,"line":216},[1584],{"type":16,"tag":152,"props":1585,"children":1586},{"style":159},[1587],{"type":21,"value":500},{"type":16,"tag":152,"props":1589,"children":1590},{"class":154,"line":319},[1591],{"type":16,"tag":152,"props":1592,"children":1593},{"style":159},[1594],{"type":21,"value":509},{"type":16,"tag":17,"props":1596,"children":1597},{},[1598,1600,1606,1608,1614],{"type":21,"value":1599},"With ",{"type":16,"tag":56,"props":1601,"children":1603},{"className":1602},[],[1604],{"type":21,"value":1605},"set -g monitor-bell on",{"type":21,"value":1607}," in your ",{"type":16,"tag":56,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":21,"value":1613},"~/.tmux.conf",{"type":21,"value":1615},", the status bar highlights the window that needs you, which is more information than a pop-up saying \"Claude Code\". iTerm2 and most modern terminals can do the same through their own triggers or attention badges.",{"type":16,"tag":37,"props":1617,"children":1619},{"id":1618},"notify-only-when-it-was-actually-long",[1620],{"type":21,"value":1621},"Notify only when it was actually long",{"type":16,"tag":17,"props":1623,"children":1624},{},[1625,1627,1633,1635,1640],{"type":21,"value":1626},"Alerts you get every thirty seconds stop being alerts. If most of your turns are short, gate the notification on how long the turn took, by stamping the start in ",{"type":16,"tag":56,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":21,"value":1632},"UserPromptSubmit",{"type":21,"value":1634}," and checking it in ",{"type":16,"tag":56,"props":1636,"children":1638},{"className":1637},[],[1639],{"type":21,"value":75},{"type":21,"value":1641},":",{"type":16,"tag":142,"props":1643,"children":1645},{"className":144,"code":1644,"language":146,"meta":7,"style":7},"{\n  \"hooks\": {\n    \"UserPromptSubmit\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"date +%s > /tmp/claude-start\" }] }\n    ],\n    \"Stop\": [\n      { \"hooks\": [{ \"type\": \"command\", \"command\": \"[ $(( $(date +%s) - $(cat /tmp/claude-start) )) -gt 60 ] && notify-send 'Claude Code' 'Long run finished'\" }] }\n    ]\n  }\n}\n",[1646],{"type":16,"tag":56,"props":1647,"children":1648},{"__ignoreMap":7},[1649,1656,1667,1679,1727,1734,1745,1793,1800,1807],{"type":16,"tag":152,"props":1650,"children":1651},{"class":154,"line":155},[1652],{"type":16,"tag":152,"props":1653,"children":1654},{"style":159},[1655],{"type":21,"value":162},{"type":16,"tag":152,"props":1657,"children":1658},{"class":154,"line":165},[1659,1663],{"type":16,"tag":152,"props":1660,"children":1661},{"style":169},[1662],{"type":21,"value":172},{"type":16,"tag":152,"props":1664,"children":1665},{"style":159},[1666],{"type":21,"value":177},{"type":16,"tag":152,"props":1668,"children":1669},{"class":154,"line":180},[1670,1675],{"type":16,"tag":152,"props":1671,"children":1672},{"style":169},[1673],{"type":21,"value":1674},"    \"UserPromptSubmit\"",{"type":16,"tag":152,"props":1676,"children":1677},{"style":159},[1678],{"type":21,"value":191},{"type":16,"tag":152,"props":1680,"children":1681},{"class":154,"line":194},[1682,1686,1690,1694,1698,1702,1706,1710,1714,1718,1723],{"type":16,"tag":152,"props":1683,"children":1684},{"style":159},[1685],{"type":21,"value":1382},{"type":16,"tag":152,"props":1687,"children":1688},{"style":169},[1689],{"type":21,"value":1387},{"type":16,"tag":152,"props":1691,"children":1692},{"style":159},[1693],{"type":21,"value":1392},{"type":16,"tag":152,"props":1695,"children":1696},{"style":169},[1697],{"type":21,"value":227},{"type":16,"tag":152,"props":1699,"children":1700},{"style":159},[1701],{"type":21,"value":232},{"type":16,"tag":152,"props":1703,"children":1704},{"style":235},[1705],{"type":21,"value":238},{"type":16,"tag":152,"props":1707,"children":1708},{"style":159},[1709],{"type":21,"value":243},{"type":16,"tag":152,"props":1711,"children":1712},{"style":169},[1713],{"type":21,"value":238},{"type":16,"tag":152,"props":1715,"children":1716},{"style":159},[1717],{"type":21,"value":232},{"type":16,"tag":152,"props":1719,"children":1720},{"style":235},[1721],{"type":21,"value":1722},"\"date +%s > /tmp/claude-start\"",{"type":16,"tag":152,"props":1724,"children":1725},{"style":159},[1726],{"type":21,"value":1436},{"type":16,"tag":152,"props":1728,"children":1729},{"class":154,"line":203},[1730],{"type":16,"tag":152,"props":1731,"children":1732},{"style":159},[1733],{"type":21,"value":343},{"type":16,"tag":152,"props":1735,"children":1736},{"class":154,"line":216},[1737,1741],{"type":16,"tag":152,"props":1738,"children":1739},{"style":169},[1740],{"type":21,"value":352},{"type":16,"tag":152,"props":1742,"children":1743},{"style":159},[1744],{"type":21,"value":191},{"type":16,"tag":152,"props":1746,"children":1747},{"class":154,"line":319},[1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1789],{"type":16,"tag":152,"props":1749,"children":1750},{"style":159},[1751],{"type":21,"value":1382},{"type":16,"tag":152,"props":1753,"children":1754},{"style":169},[1755],{"type":21,"value":1387},{"type":16,"tag":152,"props":1757,"children":1758},{"style":159},[1759],{"type":21,"value":1392},{"type":16,"tag":152,"props":1761,"children":1762},{"style":169},[1763],{"type":21,"value":227},{"type":16,"tag":152,"props":1765,"children":1766},{"style":159},[1767],{"type":21,"value":232},{"type":16,"tag":152,"props":1769,"children":1770},{"style":235},[1771],{"type":21,"value":238},{"type":16,"tag":152,"props":1773,"children":1774},{"style":159},[1775],{"type":21,"value":243},{"type":16,"tag":152,"props":1777,"children":1778},{"style":169},[1779],{"type":21,"value":238},{"type":16,"tag":152,"props":1781,"children":1782},{"style":159},[1783],{"type":21,"value":232},{"type":16,"tag":152,"props":1785,"children":1786},{"style":235},[1787],{"type":21,"value":1788},"\"[ $(( $(date +%s) - $(cat /tmp/claude-start) )) -gt 60 ] && notify-send 'Claude Code' 'Long run finished'\"",{"type":16,"tag":152,"props":1790,"children":1791},{"style":159},[1792],{"type":21,"value":1436},{"type":16,"tag":152,"props":1794,"children":1795},{"class":154,"line":328},[1796],{"type":16,"tag":152,"props":1797,"children":1798},{"style":159},[1799],{"type":21,"value":491},{"type":16,"tag":152,"props":1801,"children":1802},{"class":154,"line":337},[1803],{"type":16,"tag":152,"props":1804,"children":1805},{"style":159},[1806],{"type":21,"value":500},{"type":16,"tag":152,"props":1808,"children":1809},{"class":154,"line":346},[1810],{"type":16,"tag":152,"props":1811,"children":1812},{"style":159},[1813],{"type":21,"value":509},{"type":16,"tag":17,"props":1815,"children":1816},{},[1817,1819,1824],{"type":21,"value":1818},"Keep the ",{"type":16,"tag":56,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":21,"value":61},{"type":21,"value":1825}," hook ungated though: something blocking you is always worth interrupting for.",{"type":16,"tag":37,"props":1827,"children":1829},{"id":1828},"where-scripts-run-out-of-road",[1830],{"type":21,"value":1831},"Where scripts run out of road",{"type":16,"tag":17,"props":1833,"children":1834},{},[1835],{"type":21,"value":1836},"Notifications work well for one session. Run three or four at once and they start to blur together: which project just pinged? Was that a \"needs you\" or a \"done\"? Notification centres also collapse repeats, so a stack of five alerts becomes one line you have to expand. You are back to alt-tabbing to find out.",{"type":16,"tag":17,"props":1838,"children":1839},{},[1840,1842,1848,1850,1855],{"type":21,"value":1841},"That is the gap ",{"type":16,"tag":114,"props":1843,"children":1845},{"href":1844},"/",[1846],{"type":21,"value":1847},"Blooby",{"type":21,"value":1849}," fills. Instead of a notification per event, it gives ",{"type":16,"tag":52,"props":1851,"children":1852},{},[1853],{"type":21,"value":1854},"each",{"type":21,"value":1856}," Claude Code session its own animated mascot that reflects its state in real time, driven by these same hooks: it looks up when a session needs permission, celebrates when one finishes, dozes off when a session goes quiet. You glance at the corner of your screen and know which of your sessions wants you, with no config and no scripts to maintain.",{"type":16,"tag":1858,"props":1859,"children":1860},"style",{},[1861],{"type":21,"value":1862},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":165,"depth":165,"links":1864},[1865,1866,1867,1868,1869,1870,1871,1872,1873],{"id":39,"depth":165,"text":42},{"id":124,"depth":165,"text":127},{"id":541,"depth":165,"text":544},{"id":798,"depth":165,"text":801},{"id":976,"depth":165,"text":979},{"id":1330,"depth":165,"text":1333},{"id":1473,"depth":165,"text":1476},{"id":1618,"depth":165,"text":1621},{"id":1828,"depth":165,"text":1831},"markdown","content:guides:claude-code-notifications.md","content","guides/claude-code-notifications.md","guides/claude-code-notifications","md",1]