hammoc 1.4.0 → 1.5.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 (252) hide show
  1. package/README.md +422 -405
  2. package/bin/hammoc.js +0 -6
  3. package/package.json +100 -94
  4. package/packages/client/dist/assets/agentExampleHighlight-BgwTm15v.js +1 -0
  5. package/packages/client/dist/assets/commandTokenHighlight-BljHwnrK.js +1 -0
  6. package/packages/client/dist/assets/index-CjyjnXB8.css +32 -0
  7. package/packages/client/dist/assets/index-D3LxqW3f.js +2 -0
  8. package/packages/client/dist/assets/index-NqJdhlek.js +1498 -0
  9. package/packages/client/dist/assets/snippetTokenHighlight-DWsaQXX0.js +1 -0
  10. package/packages/client/dist/index.html +2 -2
  11. package/packages/client/dist/sw.js +1 -1
  12. package/packages/server/dist/app.d.ts.map +1 -1
  13. package/packages/server/dist/app.js +13 -21
  14. package/packages/server/dist/app.js.map +1 -1
  15. package/packages/server/dist/controllers/claudeMdController.d.ts +26 -0
  16. package/packages/server/dist/controllers/claudeMdController.d.ts.map +1 -0
  17. package/packages/server/dist/controllers/claudeMdController.js +158 -0
  18. package/packages/server/dist/controllers/claudeMdController.js.map +1 -0
  19. package/packages/server/dist/controllers/harnessAgentController.d.ts +28 -0
  20. package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
  21. package/packages/server/dist/controllers/harnessAgentController.js +339 -0
  22. package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
  23. package/packages/server/dist/controllers/harnessCommandController.d.ts +28 -0
  24. package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
  25. package/packages/server/dist/controllers/harnessCommandController.js +382 -0
  26. package/packages/server/dist/controllers/harnessCommandController.js.map +1 -0
  27. package/packages/server/dist/controllers/harnessController.d.ts +21 -0
  28. package/packages/server/dist/controllers/harnessController.d.ts.map +1 -0
  29. package/packages/server/dist/controllers/harnessController.js +176 -0
  30. package/packages/server/dist/controllers/harnessController.js.map +1 -0
  31. package/packages/server/dist/controllers/harnessHookController.d.ts +32 -0
  32. package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -0
  33. package/packages/server/dist/controllers/harnessHookController.js +363 -0
  34. package/packages/server/dist/controllers/harnessHookController.js.map +1 -0
  35. package/packages/server/dist/controllers/harnessLintController.d.ts +18 -0
  36. package/packages/server/dist/controllers/harnessLintController.d.ts.map +1 -0
  37. package/packages/server/dist/controllers/harnessLintController.js +72 -0
  38. package/packages/server/dist/controllers/harnessLintController.js.map +1 -0
  39. package/packages/server/dist/controllers/harnessMcpController.d.ts +28 -0
  40. package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -0
  41. package/packages/server/dist/controllers/harnessMcpController.js +310 -0
  42. package/packages/server/dist/controllers/harnessMcpController.js.map +1 -0
  43. package/packages/server/dist/controllers/harnessPluginController.d.ts +17 -0
  44. package/packages/server/dist/controllers/harnessPluginController.d.ts.map +1 -0
  45. package/packages/server/dist/controllers/harnessPluginController.js +115 -0
  46. package/packages/server/dist/controllers/harnessPluginController.js.map +1 -0
  47. package/packages/server/dist/controllers/harnessShareScopeController.d.ts +15 -0
  48. package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
  49. package/packages/server/dist/controllers/harnessShareScopeController.js +73 -0
  50. package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -0
  51. package/packages/server/dist/controllers/harnessSkillController.d.ts +32 -0
  52. package/packages/server/dist/controllers/harnessSkillController.d.ts.map +1 -0
  53. package/packages/server/dist/controllers/harnessSkillController.js +453 -0
  54. package/packages/server/dist/controllers/harnessSkillController.js.map +1 -0
  55. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  56. package/packages/server/dist/controllers/projectController.js +11 -0
  57. package/packages/server/dist/controllers/projectController.js.map +1 -1
  58. package/packages/server/dist/controllers/snippetController.d.ts +35 -0
  59. package/packages/server/dist/controllers/snippetController.d.ts.map +1 -0
  60. package/packages/server/dist/controllers/snippetController.js +294 -0
  61. package/packages/server/dist/controllers/snippetController.js.map +1 -0
  62. package/packages/server/dist/handlers/websocket.d.ts +15 -0
  63. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  64. package/packages/server/dist/handlers/websocket.js +79 -0
  65. package/packages/server/dist/handlers/websocket.js.map +1 -1
  66. package/packages/server/dist/index.js +5 -0
  67. package/packages/server/dist/index.js.map +1 -1
  68. package/packages/server/dist/locales/en/server.json +37 -4
  69. package/packages/server/dist/locales/es/server.json +0 -4
  70. package/packages/server/dist/locales/ja/server.json +0 -4
  71. package/packages/server/dist/locales/ko/server.json +0 -4
  72. package/packages/server/dist/locales/pt/server.json +0 -4
  73. package/packages/server/dist/locales/zh-CN/server.json +0 -4
  74. package/packages/server/dist/routes/harness.d.ts +8 -0
  75. package/packages/server/dist/routes/harness.d.ts.map +1 -0
  76. package/packages/server/dist/routes/harness.js +92 -0
  77. package/packages/server/dist/routes/harness.js.map +1 -0
  78. package/packages/server/dist/routes/projects.d.ts.map +1 -1
  79. package/packages/server/dist/routes/projects.js +5 -60
  80. package/packages/server/dist/routes/projects.js.map +1 -1
  81. package/packages/server/dist/routes/snippets.d.ts +14 -0
  82. package/packages/server/dist/routes/snippets.d.ts.map +1 -0
  83. package/packages/server/dist/routes/snippets.js +27 -0
  84. package/packages/server/dist/routes/snippets.js.map +1 -0
  85. package/packages/server/dist/services/bmadStatusService.d.ts +6 -2
  86. package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
  87. package/packages/server/dist/services/bmadStatusService.js +88 -32
  88. package/packages/server/dist/services/bmadStatusService.js.map +1 -1
  89. package/packages/server/dist/services/chatService.d.ts +3 -0
  90. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  91. package/packages/server/dist/services/chatService.js +27 -6
  92. package/packages/server/dist/services/chatService.js.map +1 -1
  93. package/packages/server/dist/services/claudeMdService.d.ts +48 -0
  94. package/packages/server/dist/services/claudeMdService.d.ts.map +1 -0
  95. package/packages/server/dist/services/claudeMdService.js +240 -0
  96. package/packages/server/dist/services/claudeMdService.js.map +1 -0
  97. package/packages/server/dist/services/commandService.d.ts +10 -0
  98. package/packages/server/dist/services/commandService.d.ts.map +1 -1
  99. package/packages/server/dist/services/commandService.js +129 -4
  100. package/packages/server/dist/services/commandService.js.map +1 -1
  101. package/packages/server/dist/services/fileWatcherService.d.ts +24 -0
  102. package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
  103. package/packages/server/dist/services/fileWatcherService.js +192 -1
  104. package/packages/server/dist/services/fileWatcherService.js.map +1 -1
  105. package/packages/server/dist/services/harnessAgentService.d.ts +79 -0
  106. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
  107. package/packages/server/dist/services/harnessAgentService.js +933 -0
  108. package/packages/server/dist/services/harnessAgentService.js.map +1 -0
  109. package/packages/server/dist/services/harnessCommandService.d.ts +60 -0
  110. package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
  111. package/packages/server/dist/services/harnessCommandService.js +853 -0
  112. package/packages/server/dist/services/harnessCommandService.js.map +1 -0
  113. package/packages/server/dist/services/harnessHookService.d.ts +55 -0
  114. package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
  115. package/packages/server/dist/services/harnessHookService.js +1060 -0
  116. package/packages/server/dist/services/harnessHookService.js.map +1 -0
  117. package/packages/server/dist/services/harnessLintService.d.ts +49 -0
  118. package/packages/server/dist/services/harnessLintService.d.ts.map +1 -0
  119. package/packages/server/dist/services/harnessLintService.js +628 -0
  120. package/packages/server/dist/services/harnessLintService.js.map +1 -0
  121. package/packages/server/dist/services/harnessMcpService.d.ts +77 -0
  122. package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
  123. package/packages/server/dist/services/harnessMcpService.js +814 -0
  124. package/packages/server/dist/services/harnessMcpService.js.map +1 -0
  125. package/packages/server/dist/services/harnessPluginService.d.ts +66 -0
  126. package/packages/server/dist/services/harnessPluginService.d.ts.map +1 -0
  127. package/packages/server/dist/services/harnessPluginService.js +559 -0
  128. package/packages/server/dist/services/harnessPluginService.js.map +1 -0
  129. package/packages/server/dist/services/harnessService.d.ts +40 -0
  130. package/packages/server/dist/services/harnessService.d.ts.map +1 -0
  131. package/packages/server/dist/services/harnessService.js +222 -0
  132. package/packages/server/dist/services/harnessService.js.map +1 -0
  133. package/packages/server/dist/services/harnessShareScopeService.d.ts +31 -0
  134. package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
  135. package/packages/server/dist/services/harnessShareScopeService.js +93 -0
  136. package/packages/server/dist/services/harnessShareScopeService.js.map +1 -0
  137. package/packages/server/dist/services/harnessSkillService.d.ts +70 -0
  138. package/packages/server/dist/services/harnessSkillService.d.ts.map +1 -0
  139. package/packages/server/dist/services/harnessSkillService.js +636 -0
  140. package/packages/server/dist/services/harnessSkillService.js.map +1 -0
  141. package/packages/server/dist/services/issueService.d.ts.map +1 -1
  142. package/packages/server/dist/services/issueService.js +2 -1
  143. package/packages/server/dist/services/issueService.js.map +1 -1
  144. package/packages/server/dist/services/manualSyncService.d.ts +19 -0
  145. package/packages/server/dist/services/manualSyncService.d.ts.map +1 -0
  146. package/packages/server/dist/services/manualSyncService.js +110 -0
  147. package/packages/server/dist/services/manualSyncService.js.map +1 -0
  148. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  149. package/packages/server/dist/services/queueService.js +45 -2
  150. package/packages/server/dist/services/queueService.js.map +1 -1
  151. package/packages/server/dist/services/snippetService.d.ts +54 -0
  152. package/packages/server/dist/services/snippetService.d.ts.map +1 -0
  153. package/packages/server/dist/services/snippetService.js +371 -0
  154. package/packages/server/dist/services/snippetService.js.map +1 -0
  155. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts +46 -0
  156. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts.map +1 -0
  157. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js +125 -0
  158. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js.map +1 -0
  159. package/packages/server/dist/snippets/split-commit +9 -0
  160. package/packages/server/dist/utils/applySecretsPolicy.d.ts +53 -0
  161. package/packages/server/dist/utils/applySecretsPolicy.d.ts.map +1 -0
  162. package/packages/server/dist/utils/applySecretsPolicy.js +204 -0
  163. package/packages/server/dist/utils/applySecretsPolicy.js.map +1 -0
  164. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts +40 -0
  165. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts.map +1 -0
  166. package/packages/server/dist/utils/assertNoSecretOnShared.js +47 -0
  167. package/packages/server/dist/utils/assertNoSecretOnShared.js.map +1 -0
  168. package/packages/server/dist/utils/gitignoreFilter.d.ts +23 -0
  169. package/packages/server/dist/utils/gitignoreFilter.d.ts.map +1 -0
  170. package/packages/server/dist/utils/gitignoreFilter.js +42 -0
  171. package/packages/server/dist/utils/gitignoreFilter.js.map +1 -0
  172. package/packages/server/dist/utils/harnessBundleSchema.d.ts +105 -0
  173. package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
  174. package/packages/server/dist/utils/harnessBundleSchema.js +79 -0
  175. package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
  176. package/packages/server/dist/utils/harnessPaths.d.ts +34 -0
  177. package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
  178. package/packages/server/dist/utils/harnessPaths.js +124 -0
  179. package/packages/server/dist/utils/harnessPaths.js.map +1 -0
  180. package/packages/server/dist/utils/secretHeuristic.d.ts +72 -0
  181. package/packages/server/dist/utils/secretHeuristic.d.ts.map +1 -0
  182. package/packages/server/dist/utils/secretHeuristic.js +163 -0
  183. package/packages/server/dist/utils/secretHeuristic.js.map +1 -0
  184. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts +41 -0
  185. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts.map +1 -0
  186. package/packages/server/dist/utils/secretPlaceholderNamer.js +81 -0
  187. package/packages/server/dist/utils/secretPlaceholderNamer.js.map +1 -0
  188. package/packages/server/dist/utils/serverPathResolver.d.ts +29 -0
  189. package/packages/server/dist/utils/serverPathResolver.d.ts.map +1 -0
  190. package/packages/server/dist/utils/serverPathResolver.js +59 -0
  191. package/packages/server/dist/utils/serverPathResolver.js.map +1 -0
  192. package/packages/server/dist/utils/snippetPaths.d.ts +61 -0
  193. package/packages/server/dist/utils/snippetPaths.d.ts.map +1 -0
  194. package/packages/server/dist/utils/snippetPaths.js +123 -0
  195. package/packages/server/dist/utils/snippetPaths.js.map +1 -0
  196. package/packages/server/dist/utils/structuredEditor.d.ts +34 -0
  197. package/packages/server/dist/utils/structuredEditor.d.ts.map +1 -0
  198. package/packages/server/dist/utils/structuredEditor.js +111 -0
  199. package/packages/server/dist/utils/structuredEditor.js.map +1 -0
  200. package/packages/server/package.json +4 -1
  201. package/packages/server/resources/internals/INDEX.md +23 -0
  202. package/packages/server/resources/internals/harness-files.md +63 -0
  203. package/packages/server/resources/internals/image-storage.md +43 -0
  204. package/packages/server/resources/manual/01-getting-started.md +104 -0
  205. package/packages/server/resources/manual/02-chat.md +285 -0
  206. package/packages/server/resources/manual/03-sessions.md +48 -0
  207. package/packages/server/resources/manual/04-slash-commands-favorites.md +152 -0
  208. package/packages/server/resources/manual/05-projects.md +74 -0
  209. package/packages/server/resources/manual/06-file-explorer-editor.md +90 -0
  210. package/packages/server/resources/manual/07-git.md +94 -0
  211. package/packages/server/resources/manual/08-terminal.md +59 -0
  212. package/packages/server/resources/manual/09-queue-runner.md +262 -0
  213. package/packages/server/resources/manual/10-project-board.md +193 -0
  214. package/packages/server/resources/manual/11-bmad-method-integration.md +128 -0
  215. package/packages/server/resources/manual/12-harness-workbench.md +175 -0
  216. package/packages/server/resources/manual/13-settings.md +241 -0
  217. package/packages/server/resources/manual/14-keyboard-shortcuts.md +68 -0
  218. package/packages/server/resources/manual/15-environment-variables.md +28 -0
  219. package/packages/server/resources/manual/16-troubleshooting.md +110 -0
  220. package/packages/server/resources/manual/INDEX.md +60 -0
  221. package/packages/shared/dist/index.d.ts +3 -0
  222. package/packages/shared/dist/index.d.ts.map +1 -1
  223. package/packages/shared/dist/index.js +6 -0
  224. package/packages/shared/dist/index.js.map +1 -1
  225. package/packages/shared/dist/types/command.d.ts +3 -3
  226. package/packages/shared/dist/types/command.d.ts.map +1 -1
  227. package/packages/shared/dist/types/harness.d.ts +1211 -0
  228. package/packages/shared/dist/types/harness.d.ts.map +1 -0
  229. package/packages/shared/dist/types/harness.js +107 -0
  230. package/packages/shared/dist/types/harness.js.map +1 -0
  231. package/packages/shared/dist/types/harnessBundle.d.ts +170 -0
  232. package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -0
  233. package/packages/shared/dist/types/harnessBundle.js +18 -0
  234. package/packages/shared/dist/types/harnessBundle.js.map +1 -0
  235. package/packages/shared/dist/types/preferences.d.ts +2 -0
  236. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  237. package/packages/shared/dist/types/preferences.js.map +1 -1
  238. package/packages/shared/dist/types/queue.d.ts +9 -0
  239. package/packages/shared/dist/types/queue.d.ts.map +1 -1
  240. package/packages/shared/dist/types/websocket.d.ts +10 -0
  241. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  242. package/packages/shared/dist/utils/markdownSections.d.ts +50 -0
  243. package/packages/shared/dist/utils/markdownSections.d.ts.map +1 -0
  244. package/packages/shared/dist/utils/markdownSections.js +111 -0
  245. package/packages/shared/dist/utils/markdownSections.js.map +1 -0
  246. package/packages/shared/dist/utils/queueParser.d.ts.map +1 -1
  247. package/packages/shared/dist/utils/queueParser.js +104 -0
  248. package/packages/shared/dist/utils/queueParser.js.map +1 -1
  249. package/scripts/build-manual-shards.mjs +100 -0
  250. package/packages/client/dist/assets/index-6jREnVYd.js +0 -2
  251. package/packages/client/dist/assets/index-BFF0iqyW.css +0 -32
  252. package/packages/client/dist/assets/index-BcI4y-fU.js +0 -1454
@@ -0,0 +1,128 @@
1
+ ## 11. BMAD-METHOD Integration
2
+
3
+ Hammoc provides first-class support for the [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) (Breakthrough Method for Agile AI-Driven Development).
4
+
5
+ ### 11.1 What is BMAD-METHOD?
6
+
7
+ BMAD-METHOD is an open-source framework that structures AI-driven software development. It defines:
8
+
9
+ - **Agents** — Specialized AI roles organized by workflow phase
10
+ - **Documents** — PRD, Architecture spec, Frontend spec, Stories, QA plans, and supplementary docs (brainstorming, market research, competitor analysis, project brief)
11
+ - **Workflows** — Phase-based processes from research through implementation to completion
12
+
13
+ ### 11.2 Setting Up BMad in a Project
14
+
15
+ BMad can be set up in two ways:
16
+
17
+ **During project creation:**
18
+ 1. In the **New Project** dialog, the **"Setup BMad"** checkbox is enabled by default
19
+ 2. Select the BMAD-METHOD version from the dropdown (defaults to latest)
20
+ 3. The `.bmad-core` folder is automatically created when the project is registered
21
+
22
+ **For existing projects:**
23
+ 1. Open the project card's **kebab menu** (⋮) on the project list page
24
+ 2. Click **"Setup BMad"** (only shown for non-BMad projects)
25
+ 3. Confirm the version to install
26
+ 4. The `.bmad-core` folder is created with the required files
27
+
28
+ The `.bmad-core` folder contains agents, tasks, templates, workflows, and configuration files including `core-config.yaml`.
29
+
30
+ ### 11.3 BMad Agents
31
+
32
+ Click the **Agent Button** (Users icon, in the chat bottom bar right of the model selector) to open the agent dropdown:
33
+
34
+ **Planning group:**
35
+
36
+ | Agent | Role |
37
+ |-------|------|
38
+ | **Analyst** | Brainstorming, market research, competitor analysis, project brief |
39
+ | **PM** (Product Manager) | Defines PRD with epics and stories |
40
+ | **UX Expert** | Creates frontend specifications |
41
+ | **Architect** | Designs system architecture (backend, frontend, full-stack) |
42
+
43
+ **Implementation group:**
44
+
45
+ | Agent | Role |
46
+ |-------|------|
47
+ | **SM** (Scrum Master) | Drafts stories, orchestrates development |
48
+ | **PO** (Product Owner) | Validates story drafts against PRD |
49
+ | **Dev** (Developer) | Implements features, applies QA fixes |
50
+ | **QA** | Reviews and validates implementation quality |
51
+
52
+ **Agent dropdown features:**
53
+ - **Categorized groups** — Planning, Implementation, Other (with section labels)
54
+ - **Active agent checkmark** — Blue check icon next to the currently active agent
55
+ - **Agent icon & description** — Emoji icon and hover tooltip with role description
56
+ - **Keyboard navigation** — Arrow Up/Down to move, Enter to select, Escape to close
57
+ - Selecting an agent sends the agent command (e.g., `/BMad:agents:pm`) as the first prompt in the session
58
+
59
+ ### 11.4 Project Overview Dashboard
60
+
61
+ For BMad projects, the overview page displays additional sections above the standard project overview (see §5.5):
62
+
63
+ **BMad Summary Card:**
64
+ - Overall **completion percentage** with a progress bar
65
+ - **Done/total epics** and **done/total stories** counts
66
+ - Background refresh indicator
67
+
68
+ **Next Step Recommender:**
69
+ - Detects the current **workflow phase** (Pre-PRD, Pre-Architecture, Implementation, Completed)
70
+ - Shows context-aware **action buttons** (primary/secondary) that navigate to the right agent + task command
71
+ - Quick links: New Session, Queue Runner, File Explorer
72
+ - See §11.5 for phase details
73
+
74
+ **Document Status Card:**
75
+ - Core documents: **PRD** and **Architecture** with exists/missing indicators
76
+ - Supplementary documents: Brainstorming, Market Research, Competitor Analysis, Project Brief, Frontend Spec, UI Architecture
77
+ - **"작성 필요"** (Required) badge for missing core documents; **"작성 권장"** (Recommended) for optional documents
78
+ - **Agent shortcut buttons** (→) to create missing documents with the appropriate agent
79
+ - **Sharded document support** — PRD and Architecture can be split into multiple files; expandable file tree view
80
+ - **Auxiliary documents** section — Stories and QA files with counts and expandable file trees
81
+
82
+ **Epic Progress Card:**
83
+ - Each epic shows a **color-coded progress bar** that reflects completion level
84
+ - **Done/planned** story count per epic
85
+ - Click to **expand** and see individual story statuses with color-coded badges
86
+ - Story file links to navigate directly to the story file
87
+ - Unwritten story count shown when planned > written
88
+
89
+ **Recent Issues Card** (replaces Quick Start for BMad projects):
90
+ - Last 5 issues with severity dot, title, and status badge
91
+ - Click to navigate to the project board
92
+ - Link to "View Board"
93
+
94
+ ### 11.5 Workflow Phases & Recommendations
95
+
96
+ The Next Step Recommender analyzes the project state and suggests actions based on four phases:
97
+
98
+ **Phase 1: Pre-PRD** (PRD does not exist)
99
+ - **Primary:** Create PRD → PM agent
100
+ - **Secondary:** Brainstorming, Market Research, Competitor Analysis, Project Brief → Analyst agent
101
+ - Once a Project Brief already exists, the **Brainstorming** suggestion is hidden — the recommender treats the Brief as the brainstorm output and stops nagging
102
+
103
+ **Phase 2: Pre-Architecture** (PRD exists, Architecture does not)
104
+ - **Primary:** Create Backend / Frontend / Full-stack Architecture → Architect agent
105
+ - **Secondary:** Create Frontend Spec → UX Expert agent (if not exists)
106
+
107
+ **Phase 3: Implementation** (both PRD and Architecture exist)
108
+
109
+ Recommendations follow reverse workflow order (finish what's closest to done first):
110
+
111
+ - **Priority 1:** QA Passed/Waived stories → Commit and mark Done, or re-request QA review → Dev agent
112
+ - **Priority 2:** QA Fixed stories → Re-review → QA agent
113
+ - **Priority 3:** QA Failed/Concerns stories → Apply QA fixes → Dev agent
114
+ - **Priority 4:** Ready for Review stories (no QA gate) → Request QA review → QA agent
115
+ - **Priority 5:** In Progress stories → Continue development → Dev agent
116
+ - **Priority 6:** Approved stories → Start development (Dev), or re-validate with Validate and Fix / Validate Only → PO agent
117
+ - **Priority 7:** Draft stories → Validate and Fix / Validate Only → PO agent
118
+ - **Priority 8:** Create next story → SM agent (when no actionable stories)
119
+
120
+ **Phase 4: Completed** (all planned stories are Done)
121
+ - Brainstorm new features → Analyst agent
122
+ - Add new epic → PM agent
123
+ - Add story to existing epic → SM agent
124
+
125
+ ### 11.6 Queue Templates from PRD
126
+
127
+ Queue templates automate story development in batch. For details, see §9.9 (Queue Templates).
128
+
@@ -0,0 +1,175 @@
1
+ ## 12. Harness Workbench
2
+
3
+ The **Harness Workbench** is the unified surface for managing everything Claude Code reads from the `.claude/` configuration tree — plugins, skills, MCP servers, hooks, slash commands, sub-agents, `CLAUDE.md`, and Hammoc-native `%snippets`. It lives inside each project's **Settings** tab (see §5.3) under the "Harness Workbench" group, so the workbench is always scoped to the project you're working on but can also reach the global (`~/.claude/`) versions of each item.
4
+
5
+ ### 12.1 Layout
6
+
7
+ The workbench has two stacked headers above an eight-section navigator:
8
+
9
+ - **Mode banner** — Workbench-wide; explains whether the project's `.claude/` is git-tracked or ignored (see §12.2)
10
+ - **Lint preferences button** — Top-right; opens a dialog to toggle the seven static-lint rules (see §12.12)
11
+
12
+ The section navigator is a vertical sidebar on desktop and a horizontally-scrolling pill row on mobile. Sections, in order:
13
+
14
+ 1. **Plugins** — Installed Claude Code plugins (see §12.4)
15
+ 2. **Skills** — `SKILL.md` skill bundles (see §12.5)
16
+ 3. **MCP** — MCP server entries from `.mcp.json` / `~/.claude/.mcp.json` (see §12.6)
17
+ 4. **Hooks** — Lifecycle hooks declared in `settings.json` (see §12.7)
18
+ 5. **Commands** — Slash command files (see §12.8)
19
+ 6. **Agents** — Sub-agent definitions (see §12.9)
20
+ 7. **CLAUDE.md** — Project and global instruction documents (see §12.10)
21
+ 8. **Snippets** — Hammoc `%snippet` library + Claude Code slash-command favorites (see §12.11)
22
+
23
+ When the workbench loads, every section's data is fetched in parallel and cached, so switching between sections feels instant. Each section's data also stays in sync with disk: any external change (made outside Hammoc) updates the corresponding card without a reload.
24
+
25
+ ### 12.2 Share Mode Banner
26
+
27
+ A workbench-wide banner just above the navigator tells you how the project shares its `.claude/` configuration:
28
+
29
+ - **Team-shared** (gray banner) — `.claude/` is **not** ignored by git. Files committed here (skills, hook definitions, the project `CLAUDE.md`, etc.) ship with the repo and reach every teammate.
30
+ - **Private** (amber banner) — `.claude/` (or a parent path) is excluded by `.gitignore`. Files here stay on your machine, so a teammate cloning the repo gets none of them.
31
+
32
+ The banner is derived from the project root's `.gitignore`. Edit the rules and the banner updates the next time the workbench refreshes.
33
+
34
+ > An **Export bundle** action is planned for the Private mode banner so you can ship the current harness state to a teammate as a single file. The button is intentionally hidden until the export/import flow is fully wired — until then, copy individual files by hand or via the workbench's Project ↔ Global copy actions.
35
+
36
+ ### 12.3 Share Badges
37
+
38
+ Every editable card (skill, MCP, hook, command, agent, `CLAUDE.md`, snippet) shows a small **share badge** indicating that specific file's git scope:
39
+
40
+ - **Shared** (blue) — File tracked by git; team will see your edits after a commit
41
+ - **Local** (gray) — File exists but is not tracked
42
+ - **Ignored** (amber) — `.claude/` is fully git-excluded; this file will not be committed
43
+
44
+ The badge is computed per-file so a single project can mix shared and local items.
45
+
46
+ ### 12.4 Plugins Panel
47
+
48
+ Lists every Claude Code plugin discovered under the project and global plugin roots:
49
+
50
+ - One card per plugin with name, version, and small component counts (skills, commands, agents, hooks, MCP servers it ships)
51
+ - A toggle switch enables or disables the plugin without uninstalling it
52
+ - Plugin-provided items appear (read-only) in the other workbench sections too, with a **"Plugin: <key>"** scope badge
53
+
54
+ ### 12.5 Skills Panel
55
+
56
+ Card grid for skill bundles (a `SKILL.md` plus optional supporting files):
57
+
58
+ - **Scope filter** — All / Project / Global / Plugin
59
+ - **Card front** — Name, description, scope badge, share badge, lint marker (if the skill has lint issues), and a kebab menu for copy actions
60
+ - **Open** — Click the card to open the **Skill Editor**, a modal with two modes:
61
+ - **Form mode** — Separate fields for the YAML frontmatter (Name, Description, Version) and a Markdown body with edit/preview toggle
62
+ - **Raw mode** — Edit the raw `SKILL.md` text directly when the frontmatter cannot be parsed
63
+ - **Bundle resources** — A nested tree of supporting files (references, examples, scripts, assets) with file counts. Binary files are marked read-only; files over 1 MB are truncated
64
+ - **Copy actions** — Copy a skill between Project / Global / Plugin scopes. If the destination already has a skill with the same name, a **conflict dialog** offers Overwrite / Skip / Rename
65
+ - **Auto-save** — Edits debounce-save every ~300 ms; no manual save button
66
+ - **External-change banner** — If another tool overwrites the skill while you are editing, the editor reloads with a banner explaining the change
67
+
68
+ Bundled skills (from a plugin's `skills/`) can only be opened read-only — copy them to Project or Global scope first to customize.
69
+
70
+ ### 12.6 MCP Panel
71
+
72
+ Card grid for MCP server entries (from `.mcp.json` or `~/.claude/.mcp.json`):
73
+
74
+ - **Type badges** — `stdio`, `sse`, `http`, `ws`
75
+ - **Toggle** — Enable / Disable a server. Disabling moves the entry to a backup section of the JSON file rather than deleting it, so you can re-enable later
76
+ - **Editor** — Form fields for the server type, command, arguments (one per line), URL, headers (key/value rows), and environment variables (key/value rows). A mask toggle hides secret-looking values
77
+ - **Secret detection** — Values that look like API keys are marked inline. When you copy a server between scopes, a warning dialog lists detected secrets and requires explicit acknowledgement before copying
78
+ - **Fresh-spawn banner** — After enabling/disabling or editing a server, a banner reminds you that MCP changes only take effect on your **next** message in a new chat turn. A **Start new session** button is available
79
+
80
+ ### 12.7 Hooks Panel
81
+
82
+ Hooks are grouped by lifecycle event (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification):
83
+
84
+ - **Per-event sections** — Each event shows its hook cards and an inline "+ Add" button
85
+ - **Type badges** — `command` (shell command) and `prompt` (LLM-invoking)
86
+ - **Toggle** — Enable / Disable individual hooks
87
+ - **Matcher field** — Regex pattern that filters which tool calls (or events) the hook applies to; empty matcher means "all"
88
+ - **Parallel-execution badge** — Indicates when the hook runs alongside hooks from other sources for the same event
89
+ - **Cost warning** — `prompt`-type hooks invoke the LLM each time and show a cost/latency warning banner
90
+ - **Copy actions** — Same Project ↔ Global ↔ Plugin copy matrix as skills, with a review dialog that surfaces secret-looking values and command bodies before copying
91
+
92
+ ### 12.8 Commands Panel
93
+
94
+ Slash command files (the `.md` files behind `/your-command`):
95
+
96
+ - One card per command with name, description, scope badge, share badge, and lint marker
97
+ - **Editor** — Markdown body with edit/preview toggle and frontmatter fields (description, argument hints)
98
+ - **Copy / Override-clone** — Copy to the other scope, or clone a plugin-provided command into Project / Global so you can customize it without losing the upstream copy
99
+
100
+ ### 12.9 Agents Panel
101
+
102
+ Sub-agent definitions (`AGENT.md`-style files used by the `Agent` tool):
103
+
104
+ - One card per agent with name, role description, scope badge, share badge, lint marker
105
+ - **Editor** — Frontmatter fields (Name, Description, Tools), Markdown system prompt body, edit/preview toggle
106
+ - **Non-standard tools warning** — Lint rule flags tools that aren't part of the standard Claude Code toolset
107
+
108
+ ### 12.10 CLAUDE.md Editor
109
+
110
+ Two-column editor for the instruction documents Claude Code loads at session start:
111
+
112
+ - **Left column** — Global `~/.claude/CLAUDE.md`
113
+ - **Right column** — Project `<root>/.claude/CLAUDE.md` with its own share badge
114
+ - **Mobile** — Columns collapse to a User / Project toggle above a single editor pane
115
+
116
+ Each column is a CodeMirror Markdown editor with edit/preview toggle and the same 300 ms debounce auto-save as the other panels. Copy buttons (← / →) move content between columns; if both files have content, a confirmation dialog warns before overwriting.
117
+
118
+ Both files load into every Claude Code session in this project; the project version takes precedence when an instruction is defined in both.
119
+
120
+ ### 12.11 Snippets & Favorites Panel
121
+
122
+ A single panel manages both Hammoc-native snippets and Claude Code slash-command favorites.
123
+
124
+ **Snippets section** (top):
125
+
126
+ - Manages `%name` snippets from `<project-root>/.hammoc/snippets/`, `~/.hammoc/snippets/`, and the bundled set shipped with Hammoc (see §4.6)
127
+ - **Scope filter** — All / Project / Global / Bundled
128
+ - **+ New snippet** — Choose scope (Project or Global) and a name; an empty file is created and the editor opens
129
+ - **Editor** — CodeMirror with syntax highlighting for `%name%`, `{arg1}`, `{context}` tokens and an inline warning when a snippet references itself or forms a reference cycle (heuristic only — saves are not blocked)
130
+ - **Kebab menu** — Copy to the other scope, delete (with confirmation)
131
+ - **Bundled snippets** are read-only — copy to Project or Global scope first to customize
132
+
133
+ **Command Favorites section** (bottom):
134
+
135
+ - Drag-reorder list of slash command favorites (the same favorites shown in the chat input's favorites bar, see §4.3)
136
+ - Each entry shows the command name, scope, and a star toggle that moves it between regular and star favorites
137
+ - **Invalid chip** marker on favorites whose underlying command no longer exists on disk
138
+ - Up to 20 regular + 10 star favorites per scope
139
+
140
+ ### 12.12 Static Lint
141
+
142
+ Every harness panel (skills, MCP, hooks, commands, agents) runs a background static-lint pass against its files. Lint output surfaces in three places:
143
+
144
+ - **Count badges on section nav** — A red dot with the error count and an amber dot with the warning count appear on the section tab when issues exist
145
+ - **Inline marker on cards** — The card header shows a small red or amber pill with the issue count; clicking jumps to the card detail or opens the editor
146
+ - **Issues list at the top of each panel** — Expandable list of every issue with file path, severity, message, and a "Open" link
147
+
148
+ **Rule preferences:** The **Lint preferences** button at the top-right of the workbench opens a dialog listing all seven rules. Each rule has an on/off toggle plus a description, and a **Restore defaults** button reverts the preferences. Preferences are stored globally (not per-project).
149
+
150
+ **Available rules:**
151
+
152
+ | Rule | Default | Catches |
153
+ |------|---------|---------|
154
+ | `naming/duplicate-across-sources` | on | The same name exists in two scopes (project + global, etc.) — surfaces which copy will actually load |
155
+ | `hook/matcher-regex-invalid` | on | Hook `matcher` regex won't compile |
156
+ | `parse/yaml-json-error` | on | Frontmatter or JSON config can't be parsed |
157
+ | `mcp/command-not-on-path` | off | MCP `stdio` command is not on the server's `PATH` |
158
+ | `mcp/url-invalid` | on | MCP `url` field is malformed for the chosen transport |
159
+ | `agent/tools-non-standard` | on | Agent declares a tool name Claude Code does not recognize |
160
+ | `hook/env-var-undefined` | on | Hook body references `${VAR}` that is not set on the server |
161
+
162
+ ### 12.13 Secret-on-Shared Guard
163
+
164
+ When you save (or copy) a harness file whose share badge is **Shared**, Hammoc scans the content for plaintext secrets — long base64-looking values, AWS-style keys, bearer tokens — using both pattern and Shannon-entropy checks. If a likely secret is detected, the save is blocked and a dialog appears with three options:
165
+
166
+ - **Move to local file** — Auto-create a sibling file (e.g., `settings.local.json` next to `settings.json`), move the value there, and re-save the original with a reference. This keeps the secret out of git
167
+ - **Mark this value as not a secret** — One-shot opt-out for this save only; the heuristic does not persist the decision
168
+ - **Cancel** — Close the dialog without saving
169
+
170
+ The dialog lists exactly which values were flagged (line numbers for text files, dot-paths for JSON/YAML) so you can verify before deciding. The entropy gate avoids tripping on ordinary base64-looking strings (image tokens, integration test fixtures) that fall below the threshold.
171
+
172
+ ### 12.14 Fullscreen Editor
173
+
174
+ Every Markdown body in the workbench — skill body and raw view, skill bundle files, command body and raw view, agent system prompt and raw view, `CLAUDE.md` (both columns), snippet body — shows a small **Expand** button (⤢ icon) above the editor area. Clicking it opens a fullscreen overlay with the same CodeMirror instance, line wrapping, and a Markdown edit / preview toggle, so you can write long content without scrolling inside a narrow modal. Edits in the overlay sync back to the host panel through the same 300 ms debounce auto-save — there is no separate save button. Close the overlay with **X** or `Escape`. Read-only buffers (a plugin-scope file, a bundled snippet) show a small "read-only" chip in the overlay header.
175
+
@@ -0,0 +1,241 @@
1
+ ## 13. Settings
2
+
3
+ Access settings via the gear icon or the Settings page. The page has **8 tabs**: Global, Project, Notifications, Claude Account, Hammoc User, Advanced, Help, and About. On desktop, tabs appear as a sidebar; on mobile, they use an accordion layout.
4
+
5
+ > Per-project overrides have moved out of this page. See §5.3 — they now live in each project's own Settings tab (the workbench-level General section).
6
+
7
+ ### 13.1 Theme
8
+
9
+ - **Dark** — Dark background, light text (default)
10
+ - **Light** — Warm gray background, dark text
11
+ - **System** — Follows your OS/browser preference
12
+
13
+ ### 13.2 Language
14
+
15
+ Hammoc supports 6 languages:
16
+
17
+ - English
18
+ - 中文(简体) (Chinese Simplified)
19
+ - 日本語 (Japanese)
20
+ - 한국어 (Korean)
21
+ - Español (Spanish)
22
+ - Português (Portuguese)
23
+
24
+ Language is auto-detected from your browser settings. Override it manually in settings.
25
+
26
+ ### 13.3 Default Model
27
+
28
+ Choose the default Claude model:
29
+
30
+ **Default:**
31
+ - **Default** — Uses the SDK/system default model
32
+
33
+ **Aliases (always latest version):**
34
+ - **Sonnet** — Latest Sonnet
35
+ - **Opus** — Latest Opus
36
+ - **Haiku** — Latest Haiku
37
+
38
+ **Claude 4.x:**
39
+ - Opus 4.7 (most capable, 1M context), 4.6, 4.5, 4.1, 4
40
+ - Sonnet 4.5, 4
41
+ - Haiku 4.5
42
+
43
+ **Claude 3.x:**
44
+ - Sonnet 3.7, 3.5
45
+ - Haiku 3.5
46
+ - Opus 3, Sonnet 3, Haiku 3
47
+
48
+ Can be overridden per-project (see §5.3).
49
+
50
+ ### 13.4 Default Permission Mode
51
+
52
+ Set how Claude handles file modifications:
53
+
54
+ | Mode | Behavior |
55
+ |------|----------|
56
+ | **Last Used** | Keeps the permission mode from the previous session |
57
+ | **Plan** | Claude plans but doesn't make changes |
58
+ | **Ask before edits** | Claude asks for approval before each change (default) |
59
+ | **Edit automatically** | Claude edits files automatically |
60
+ | **Bypass permissions** | Full autonomy, no restrictions |
61
+
62
+ **Auto-approve safety checks** — When Bypass mode is selected, a checkbox option appears to automatically approve CLI safety check prompts without user confirmation. Enabled by default.
63
+
64
+ Can be overridden per-project (see §5.3). Quick-cycle with `Shift+Tab` when the chat input is focused.
65
+
66
+ ### 13.5 Markdown File Open Mode
67
+
68
+ Choose how `.md` files open by default:
69
+
70
+ - **Edit** — Opens in text editing mode
71
+ - **Preview** — Opens in rendered preview mode
72
+
73
+ ### 13.6 File Explorer View
74
+
75
+ Default view for the file explorer:
76
+
77
+ - **Grid** — Icon-based Finder-style layout (default)
78
+ - **List** — Traditional file list
79
+
80
+ ### 13.7 Layout Mode
81
+
82
+ Control the overall page width:
83
+
84
+ - **Narrow** — Content centered with a max width
85
+ - **Wide** — Full-width layout using all available screen space
86
+
87
+ Toggle via the layout button in the header.
88
+
89
+ ### 13.8 Project Settings
90
+
91
+ Per-project overrides have moved out of the global Settings page. They now live inside each project under **Project → Settings → General** (see §5.3). The Harness Workbench group on the same tab covers plugin / skill / hook / MCP / command / agent / CLAUDE.md / snippet management for that project (see §12).
92
+
93
+ ### 13.9 Chat Timeout
94
+
95
+ How long to wait for Claude's response:
96
+
97
+ - 1 minute
98
+ - 3 minutes
99
+ - **5 minutes** (default)
100
+ - 10 minutes
101
+ - 30 minutes
102
+
103
+ The timeout resets on every activity. If overridden by an environment variable, the field is disabled with an amber warning.
104
+
105
+ ### 13.10 Default Thinking Effort
106
+
107
+ Set the default thinking effort for new sessions:
108
+
109
+ - **SDK Default** / Low / Medium / High / XHigh / Max
110
+ - Max is available on Opus 4.6, Sonnet 4.6, and Opus 4.7
111
+ - XHigh is available only on Opus 4.7 (and is the SDK default for that model)
112
+ - If the active model does not support the configured level, it falls back to High automatically — the saved preference is kept, only the request to the SDK is clamped
113
+ - The chosen level is preserved while the active model is still resolving (no flicker back to Default during project switches)
114
+
115
+ ### 13.11 Quick Panel Defaults
116
+
117
+ - **Default Open** — Whether the quick panel opens automatically when entering a chat page (default: On)
118
+ - **Default Side** — Which side the quick panel appears on:
119
+ - **Left** — Always opens on the left
120
+ - **Right** — Always opens on the right (default)
121
+ - **Last Used** — Remembers the last side you used and restores it
122
+
123
+ ### 13.12 Notifications
124
+
125
+ The Notifications tab contains two sections: Web Push and Telegram.
126
+
127
+ #### 13.12.1 Web Push Notifications
128
+
129
+ Receive browser push notifications when Claude needs attention. Requires HTTPS and a browser that supports the Push API (Chrome, Firefox, Edge, Safari 16+).
130
+
131
+ - **Subscribe** — Register the current browser to receive push notifications (requests browser notification permission)
132
+ - **Unsubscribe** — Remove the current browser's push subscription
133
+ - **Enable toggle** — Master switch to enable or disable web push delivery
134
+ - **Subscribed devices** — Shows the number of browsers currently registered
135
+ - **Test** — Send a test push notification to verify setup
136
+
137
+ > iOS: Add Hammoc to Home Screen first, then subscribe from within the PWA.
138
+
139
+ #### 13.12.2 Telegram Notifications
140
+
141
+ Get notified on your phone when Claude needs attention:
142
+
143
+ **Setup:**
144
+ 1. Create a Telegram bot via [@BotFather](https://t.me/BotFather) — enter the Bot Token
145
+ 2. Get your Chat ID via [@userinfobot](https://t.me/userinfobot) — enter the Chat ID
146
+ 3. Both fields support **change** and **delete** operations; bot tokens are shown **masked** for security
147
+
148
+ **Enable/Disable:**
149
+ - Master **enable checkbox** — requires both Bot Token and Chat ID to be configured before it can be toggled on
150
+
151
+ **Chat Notification Types:**
152
+ - **Permission requests** — Claude needs approval for file changes
153
+ - **Completion** — Chat task finished
154
+ - **Error** — Something went wrong during chat
155
+
156
+ **Queue Notification Types:**
157
+ - **Queue start** — Queue execution began
158
+ - **Queue complete** — Queue finished all items
159
+ - **Queue error** — Queue encountered an error
160
+ - **Queue input needed** — Queue paused, waiting for user input
161
+
162
+ **Other Options:**
163
+ - **Always notify** — Get notified for every message (suppressed when the session is visible in the browser)
164
+
165
+ **Test:** Click "Send Test" to verify your configuration.
166
+
167
+ **Access URL:** Set your Hammoc base URL (e.g., `http://192.168.1.100:3000`) so notification links open directly in your browser.
168
+
169
+ **Environment Variables:** Bot Token and Chat ID can be set via environment variables, which take priority over saved values (shown with an amber "Env" indicator).
170
+
171
+ ### 13.13 Claude Account
172
+
173
+ Shows the Claude Code account that Hammoc is using, plus live subscription usage:
174
+
175
+ - **Account info** — Email, Subscription plan, Provider (e.g., Claude API / Claude.ai), Organization (if applicable), and the timestamp of the last fetch
176
+ - **Usage bars** — Two progress bars showing consumption of the **5-hour window** and **7-day window** quotas, with color thresholds (green / yellow / red at 50% / 80%) and reset times
177
+ - **Refresh** — Manually fetch the latest account info and usage from the API (spinner shown while refreshing). Toast confirms success or failure
178
+ - If no data has been fetched yet, a helper line explains that account info fills in automatically after the first chat or after clicking Refresh
179
+
180
+ ### 13.14 Hammoc User
181
+
182
+ Local Hammoc authentication (independent of your Claude Code account):
183
+
184
+ - **Change password** — Enter your current password, new password, and confirm. Minimum 4 characters. After changing, you'll be signed out and redirected to the login page.
185
+ - **Logout** — Sign out immediately.
186
+
187
+ ### 13.15 System Prompt
188
+
189
+ Customize Claude's behavior with a fully editable system prompt template:
190
+
191
+ - **Warning banner** — Displayed at the top, cautioning about the impact of modifications
192
+ - **Editable textarea** — Edit the system prompt with **auto-save**
193
+ - **Character count** — Shown below the editor
194
+ - **"Customized" indicator** — Blue banner when a custom prompt is active
195
+ - **Restore to Default** button — Appears when the prompt has been modified
196
+ - **Template variables** — Listed below the editor with descriptions (e.g., `{gitBranch}`, `{gitMainBranch}`, `{gitStatus}`); variables are resolved at runtime
197
+ - **Resolved preview** — Toggle to see the fully rendered prompt with variables replaced for the current project
198
+
199
+ > The default template focuses Claude on Hammoc-specific features (snippets, queue runner, board, BMAD, permission modes, sessions) and points at the manual + internals docs that Hammoc syncs to `~/.hammoc/docs/` on every server boot, so agents always have current docs even when run from a fresh install. The `{gitStatus}` block is no longer baked into the default — re-add it via this editor if you want it pre-included.
200
+
201
+ ### 13.16 Advanced Settings
202
+
203
+ **Server Management (mode-dependent):**
204
+
205
+ - **Development mode:** "Server Rebuild" button — rebuilds and restarts the server. Shows elapsed time during the build process
206
+ - **Production mode:** Shows current version number, "Check for Updates" button, and "Install Update" button (appears only when an update is available). Includes build progress with elapsed timer
207
+
208
+ **File Checkpointing:**
209
+ - **Chat sessions** — Save file snapshots during chat for rewind/restore (default: on). Disabling this prevents the Code Rewind feature (see §2.20) from working
210
+ - **Queue runner** — Save file snapshots during queue execution (default: off). Enabling increases JSONL session file size
211
+
212
+ **SDK Parameters:**
213
+ - **Max Thinking Tokens** — Limit Claude's extended thinking tokens (1,024–128,000)
214
+ - **Max Turns** — Limit conversation turns per query (1–100)
215
+ - **Max Budget (USD)** — Set cost limit per query ($0.01–$100)
216
+
217
+ > **Scope (as of v1.3.0)**: these SDK parameters now apply to **both** direct chat sends and Queue Runner executions. Earlier releases silently dropped them in the queue path — if your queue runs started honoring Max Turns or Max Thinking Tokens after upgrading, this is why. Adjust the values if the new behavior surprises you.
218
+
219
+ ### 13.17 Help
220
+
221
+ In-app usage guide within the Settings page:
222
+
223
+ - **Basic chat usage** — How to use the chat interface
224
+ - **Slash commands** — Available command reference
225
+ - **Permission mode guide** — Plan, Ask Before Edits, Edit Automatically explained
226
+ - **BMad Method** — Quick guide to the BMad workflow
227
+ - **Keyboard shortcuts** — Key bindings table (Enter, Shift+Enter, Escape, Ctrl+C, F7/Shift+F7, /)
228
+
229
+ ### 13.18 About
230
+
231
+ Displays app information:
232
+
233
+ - App name and version number
234
+ - Project description
235
+ - Author with link
236
+ - License type
237
+ - **GitHub Issues** link
238
+ - **Server status** — Healthy/unhealthy with color indicator dot
239
+ - **Server version**
240
+ - **Server time** — Localized timestamp
241
+
@@ -0,0 +1,68 @@
1
+ ## 14. Keyboard Shortcuts
2
+
3
+ ### Chat
4
+
5
+ | Shortcut | Action |
6
+ |----------|--------|
7
+ | `Enter` | Send message (desktop only) |
8
+ | `Shift+Enter` | New line in message |
9
+ | `ESC` | Abort generation / close command palette |
10
+ | `Ctrl+C` | Abort generation (only when no text is selected; otherwise copies) |
11
+ | `↑` / `↓` | Navigate prompt history (when cursor is at start/end of input) |
12
+ | `/` | Open slash command palette (auto-triggered when input starts with `/`) |
13
+ | `*` | Open star command palette (auto-triggered when input starts with `*`, requires active agent) |
14
+ | `%` | Open snippet autocomplete palette (auto-triggered when input starts with `%`) |
15
+ | `Tab` | Select highlighted command from palette |
16
+ | `Shift+Tab` | Cycle permission mode (Plan → Ask before edits → Edit automatically → Bypass) |
17
+ | `Ctrl` (hold) | Temporary chain mode while held |
18
+
19
+ ### Message Actions
20
+
21
+ | Shortcut | Action |
22
+ |----------|--------|
23
+ | `Ctrl+Enter` / `Cmd+Enter` | Accept edited message |
24
+ | `ESC` | Cancel message edit |
25
+
26
+ ### Quick Panel
27
+
28
+ | Shortcut | Action |
29
+ |----------|--------|
30
+ | `Alt+1` | Toggle Sessions panel |
31
+ | `Alt+2` | Toggle Files panel |
32
+ | `Alt+3` | Toggle Git panel |
33
+ | `Alt+4` | Toggle Terminal panel |
34
+
35
+ Note: Quick panel shortcuts are disabled when an input or textarea is focused.
36
+
37
+ ### Editor
38
+
39
+ | Shortcut | Action |
40
+ |----------|--------|
41
+ | `Ctrl+S` / `Cmd+S` | Save file |
42
+ | `ESC` | Close editor |
43
+
44
+ ### Diff Viewer
45
+
46
+ | Shortcut | Action |
47
+ |----------|--------|
48
+ | `F7` | Next change |
49
+ | `Shift+F7` | Previous change |
50
+ | `ESC` | Close diff viewer (fullscreen mode) |
51
+
52
+ ### Image Viewer
53
+
54
+ | Shortcut | Action |
55
+ |----------|--------|
56
+ | `←` / `→` | Previous / next image (when multiple images form a set) |
57
+ | `ESC` | Close image viewer |
58
+
59
+ ### Terminal
60
+
61
+ | Shortcut | Action |
62
+ |----------|--------|
63
+ | `Ctrl++` or `Ctrl+=` | Increase font size |
64
+ | `Ctrl+-` | Decrease font size |
65
+ | `Ctrl+0` | Reset font size |
66
+ | `←` / `→` | Switch between terminal tabs |
67
+ | `Delete` | Close active terminal tab |
68
+
@@ -0,0 +1,28 @@
1
+ ## 15. Environment Variables
2
+
3
+ ### Server
4
+
5
+ | Variable | Default | Description |
6
+ |----------|---------|-------------|
7
+ | `PORT` | `3000` | Server port |
8
+ | `HOST` | `0.0.0.0` | Bind address (all interfaces) |
9
+ | `NODE_ENV` | — | Set to `production` for optimized mode |
10
+ | `TRUST_PROXY` | `false` | Enable reverse proxy support. Set to `true` when behind Cloudflare Tunnel, nginx, etc. |
11
+ | `CORS_ORIGIN` | `true` | CORS origin policy. `true` allows any origin (local/VPN use). Set a specific URL (e.g., `https://hammoc.example.com`) to restrict |
12
+ | `ANTHROPIC_API_KEY` | — | Anthropic API key (required for Claude Code to function) |
13
+ | `CHAT_TIMEOUT_MS` | `300000` | Chat response timeout in milliseconds (5 minutes). Overrides the Settings UI value |
14
+ | `LOG_LEVEL` | `INFO` (prod) / `DEBUG` (dev) | Logging level: ERROR, WARN, INFO, DEBUG, VERBOSE |
15
+ | `TERMINAL_ENABLED` | `true` | Enable/disable terminal feature (set `false` to disable). Overrides the Settings UI value |
16
+ | `SHELL_TIMEOUT` | `30000` | Time (in ms) before an idle terminal session is cleaned up |
17
+ | `MAX_TERMINAL_SESSIONS` | `10` | Maximum concurrent terminal sessions |
18
+ | `TELEGRAM_BOT_TOKEN` | — | Telegram bot token (takes priority over Settings UI value) |
19
+ | `TELEGRAM_CHAT_ID` | — | Telegram chat ID (takes priority over Settings UI value) |
20
+ | `BASE_URL` | — | Fallback base URL for Telegram notification links (e.g., `http://192.168.1.100:3000`) |
21
+
22
+ ### Client (Vite)
23
+
24
+ | Variable | Default | Description |
25
+ |----------|---------|-------------|
26
+ | `VITE_SERVER_PORT` | `3000` | Server port the client connects to (useful for multi-instance setups) |
27
+ | `VITE_LOG_LEVEL` | — | Client-side debug log level: ERROR, WARN, INFO, DEBUG, VERBOSE |
28
+