hoomanjs 1.40.1 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +50 -3
  2. package/dist/acp/acp-agent.d.ts +16 -3
  3. package/dist/acp/acp-agent.js +371 -177
  4. package/dist/acp/acp-agent.js.map +1 -1
  5. package/dist/acp/commands.d.ts +6 -3
  6. package/dist/acp/commands.js +6 -24
  7. package/dist/acp/commands.js.map +1 -1
  8. package/dist/acp/meta/vscode.d.ts +10 -0
  9. package/dist/acp/meta/vscode.js +16 -0
  10. package/dist/acp/meta/vscode.js.map +1 -0
  11. package/dist/acp/questions.d.ts +18 -0
  12. package/dist/acp/questions.js +80 -0
  13. package/dist/acp/questions.js.map +1 -0
  14. package/dist/acp/session-config.d.ts +3 -1
  15. package/dist/acp/session-config.js +20 -8
  16. package/dist/acp/session-config.js.map +1 -1
  17. package/dist/acp/sessions/replay.js +117 -1
  18. package/dist/acp/sessions/replay.js.map +1 -1
  19. package/dist/acp/sessions/store.d.ts +55 -16
  20. package/dist/acp/sessions/store.js +174 -71
  21. package/dist/acp/sessions/store.js.map +1 -1
  22. package/dist/acp/utils/tool-kind.js +1 -1
  23. package/dist/acp/utils/tool-kind.js.map +1 -1
  24. package/dist/acp/utils/tool-result-content.d.ts +1 -0
  25. package/dist/acp/utils/tool-result-content.js +28 -1
  26. package/dist/acp/utils/tool-result-content.js.map +1 -1
  27. package/dist/chat/app.d.ts +3 -1
  28. package/dist/chat/app.js +65 -24
  29. package/dist/chat/app.js.map +1 -1
  30. package/dist/chat/components/BottomChrome.d.ts +12 -3
  31. package/dist/chat/components/BottomChrome.js +2 -2
  32. package/dist/chat/components/BottomChrome.js.map +1 -1
  33. package/dist/chat/components/ChromePicker.d.ts +5 -1
  34. package/dist/chat/components/ChromePicker.js +6 -2
  35. package/dist/chat/components/ChromePicker.js.map +1 -1
  36. package/dist/chat/components/QuestionPrompt.d.ts +8 -0
  37. package/dist/chat/components/QuestionPrompt.js +41 -0
  38. package/dist/chat/components/QuestionPrompt.js.map +1 -0
  39. package/dist/chat/components/StatusBar.d.ts +8 -3
  40. package/dist/chat/components/StatusBar.js +55 -26
  41. package/dist/chat/components/StatusBar.js.map +1 -1
  42. package/dist/chat/index.d.ts +2 -1
  43. package/dist/chat/index.js +1 -3
  44. package/dist/chat/index.js.map +1 -1
  45. package/dist/chat/questions.d.ts +24 -0
  46. package/dist/chat/questions.js +71 -0
  47. package/dist/chat/questions.js.map +1 -0
  48. package/dist/cli.js +13 -10
  49. package/dist/cli.js.map +1 -1
  50. package/dist/core/agent/index.d.ts +3 -0
  51. package/dist/core/agent/index.js +11 -6
  52. package/dist/core/agent/index.js.map +1 -1
  53. package/dist/core/agent/session-title-plugin.d.ts +27 -0
  54. package/dist/core/agent/session-title-plugin.js +77 -0
  55. package/dist/core/agent/session-title-plugin.js.map +1 -0
  56. package/dist/core/config.d.ts +30 -1
  57. package/dist/core/config.js +2 -0
  58. package/dist/core/config.js.map +1 -1
  59. package/dist/core/index.d.ts +12 -0
  60. package/dist/core/index.js +7 -2
  61. package/dist/core/index.js.map +1 -1
  62. package/dist/core/models/azure.js +5 -1
  63. package/dist/core/models/azure.js.map +1 -1
  64. package/dist/core/models/groq.js +5 -1
  65. package/dist/core/models/groq.js.map +1 -1
  66. package/dist/core/models/moonshot.js +5 -1
  67. package/dist/core/models/moonshot.js.map +1 -1
  68. package/dist/core/models/openai.js +6 -1
  69. package/dist/core/models/openai.js.map +1 -1
  70. package/dist/core/models/openrouter.js +5 -1
  71. package/dist/core/models/openrouter.js.map +1 -1
  72. package/dist/core/models/types.d.ts +44 -0
  73. package/dist/core/models/types.js +15 -0
  74. package/dist/core/models/types.js.map +1 -1
  75. package/dist/core/models/usage.d.ts +10 -0
  76. package/dist/core/models/usage.js +45 -0
  77. package/dist/core/models/usage.js.map +1 -0
  78. package/dist/core/models/xai.js +5 -1
  79. package/dist/core/models/xai.js.map +1 -1
  80. package/dist/core/modes/definitions.js +2 -2
  81. package/dist/core/modes/definitions.js.map +1 -1
  82. package/dist/core/prompts/harness/behaviour.md +3 -15
  83. package/dist/core/prompts/harness/communication.md +3 -16
  84. package/dist/core/prompts/harness/execution.md +6 -13
  85. package/dist/core/prompts/harness/guardrails.md +6 -12
  86. package/dist/core/prompts/static/ask-user.md +7 -0
  87. package/dist/core/prompts/static/daemon.md +4 -18
  88. package/dist/core/prompts/static/environment.md +2 -7
  89. package/dist/core/prompts/static/fetch.md +4 -30
  90. package/dist/core/prompts/static/filesystem.md +1 -1
  91. package/dist/core/prompts/static/identity.md +4 -19
  92. package/dist/core/prompts/static/planning.md +1 -9
  93. package/dist/core/prompts/static/subagents.md +4 -29
  94. package/dist/core/prompts/static/thinking.md +4 -24
  95. package/dist/core/prompts/static/todo.md +6 -32
  96. package/dist/core/prompts/system.js +5 -4
  97. package/dist/core/prompts/system.js.map +1 -1
  98. package/dist/core/sessions/generate-title.d.ts +10 -0
  99. package/dist/core/sessions/generate-title.js +113 -0
  100. package/dist/core/sessions/generate-title.js.map +1 -0
  101. package/dist/core/sessions/lazy-session-manager.js +0 -2
  102. package/dist/core/sessions/lazy-session-manager.js.map +1 -1
  103. package/dist/core/sessions/list-cli-sessions.js +13 -1
  104. package/dist/core/sessions/list-cli-sessions.js.map +1 -1
  105. package/dist/core/skills/built-in/hooman-channels/SKILL.md +11 -148
  106. package/dist/core/skills/built-in/hooman-channels/channels.md +117 -0
  107. package/dist/core/skills/built-in/hooman-coding/SKILL.md +49 -44
  108. package/dist/core/skills/built-in/hooman-coding/debugging.md +26 -0
  109. package/dist/core/skills/built-in/hooman-coding/new-project.md +23 -0
  110. package/dist/core/skills/built-in/hooman-config/SKILL.md +19 -257
  111. package/dist/core/skills/built-in/hooman-config/providers.md +171 -0
  112. package/dist/core/skills/built-in/hooman-config/search.md +39 -0
  113. package/dist/core/skills/built-in/hooman-mcp/SKILL.md +22 -153
  114. package/dist/core/skills/built-in/hooman-skills/SKILL.md +11 -147
  115. package/dist/core/skills/built-in/hooman-skills/authoring.md +80 -0
  116. package/dist/core/state/session-title.d.ts +17 -0
  117. package/dist/core/state/session-title.js +15 -0
  118. package/dist/core/state/session-title.js.map +1 -0
  119. package/dist/core/state/tool-approvals.js +3 -2
  120. package/dist/core/state/tool-approvals.js.map +1 -1
  121. package/dist/core/tools/ask-user.d.ts +38 -0
  122. package/dist/core/tools/ask-user.js +62 -0
  123. package/dist/core/tools/ask-user.js.map +1 -0
  124. package/dist/core/tools/filesystem.d.ts +26 -1
  125. package/dist/core/tools/filesystem.js +44 -23
  126. package/dist/core/tools/filesystem.js.map +1 -1
  127. package/dist/core/tools/index.d.ts +1 -1
  128. package/dist/core/tools/index.js +1 -1
  129. package/dist/core/tools/index.js.map +1 -1
  130. package/dist/core/tools/shell.d.ts +41 -0
  131. package/dist/core/tools/shell.js +8 -1
  132. package/dist/core/tools/shell.js.map +1 -1
  133. package/dist/core/tools/sleep.js +1 -1
  134. package/dist/core/tools/sleep.js.map +1 -1
  135. package/dist/core/utils/billing.d.ts +49 -0
  136. package/dist/core/utils/billing.js +295 -0
  137. package/dist/core/utils/billing.js.map +1 -0
  138. package/dist/core/utils/edit-replace.d.ts +6 -0
  139. package/dist/core/utils/edit-replace.js +88 -6
  140. package/dist/core/utils/edit-replace.js.map +1 -1
  141. package/dist/core/utils/paths.d.ts +1 -0
  142. package/dist/core/utils/paths.js +1 -0
  143. package/dist/core/utils/paths.js.map +1 -1
  144. package/dist/core/{models → utils}/reasoning-effort.d.ts +9 -0
  145. package/dist/core/utils/reasoning-effort.js.map +1 -0
  146. package/dist/daemon/index.d.ts +1 -1
  147. package/dist/daemon/index.js +1 -11
  148. package/dist/daemon/index.js.map +1 -1
  149. package/dist/exec/questions.d.ts +9 -0
  150. package/dist/exec/questions.js +50 -0
  151. package/dist/exec/questions.js.map +1 -0
  152. package/dist/index.d.ts +5 -5
  153. package/dist/index.js +5 -5
  154. package/dist/index.js.map +1 -1
  155. package/package.json +2 -2
  156. package/dist/core/models/reasoning-effort.js.map +0 -1
  157. package/dist/core/prompts/static/bye.md +0 -15
  158. package/dist/core/prompts/static/sleep.md +0 -20
  159. package/dist/core/state/exit-request.d.ts +0 -14
  160. package/dist/core/state/exit-request.js +0 -16
  161. package/dist/core/state/exit-request.js.map +0 -1
  162. package/dist/core/tools/bye.d.ts +0 -4
  163. package/dist/core/tools/bye.js +0 -23
  164. package/dist/core/tools/bye.js.map +0 -1
  165. package/dist/core/tools/terminal-backend.d.ts +0 -41
  166. package/dist/core/tools/terminal-backend.js +0 -9
  167. package/dist/core/tools/terminal-backend.js.map +0 -1
  168. package/dist/core/tools/text-fs-backend.d.ts +0 -25
  169. package/dist/core/tools/text-fs-backend.js +0 -9
  170. package/dist/core/tools/text-fs-backend.js.map +0 -1
  171. /package/dist/core/{models → utils}/reasoning-effort.js +0 -0
@@ -1,35 +1,9 @@
1
1
  ## Todo Tracking
2
2
 
3
- You have access to an `update_todos` tool for tracking progress on multi-step work.
3
+ You have an `update_todos` tool for tracking progress on multi-step work.
4
4
 
5
- ### When To Use It
6
-
7
- - Use `update_todos` for non-trivial work with multiple meaningful steps
8
- - Use it when the user gives multiple requests in one prompt
9
- - Use it when the user explicitly asks for a task or todo list
10
- - Use it when new follow-up steps appear during execution
11
- - Update the list before starting tracked work and right after completing a tracked item
12
-
13
- ### When Not To Use It
14
-
15
- - Do NOT use it for simple one-step requests
16
- - Do NOT use it for purely conversational or explanatory replies
17
- - Do NOT use it when a single command or tiny edit solves the task without meaningful tracking value
18
-
19
- ### How To Use It
20
-
21
- - Provide clear, actionable items
22
- - Each item must include:
23
- - `content`: imperative form (for example: "Check results")
24
- - `activeForm`: present continuous form (for example: "Checking results")
25
- - Valid statuses:
26
- - `pending`
27
- - `in_progress`
28
- - `completed`
29
- - Prefer exactly one `in_progress` item while actively working
30
- - Mark an item `completed` only when it is fully done
31
-
32
- ### Goal
33
-
34
- - Keep progress visible and accurate for the current turn
35
- - Use todo tracking to improve execution quality, not as busywork
5
+ - Use it for non-trivial multi-step work, multiple requests in one prompt, or when the user explicitly asks for a task list; add items when new follow-up steps appear during execution.
6
+ - Do NOT use it for simple one-step requests, purely conversational replies, or when a single command or tiny edit solves the task.
7
+ - Update the list before starting tracked work and right after completing an item; prefer exactly one `in_progress` item while actively working, and mark items `completed` only when fully done.
8
+ - Each item needs `content` (imperative, e.g. "Check results") and `activeForm` (present continuous, e.g. "Checking results"); valid statuses are `pending`, `in_progress`, `completed`.
9
+ - Keep progress visible and accurate; use tracking to improve execution quality, not as busywork.
@@ -10,12 +10,11 @@ const STATIC_PROMPT_FILES = [
10
10
  "environment.md",
11
11
  "todo.md",
12
12
  "thinking.md",
13
+ "ask-user.md",
13
14
  "filesystem.md",
14
15
  "fetch.md",
15
16
  "web-search.md",
16
17
  "shell.md",
17
- "sleep.md",
18
- "bye.md",
19
18
  "daemon.md",
20
19
  "skills.md",
21
20
  "subagents.md",
@@ -58,12 +57,14 @@ export class System {
58
57
  return this.config.tools.filesystem.enabled;
59
58
  case "shell.md":
60
59
  return this.config.tools.shell.enabled;
61
- case "sleep.md":
62
- return this.config.tools.sleep.enabled;
63
60
  case "subagents.md":
64
61
  return this.config.tools.subagents.enabled;
65
62
  case "daemon.md":
66
63
  return this.mode === "daemon";
64
+ // Daemon jobs have no interactive user; the tool would only report
65
+ // "no user available", so don't advertise it in the prompt.
66
+ case "ask-user.md":
67
+ return this.mode !== "daemon";
67
68
  default:
68
69
  return true;
69
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/core/prompts/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AAE/B,gEAAgE;AAChE,MAAM,mBAAmB,GAAG;IAC1B,aAAa;IACb,gBAAgB;IAChB,SAAS;IACT,aAAa;IACb,eAAe;IACf,UAAU;IACV,eAAe;IACf,UAAU;IACV,UAAU;IACV,QAAQ;IACR,WAAW;IACX,WAAW;IACX,cAAc;IACd,aAAa;CACL,CAAC;AAEX,MAAM,oBAAoB,GAAG;IAC3B,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1C,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAClD,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1C,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;CACpC,CAAC;AAIX,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC;;;;GAIG;AACH,MAAM,OAAO,MAAM;IACA,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAa;IAC1B,IAAI,GAAG,EAAE,CAAC;IACV,iBAAiB,GAAG,EAAE,CAAC;IACvB,gBAAgB,GAAsC,IAAI,CAAC;IAEnE,YACE,IAAY,EACZ,MAAc,EACd,OAAmB,SAAS;QAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,iBAAiB;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,UAAU;oBACb,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzC,KAAK,eAAe;oBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpC,KAAK,SAAS;oBACZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBACxC,KAAK,eAAe;oBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC9C,KAAK,UAAU;oBACb,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzC,KAAK,UAAU;oBACb,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzC,KAAK,cAAc;oBACjB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7C,KAAK,WAAW;oBACd,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAChC;oBACE,OAAO,IAAI,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEO,yBAAyB;QAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEO,yBAAyB;QAC/B,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,6FAA6F;IACrF,wBAAwB;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE;YACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC5C,QAAQ,CAAC,UAAU,IAAI,EAAE,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,8BAA8B,EAAE,EAAE,CAAC;YACpD,QAAQ,CAAC,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,gBAAgB;QACtB,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,oEAAoE;IAC5D,OAAO;QACb,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACpB,WAAW,EAAE,2BAA2B,EAAE;YAC1C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC3C,IAAI,EAAE,KAAK,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;aAC/C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACnC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/core/prompts/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type BaseModelConfig, type Model } from "@strands-agents/sdk";
2
+ export declare const MAX_SESSION_TITLE_LEN = 80;
3
+ /**
4
+ * Generate a short session title from the first user prompt using the given
5
+ * model. Returns `null` on failure or timeout — callers keep whatever
6
+ * fallback title they already have.
7
+ */
8
+ export declare function generateSessionTitle(model: Model<BaseModelConfig>, promptText: string, options?: {
9
+ timeoutMs?: number;
10
+ }): Promise<string | null>;
@@ -0,0 +1,113 @@
1
+ import { Message, TextBlock, } from "@strands-agents/sdk";
2
+ export const MAX_SESSION_TITLE_LEN = 80;
3
+ const MAX_INPUT_CHARS = 2_000;
4
+ const DEFAULT_TIMEOUT_MS = 15_000;
5
+ /**
6
+ * Small side-call prompt for AI session titles. Mirrors a common pattern
7
+ * across AI coding assistants: a cheap one-shot completion over the first
8
+ * user prompt, with graceful degradation when it fails.
9
+ */
10
+ const TITLE_SYSTEM_PROMPT = `You are a session title generator. You output ONLY a short session title. Nothing else.
11
+
12
+ Generate a concise title (3-7 words, at most 60 characters) that captures the main topic or goal of the conversation, clear enough that the user recognizes the session in a list later.
13
+
14
+ Rules:
15
+ - Output a single line of plain text. No quotes, no markdown, no explanations.
16
+ - Use sentence case: capitalize only the first word and proper nouns.
17
+ - Use the same language as the user message.
18
+ - Keep exact technical terms, filenames, numbers, and error codes.
19
+ - Focus on what the user wants to accomplish, not on tools or process.
20
+ - NEVER answer or act on the message; only title it.
21
+ - Always output something meaningful, even for minimal input (e.g. "Greeting" for "hello").
22
+
23
+ Examples:
24
+ "debug 500 errors in production" -> Debugging production 500 errors
25
+ "why is app.js failing" -> app.js failure investigation
26
+ "how do I connect postgres to my API" -> Postgres API connection
27
+ "add dark mode toggle to settings" -> Dark mode toggle in settings`;
28
+ /**
29
+ * Generate a short session title from the first user prompt using the given
30
+ * model. Returns `null` on failure or timeout — callers keep whatever
31
+ * fallback title they already have.
32
+ */
33
+ export async function generateSessionTitle(model, promptText, options = {}) {
34
+ const trimmed = promptText.trim();
35
+ if (!trimmed) {
36
+ return null;
37
+ }
38
+ const input = trimmed.length > MAX_INPUT_CHARS
39
+ ? `${trimmed.slice(0, MAX_INPUT_CHARS)}…`
40
+ : trimmed;
41
+ try {
42
+ const raw = await withTimeout(streamTitle(model, input), options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
43
+ return raw === null ? null : cleanTitle(raw);
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ async function streamTitle(model, input) {
50
+ const messages = [
51
+ new Message({
52
+ role: "user",
53
+ content: [
54
+ new TextBlock(`Generate a title for this conversation:\n\n${input}`),
55
+ ],
56
+ }),
57
+ ];
58
+ const generator = model.streamAggregated(messages, {
59
+ systemPrompt: TITLE_SYSTEM_PROMPT,
60
+ });
61
+ while (true) {
62
+ const next = await generator.next();
63
+ if (next.done) {
64
+ return next.value.message.content
65
+ .filter((block) => block.type === "textBlock")
66
+ .map((block) => block.text)
67
+ .join("");
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Normalize raw model output into a list-ready title: drop inline reasoning,
73
+ * take the first non-empty line, strip wrapping quotes, cap the length.
74
+ */
75
+ function cleanTitle(raw) {
76
+ const line = raw
77
+ .replace(/<think>[\s\S]*?<\/think>/g, "")
78
+ .split(/\r?\n/)
79
+ .map((part) => part.trim())
80
+ .find((part) => part.length > 0);
81
+ if (!line) {
82
+ return null;
83
+ }
84
+ const collapsed = line
85
+ .replace(/\s+/g, " ")
86
+ .replace(/^["'`]+|["'`]+$/g, "")
87
+ .trim();
88
+ if (!collapsed) {
89
+ return null;
90
+ }
91
+ if (collapsed.length <= MAX_SESSION_TITLE_LEN) {
92
+ return collapsed;
93
+ }
94
+ return `${collapsed.slice(0, MAX_SESSION_TITLE_LEN - 1)}…`;
95
+ }
96
+ async function withTimeout(promise, timeoutMs) {
97
+ // Model streams are not abortable here; on timeout the caller moves on and
98
+ // the dangling request is left to settle. The extra catch keeps a late
99
+ // rejection from surfacing as an unhandled rejection.
100
+ promise.catch(() => { });
101
+ let timer;
102
+ const timeout = new Promise((resolve) => {
103
+ timer = setTimeout(() => resolve(null), timeoutMs);
104
+ timer.unref?.();
105
+ });
106
+ try {
107
+ return await Promise.race([promise, timeout]);
108
+ }
109
+ finally {
110
+ clearTimeout(timer);
111
+ }
112
+ }
113
+ //# sourceMappingURL=generate-title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-title.js","sourceRoot":"","sources":["../../../src/core/sessions/generate-title.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { AfterInvocationEvent, BeforeInvocationEvent, Message, contentBlockFromData, } from "@strands-agents/sdk";
2
- import { EXIT_REQUESTED_STATE_KEY } from "../state/exit-request.js";
3
2
  const DEFAULT_SESSION_ID = "default-session";
4
3
  const DEFAULT_APP_STATE_KEY = "sessionId";
5
4
  const DEFAULT_SCOPE_ID = "agent";
@@ -102,7 +101,6 @@ function sanitize(value) {
102
101
  function takeSnapshot(agent) {
103
102
  const state = agent.appState.getAll() ?? {};
104
103
  const persistedState = { ...state };
105
- delete persistedState[EXIT_REQUESTED_STATE_KEY];
106
104
  const data = {
107
105
  messages: agent.messages.map((message) => message.toJSON()),
108
106
  state: persistedState,
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-session-manager.js","sourceRoot":"","sources":["../../../src/core/sessions/lazy-session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lazy-session-manager.js","sourceRoot":"","sources":["../../../src/core/sessions/lazy-session-manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { readdir, readFile, stat } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
+ import { TITLE_STATE_KEY } from "../state/session-title.js";
3
4
  import { sessionsPath } from "../utils/paths.js";
4
5
  const SNAPSHOT_FILE = "snapshot_latest.json";
5
6
  const SKIPPED_DIRS = new Set(["acp", "offloaded-content"]);
@@ -51,7 +52,11 @@ async function readSessionSummary(root, sessionId) {
51
52
  ]);
52
53
  const parsed = JSON.parse(raw);
53
54
  const messages = asMessages(parsed.data?.messages);
54
- const title = deriveSessionTitle(messages) ?? "Untitled session";
55
+ // Prefer the AI-generated title persisted in the snapshot's state (see
56
+ // cli-session-title.ts); fall back to the first user message's first line.
57
+ const title = snapshotStateTitle(parsed.data?.state) ??
58
+ deriveSessionTitle(messages) ??
59
+ "Untitled session";
55
60
  const updatedAtDate = deriveUpdatedAt(fileStat.mtime, parsed.createdAt);
56
61
  return {
57
62
  sessionId,
@@ -65,6 +70,13 @@ async function readSessionSummary(root, sessionId) {
65
70
  return null;
66
71
  }
67
72
  }
73
+ function snapshotStateTitle(state) {
74
+ if (!state || typeof state !== "object" || Array.isArray(state)) {
75
+ return null;
76
+ }
77
+ const value = state[TITLE_STATE_KEY];
78
+ return typeof value === "string" && value.trim().length > 0 ? value : null;
79
+ }
68
80
  function asMessages(value) {
69
81
  if (!Array.isArray(value)) {
70
82
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"list-cli-sessions.js","sourceRoot":"","sources":["../../../src/core/sessions/list-cli-sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-cli-sessions.js","sourceRoot":"","sources":["../../../src/core/sessions/list-cli-sessions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: hooman-channels
3
- description: Add and configure Hooman channel MCP servers for cron, Slack, Telegram, WhatsApp, and Jira. Use when the user asks to connect event-driven channels, schedulers, messaging apps, or Jira webhooks to a Hooman agent or daemon.
3
+ description: Add and configure Hooman channel MCP servers for cron, Slack, Telegram, WhatsApp, and Jira in ~/.hooman/mcp.json. Use when the user asks for scheduled or recurring prompts, cron jobs, messaging-app or chatbot integration, inbound webhooks, daemon automation, or connecting any event-driven channel to a Hooman agent or daemon. For ordinary (non-channel) MCP server edits use hooman-mcp.
4
4
  ---
5
5
 
6
6
  # Hooman Channels
@@ -9,18 +9,19 @@ Use this skill when the user asks to add channel-driven MCP integrations to Hoom
9
9
 
10
10
  ## Source Of Truth
11
11
 
12
- - MCP servers live in `~/.hooman/mcp.json` under top-level `mcpServers`.
12
+ - MCP servers live in `~/.hooman/mcp.json` under top-level `mcpServers` (minimal shape: `{"mcpServers": {}}`).
13
13
  - Restart the running Hooman session or daemon after changing `mcp.json`.
14
- - Run the long-lived listener with `hooman daemon --channels`.
15
- - Use `hooman daemon --channels --yolo` only when the user explicitly accepts automatic tool approval risk.
14
+ - Run the long-lived listener with `hooman daemon --channels`. Use `--yolo` only when the user explicitly accepts automatic tool approval risk.
16
15
 
17
- Minimal `mcp.json` shape:
16
+ ## Reference File
18
17
 
19
- ```json
20
- {
21
- "mcpServers": {}
22
- }
23
- ```
18
+ Read `channels.md` (next to this SKILL.md) for the exact `mcpServers` JSON entry, requirements, configure steps, allowlists, metadata shape, and webhook/credential details of each channel before adding or troubleshooting it. Supported channels and packages:
19
+
20
+ - `cron` — `cronmcp` (scheduler)
21
+ - `slack` — `slackxmcp`
22
+ - `telegram` — `tgfmcp`
23
+ - `whatsapp` — `wappmcp`
24
+ - `jira` — `jiraxmcp` (webhooks; credentials via server `env`)
24
25
 
25
26
  ## Operating Rules
26
27
 
@@ -33,144 +34,6 @@ Minimal `mcp.json` shape:
33
34
  7. For Slack, Telegram, and WhatsApp, run each package's `configure` command first when local credentials or allowlists are not already configured.
34
35
  8. For Jira, place credentials in the server `env` map or ensure the daemon's shell environment provides them.
35
36
 
36
- ## Common Channel Server Entries
37
-
38
- Add any requested entries under `mcpServers`.
39
-
40
- Cron scheduler:
41
-
42
- ```json
43
- {
44
- "cron": {
45
- "type": "stdio",
46
- "command": "npx",
47
- "args": ["-y", "cronmcp", "mcp", "--channels"]
48
- }
49
- }
50
- ```
51
-
52
- Slack:
53
-
54
- ```json
55
- {
56
- "slack": {
57
- "type": "stdio",
58
- "command": "npx",
59
- "args": ["-y", "slackxmcp", "mcp", "--channels"]
60
- }
61
- }
62
- ```
63
-
64
- Telegram:
65
-
66
- ```json
67
- {
68
- "telegram": {
69
- "type": "stdio",
70
- "command": "npx",
71
- "args": ["-y", "tgfmcp", "mcp", "--channels"]
72
- }
73
- }
74
- ```
75
-
76
- WhatsApp:
77
-
78
- ```json
79
- {
80
- "whatsapp": {
81
- "type": "stdio",
82
- "command": "npx",
83
- "args": ["-y", "wappmcp", "mcp", "--channels"]
84
- }
85
- }
86
- ```
87
-
88
- Jira:
89
-
90
- ```json
91
- {
92
- "jira": {
93
- "type": "stdio",
94
- "command": "npx",
95
- "args": ["-y", "jiraxmcp", "mcp", "--channels"],
96
- "env": {
97
- "JIRA_HOST": "https://your-domain.atlassian.net",
98
- "JIRA_EMAIL": "you@example.com",
99
- "JIRA_API_TOKEN": "...",
100
- "JIRA_WEBHOOK_HOST": "127.0.0.1",
101
- "JIRA_WEBHOOK_PORT": "6543",
102
- "JIRA_WEBHOOK_SECRET": "..."
103
- }
104
- }
105
- }
106
- ```
107
-
108
- For Jira, either use `JIRA_EMAIL` plus `JIRA_API_TOKEN`, or use `JIRA_ACCESS_TOKEN` instead. `JIRA_WEBHOOK_SECRET` is optional; include it when Jira admin webhooks are configured with a secret.
109
-
110
- ## Setup By Channel
111
-
112
- ### Cron
113
-
114
- - Requirements: Node.js `24+`.
115
- - Start package: `npx cronmcp mcp --channels`.
116
- - Tools include `cron_list_jobs`, `cron_add_job`, `cron_update_job`, and `cron_remove_job`.
117
- - Schedules are local-time 5-field cron expressions: `minute hour day-of-month month day-of-week`.
118
- - Local state is stored under `~/.cronmcp/`; jobs are JSONL records in `~/.cronmcp/crontab`.
119
- - Limits and behavior: at most 50 jobs, next run must be within one year, recurring jobs auto-expire after 7 days, `once: true` jobs are removed after the first successful tick.
120
- - Channel metadata: `meta.source` is `cron`, `meta.user` is `scheduler`, `meta.session` is the cron job ID, and `meta.thread` is omitted.
121
-
122
- Example scheduled prompt request after the server is connected:
123
-
124
- ```text
125
- Use cron_add_job with schedule "*/15 * * * *" and prompt "Check failed builds and report anything urgent".
126
- ```
127
-
128
- ### Slack
129
-
130
- - Requirements: Node.js `24+` and a Slack app with Socket Mode enabled.
131
- - Configure first with `npx slackxmcp configure`; it writes `~/.slackxmcp/config.json`.
132
- - The configure UI manages app token, bot token, user token, allowed users, and allowed channels.
133
- - Minimum Slack app setup: Socket Mode app token with `connections:write`; token scopes for the surfaces used, commonly `channels:read`, `groups:read`, `im:read`, `mpim:read`, history scopes for those surfaces, `chat:write`, `reactions:write`, and `users:read`.
134
- - Add event subscriptions for needed message surfaces, such as `message.channels`, `message.groups`, `message.im`, and `message.mpim`.
135
- - `slack_search_messages` usually requires a user token with `search:read`.
136
- - For permission prompts in Slack, enable Slack app Interactivity so Block Kit button actions are delivered over Socket Mode.
137
- - Channel events obey configured allowlists. If no allowed users or channels are configured, all inbound events are emitted.
138
- - Channel metadata: `meta.source` is `slack`, `meta.user` is the sender user ID, `meta.session` is the conversation ID, and `meta.thread` is the thread timestamp or message timestamp.
139
-
140
- ### Telegram
141
-
142
- - Requirements: Node.js `24+` and a Telegram bot token.
143
- - Configure first with `npx tgfmcp configure`; it writes `~/.tgfmcp/config.json`.
144
- - The configure UI manages bot token, allowed users, and allowed chats.
145
- - To enroll users or chats, use the configure UI's generated short code and send it from the target Telegram user or chat.
146
- - Telegram bots can only interact with chats where the bot has been added, contacted, or otherwise permitted.
147
- - Incoming media is downloaded under `~/.tgfmcp/attachments/` and included as local attachment paths.
148
- - Channel events obey configured allowlists. If no allowed users or chats are configured, all inbound events are emitted.
149
- - Channel metadata: `meta.source` is `telegram`, `meta.user` is the sender identity seed, `meta.session` is the chat identity seed, and `meta.thread` is the Telegram message ID.
150
- - Permission prompts are posted back into the originating chat with inline approval buttons.
151
-
152
- ### WhatsApp
153
-
154
- - Requirements: Node.js `24+` and a local Chrome or Chromium installation that Puppeteer can launch.
155
- - If browser auto-detection fails, set `WAPPMCP_BROWSER_PATH` or `PUPPETEER_EXECUTABLE_PATH`.
156
- - Configure first with `npx wappmcp configure`; it writes `~/.wappmcp/config.json`.
157
- - First login requires scanning a WhatsApp Web QR code. Session data lives under `~/.wappmcp/profile`.
158
- - The configure UI manages connect/disconnect, allowed users, and allowed chats.
159
- - Incoming media and quoted-parent media are downloaded under `~/.wappmcp/attachments/`.
160
- - Channel events obey configured allowlists. If no allowed users or chats are configured, all inbound events are emitted.
161
- - Channel metadata: `meta.source` is `whatsapp`, `meta.user` is the sender identity seed, `meta.session` is the chat identity seed, and `meta.thread` is the WhatsApp message ID.
162
- - Permission prompts are posted back into the originating WhatsApp chat; supported replies are `yes`, `always`, and `no`.
163
-
164
- ### Jira
165
-
166
- - Requirements: Node.js `24+`, Jira Cloud `JIRA_HOST`, and either `JIRA_EMAIL` plus `JIRA_API_TOKEN` or `JIRA_ACCESS_TOKEN`.
167
- - Start package: `npx jiraxmcp mcp --channels`.
168
- - For webhook channels, configure Jira admin webhooks to call `http://your-host:6543/webhook` by default.
169
- - `JIRA_WEBHOOK_PORT` overrides `6543`; `JIRA_WEBHOOK_HOST` defaults to `127.0.0.1`. Use `0.0.0.0` only when the listener must accept traffic from another machine.
170
- - If Jira webhooks use a secret, set `JIRA_WEBHOOK_SECRET`; incoming `X-Hub-Signature` headers are verified before events are emitted.
171
- - Local data is stored under `~/.jiraxmcp/`; downloaded attachments are saved under `~/.jiraxmcp/attachments/`.
172
- - Channel metadata: `meta.source` is `jira`, `meta.user` is the best available Jira actor ID, `meta.session` is usually the issue key, and `meta.thread` is omitted.
173
-
174
37
  ## Verification
175
38
 
176
39
  After setup:
@@ -0,0 +1,117 @@
1
+ # Channel Setup Reference
2
+
3
+ Per-channel `mcp.json` entries, requirements, and setup details. Add requested entries under top-level `mcpServers`.
4
+
5
+ ## Cron
6
+
7
+ ```json
8
+ {
9
+ "cron": {
10
+ "type": "stdio",
11
+ "command": "npx",
12
+ "args": ["-y", "cronmcp", "mcp", "--channels"]
13
+ }
14
+ }
15
+ ```
16
+
17
+ - Requirements: Node.js `24+`.
18
+ - Tools include `cron_list_jobs`, `cron_add_job`, `cron_update_job`, and `cron_remove_job`.
19
+ - Schedules are local-time 5-field cron expressions: `minute hour day-of-month month day-of-week`.
20
+ - Local state is stored under `~/.cronmcp/`; jobs are JSONL records in `~/.cronmcp/crontab`.
21
+ - Limits and behavior: at most 50 jobs, next run must be within one year, recurring jobs auto-expire after 7 days, `once: true` jobs are removed after the first successful tick.
22
+ - Channel metadata: `meta.source` is `cron`, `meta.user` is `scheduler`, `meta.session` is the cron job ID, and `meta.thread` is omitted.
23
+
24
+ Example scheduled prompt request after the server is connected:
25
+
26
+ ```text
27
+ Use cron_add_job with schedule "*/15 * * * *" and prompt "Check failed builds and report anything urgent".
28
+ ```
29
+
30
+ ## Slack
31
+
32
+ ```json
33
+ {
34
+ "slack": {
35
+ "type": "stdio",
36
+ "command": "npx",
37
+ "args": ["-y", "slackxmcp", "mcp", "--channels"]
38
+ }
39
+ }
40
+ ```
41
+
42
+ - Requirements: Node.js `24+` and a Slack app with Socket Mode enabled.
43
+ - Configure first with `npx slackxmcp configure`; it writes `~/.slackxmcp/config.json`. The configure UI manages app token, bot token, user token, allowed users, and allowed channels.
44
+ - Minimum Slack app setup: Socket Mode app token with `connections:write`; token scopes for the surfaces used, commonly `channels:read`, `groups:read`, `im:read`, `mpim:read`, history scopes for those surfaces, `chat:write`, `reactions:write`, and `users:read`.
45
+ - Add event subscriptions for needed message surfaces, such as `message.channels`, `message.groups`, `message.im`, and `message.mpim`.
46
+ - `slack_search_messages` usually requires a user token with `search:read`.
47
+ - For permission prompts in Slack, enable Slack app Interactivity so Block Kit button actions are delivered over Socket Mode.
48
+ - Channel events obey configured allowlists. If no allowed users or channels are configured, all inbound events are emitted.
49
+ - Channel metadata: `meta.source` is `slack`, `meta.user` is the sender user ID, `meta.session` is the conversation ID, and `meta.thread` is the thread timestamp or message timestamp.
50
+
51
+ ## Telegram
52
+
53
+ ```json
54
+ {
55
+ "telegram": {
56
+ "type": "stdio",
57
+ "command": "npx",
58
+ "args": ["-y", "tgfmcp", "mcp", "--channels"]
59
+ }
60
+ }
61
+ ```
62
+
63
+ - Requirements: Node.js `24+` and a Telegram bot token.
64
+ - Configure first with `npx tgfmcp configure`; it writes `~/.tgfmcp/config.json`. The configure UI manages bot token, allowed users, and allowed chats.
65
+ - To enroll users or chats, use the configure UI's generated short code and send it from the target Telegram user or chat.
66
+ - Telegram bots can only interact with chats where the bot has been added, contacted, or otherwise permitted.
67
+ - Incoming media is downloaded under `~/.tgfmcp/attachments/` and included as local attachment paths.
68
+ - Channel events obey configured allowlists. If no allowed users or chats are configured, all inbound events are emitted.
69
+ - Channel metadata: `meta.source` is `telegram`, `meta.user` is the sender identity seed, `meta.session` is the chat identity seed, and `meta.thread` is the Telegram message ID.
70
+ - Permission prompts are posted back into the originating chat with inline approval buttons.
71
+
72
+ ## WhatsApp
73
+
74
+ ```json
75
+ {
76
+ "whatsapp": {
77
+ "type": "stdio",
78
+ "command": "npx",
79
+ "args": ["-y", "wappmcp", "mcp", "--channels"]
80
+ }
81
+ }
82
+ ```
83
+
84
+ - Requirements: Node.js `24+` and a local Chrome or Chromium installation that Puppeteer can launch. If browser auto-detection fails, set `WAPPMCP_BROWSER_PATH` or `PUPPETEER_EXECUTABLE_PATH`.
85
+ - Configure first with `npx wappmcp configure`; it writes `~/.wappmcp/config.json`. The configure UI manages connect/disconnect, allowed users, and allowed chats.
86
+ - First login requires scanning a WhatsApp Web QR code. Session data lives under `~/.wappmcp/profile`.
87
+ - Incoming media and quoted-parent media are downloaded under `~/.wappmcp/attachments/`.
88
+ - Channel events obey configured allowlists. If no allowed users or chats are configured, all inbound events are emitted.
89
+ - Channel metadata: `meta.source` is `whatsapp`, `meta.user` is the sender identity seed, `meta.session` is the chat identity seed, and `meta.thread` is the WhatsApp message ID.
90
+ - Permission prompts are posted back into the originating WhatsApp chat; supported replies are `yes`, `always`, and `no`.
91
+
92
+ ## Jira
93
+
94
+ ```json
95
+ {
96
+ "jira": {
97
+ "type": "stdio",
98
+ "command": "npx",
99
+ "args": ["-y", "jiraxmcp", "mcp", "--channels"],
100
+ "env": {
101
+ "JIRA_HOST": "https://your-domain.atlassian.net",
102
+ "JIRA_EMAIL": "you@example.com",
103
+ "JIRA_API_TOKEN": "...",
104
+ "JIRA_WEBHOOK_HOST": "127.0.0.1",
105
+ "JIRA_WEBHOOK_PORT": "6543",
106
+ "JIRA_WEBHOOK_SECRET": "..."
107
+ }
108
+ }
109
+ }
110
+ ```
111
+
112
+ - Requirements: Node.js `24+`, Jira Cloud `JIRA_HOST`, and either `JIRA_EMAIL` plus `JIRA_API_TOKEN` or `JIRA_ACCESS_TOKEN`.
113
+ - For webhook channels, configure Jira admin webhooks to call `http://your-host:6543/webhook` by default.
114
+ - `JIRA_WEBHOOK_PORT` overrides `6543`; `JIRA_WEBHOOK_HOST` defaults to `127.0.0.1`. Use `0.0.0.0` only when the listener must accept traffic from another machine.
115
+ - If Jira webhooks use a secret, set `JIRA_WEBHOOK_SECRET`; incoming `X-Hub-Signature` headers are verified before events are emitted. Otherwise it is optional.
116
+ - Local data is stored under `~/.jiraxmcp/`; downloaded attachments are saved under `~/.jiraxmcp/attachments/`.
117
+ - Channel metadata: `meta.source` is `jira`, `meta.user` is the best available Jira actor ID, `meta.session` is usually the issue key, and `meta.thread` is omitted.