diff --git a/hookshot/devdesk.js b/hookshot/devdesk.js
new file mode 100644
index 0000000..61b9aca
--- /dev/null
+++ b/hookshot/devdesk.js
@@ -0,0 +1,19 @@
+// DevDesk "Claude needs you" (devdesk#28)
+// Receives: { session, message, url, host, text } from devdesk-notify-matrix on
+// CT 126 when a Claude session waits for input and no browser tab or SSH client
+// is attached to it.
+var session = String(data.session || 'a session');
+var message = String(data.message || 'Claude is waiting for your input');
+var url = data.url ? String(data.url) : '';
+function esc(t) {
+ return t.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
+}
+// m.text, not m.notice: notices are muted by default push rules, and this one
+// exists to reach your phone.
+result = {
+ version: 'v2',
+ plain: '🔔 Claude needs you in ' + session + ': ' + message + (url ? ' — ' + url : ''),
+ html: '🔔 Claude needs you in ' + esc(session) + ': ' + esc(message)
+ + (url ? ' — open in DevDesk' : ''),
+ msgtype: 'm.text',
+};