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.
- package/README.md +422 -405
- package/bin/hammoc.js +0 -6
- package/package.json +100 -94
- package/packages/client/dist/assets/agentExampleHighlight-BgwTm15v.js +1 -0
- package/packages/client/dist/assets/commandTokenHighlight-BljHwnrK.js +1 -0
- package/packages/client/dist/assets/index-CjyjnXB8.css +32 -0
- package/packages/client/dist/assets/index-D3LxqW3f.js +2 -0
- package/packages/client/dist/assets/index-NqJdhlek.js +1498 -0
- package/packages/client/dist/assets/snippetTokenHighlight-DWsaQXX0.js +1 -0
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +1 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +13 -21
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/controllers/claudeMdController.d.ts +26 -0
- package/packages/server/dist/controllers/claudeMdController.d.ts.map +1 -0
- package/packages/server/dist/controllers/claudeMdController.js +158 -0
- package/packages/server/dist/controllers/claudeMdController.js.map +1 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessAgentController.js +339 -0
- package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.js +382 -0
- package/packages/server/dist/controllers/harnessCommandController.js.map +1 -0
- package/packages/server/dist/controllers/harnessController.d.ts +21 -0
- package/packages/server/dist/controllers/harnessController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessController.js +176 -0
- package/packages/server/dist/controllers/harnessController.js.map +1 -0
- package/packages/server/dist/controllers/harnessHookController.d.ts +32 -0
- package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessHookController.js +363 -0
- package/packages/server/dist/controllers/harnessHookController.js.map +1 -0
- package/packages/server/dist/controllers/harnessLintController.d.ts +18 -0
- package/packages/server/dist/controllers/harnessLintController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessLintController.js +72 -0
- package/packages/server/dist/controllers/harnessLintController.js.map +1 -0
- package/packages/server/dist/controllers/harnessMcpController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessMcpController.js +310 -0
- package/packages/server/dist/controllers/harnessMcpController.js.map +1 -0
- package/packages/server/dist/controllers/harnessPluginController.d.ts +17 -0
- package/packages/server/dist/controllers/harnessPluginController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessPluginController.js +115 -0
- package/packages/server/dist/controllers/harnessPluginController.js.map +1 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts +15 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessShareScopeController.js +73 -0
- package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -0
- package/packages/server/dist/controllers/harnessSkillController.d.ts +32 -0
- package/packages/server/dist/controllers/harnessSkillController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessSkillController.js +453 -0
- package/packages/server/dist/controllers/harnessSkillController.js.map +1 -0
- package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
- package/packages/server/dist/controllers/projectController.js +11 -0
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/snippetController.d.ts +35 -0
- package/packages/server/dist/controllers/snippetController.d.ts.map +1 -0
- package/packages/server/dist/controllers/snippetController.js +294 -0
- package/packages/server/dist/controllers/snippetController.js.map +1 -0
- package/packages/server/dist/handlers/websocket.d.ts +15 -0
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +79 -0
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +5 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +37 -4
- package/packages/server/dist/locales/es/server.json +0 -4
- package/packages/server/dist/locales/ja/server.json +0 -4
- package/packages/server/dist/locales/ko/server.json +0 -4
- package/packages/server/dist/locales/pt/server.json +0 -4
- package/packages/server/dist/locales/zh-CN/server.json +0 -4
- package/packages/server/dist/routes/harness.d.ts +8 -0
- package/packages/server/dist/routes/harness.d.ts.map +1 -0
- package/packages/server/dist/routes/harness.js +92 -0
- package/packages/server/dist/routes/harness.js.map +1 -0
- package/packages/server/dist/routes/projects.d.ts.map +1 -1
- package/packages/server/dist/routes/projects.js +5 -60
- package/packages/server/dist/routes/projects.js.map +1 -1
- package/packages/server/dist/routes/snippets.d.ts +14 -0
- package/packages/server/dist/routes/snippets.d.ts.map +1 -0
- package/packages/server/dist/routes/snippets.js +27 -0
- package/packages/server/dist/routes/snippets.js.map +1 -0
- package/packages/server/dist/services/bmadStatusService.d.ts +6 -2
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +88 -32
- package/packages/server/dist/services/bmadStatusService.js.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +3 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +27 -6
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/claudeMdService.d.ts +48 -0
- package/packages/server/dist/services/claudeMdService.d.ts.map +1 -0
- package/packages/server/dist/services/claudeMdService.js +240 -0
- package/packages/server/dist/services/claudeMdService.js.map +1 -0
- package/packages/server/dist/services/commandService.d.ts +10 -0
- package/packages/server/dist/services/commandService.d.ts.map +1 -1
- package/packages/server/dist/services/commandService.js +129 -4
- package/packages/server/dist/services/commandService.js.map +1 -1
- package/packages/server/dist/services/fileWatcherService.d.ts +24 -0
- package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
- package/packages/server/dist/services/fileWatcherService.js +192 -1
- package/packages/server/dist/services/fileWatcherService.js.map +1 -1
- package/packages/server/dist/services/harnessAgentService.d.ts +79 -0
- package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessAgentService.js +933 -0
- package/packages/server/dist/services/harnessAgentService.js.map +1 -0
- package/packages/server/dist/services/harnessCommandService.d.ts +60 -0
- package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessCommandService.js +853 -0
- package/packages/server/dist/services/harnessCommandService.js.map +1 -0
- package/packages/server/dist/services/harnessHookService.d.ts +55 -0
- package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessHookService.js +1060 -0
- package/packages/server/dist/services/harnessHookService.js.map +1 -0
- package/packages/server/dist/services/harnessLintService.d.ts +49 -0
- package/packages/server/dist/services/harnessLintService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessLintService.js +628 -0
- package/packages/server/dist/services/harnessLintService.js.map +1 -0
- package/packages/server/dist/services/harnessMcpService.d.ts +77 -0
- package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessMcpService.js +814 -0
- package/packages/server/dist/services/harnessMcpService.js.map +1 -0
- package/packages/server/dist/services/harnessPluginService.d.ts +66 -0
- package/packages/server/dist/services/harnessPluginService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessPluginService.js +559 -0
- package/packages/server/dist/services/harnessPluginService.js.map +1 -0
- package/packages/server/dist/services/harnessService.d.ts +40 -0
- package/packages/server/dist/services/harnessService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessService.js +222 -0
- package/packages/server/dist/services/harnessService.js.map +1 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts +31 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessShareScopeService.js +93 -0
- package/packages/server/dist/services/harnessShareScopeService.js.map +1 -0
- package/packages/server/dist/services/harnessSkillService.d.ts +70 -0
- package/packages/server/dist/services/harnessSkillService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessSkillService.js +636 -0
- package/packages/server/dist/services/harnessSkillService.js.map +1 -0
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +2 -1
- package/packages/server/dist/services/issueService.js.map +1 -1
- package/packages/server/dist/services/manualSyncService.d.ts +19 -0
- package/packages/server/dist/services/manualSyncService.d.ts.map +1 -0
- package/packages/server/dist/services/manualSyncService.js +110 -0
- package/packages/server/dist/services/manualSyncService.js.map +1 -0
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +45 -2
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/snippetService.d.ts +54 -0
- package/packages/server/dist/services/snippetService.d.ts.map +1 -0
- package/packages/server/dist/services/snippetService.js +371 -0
- package/packages/server/dist/services/snippetService.js.map +1 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts +46 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts.map +1 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js +125 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js.map +1 -0
- package/packages/server/dist/snippets/split-commit +9 -0
- package/packages/server/dist/utils/applySecretsPolicy.d.ts +53 -0
- package/packages/server/dist/utils/applySecretsPolicy.d.ts.map +1 -0
- package/packages/server/dist/utils/applySecretsPolicy.js +204 -0
- package/packages/server/dist/utils/applySecretsPolicy.js.map +1 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.d.ts +40 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.d.ts.map +1 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.js +47 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.js.map +1 -0
- package/packages/server/dist/utils/gitignoreFilter.d.ts +23 -0
- package/packages/server/dist/utils/gitignoreFilter.d.ts.map +1 -0
- package/packages/server/dist/utils/gitignoreFilter.js +42 -0
- package/packages/server/dist/utils/gitignoreFilter.js.map +1 -0
- package/packages/server/dist/utils/harnessBundleSchema.d.ts +105 -0
- package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessBundleSchema.js +79 -0
- package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
- package/packages/server/dist/utils/harnessPaths.d.ts +34 -0
- package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessPaths.js +124 -0
- package/packages/server/dist/utils/harnessPaths.js.map +1 -0
- package/packages/server/dist/utils/secretHeuristic.d.ts +72 -0
- package/packages/server/dist/utils/secretHeuristic.d.ts.map +1 -0
- package/packages/server/dist/utils/secretHeuristic.js +163 -0
- package/packages/server/dist/utils/secretHeuristic.js.map +1 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.d.ts +41 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.d.ts.map +1 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.js +81 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.js.map +1 -0
- package/packages/server/dist/utils/serverPathResolver.d.ts +29 -0
- package/packages/server/dist/utils/serverPathResolver.d.ts.map +1 -0
- package/packages/server/dist/utils/serverPathResolver.js +59 -0
- package/packages/server/dist/utils/serverPathResolver.js.map +1 -0
- package/packages/server/dist/utils/snippetPaths.d.ts +61 -0
- package/packages/server/dist/utils/snippetPaths.d.ts.map +1 -0
- package/packages/server/dist/utils/snippetPaths.js +123 -0
- package/packages/server/dist/utils/snippetPaths.js.map +1 -0
- package/packages/server/dist/utils/structuredEditor.d.ts +34 -0
- package/packages/server/dist/utils/structuredEditor.d.ts.map +1 -0
- package/packages/server/dist/utils/structuredEditor.js +111 -0
- package/packages/server/dist/utils/structuredEditor.js.map +1 -0
- package/packages/server/package.json +4 -1
- package/packages/server/resources/internals/INDEX.md +23 -0
- package/packages/server/resources/internals/harness-files.md +63 -0
- package/packages/server/resources/internals/image-storage.md +43 -0
- package/packages/server/resources/manual/01-getting-started.md +104 -0
- package/packages/server/resources/manual/02-chat.md +285 -0
- package/packages/server/resources/manual/03-sessions.md +48 -0
- package/packages/server/resources/manual/04-slash-commands-favorites.md +152 -0
- package/packages/server/resources/manual/05-projects.md +74 -0
- package/packages/server/resources/manual/06-file-explorer-editor.md +90 -0
- package/packages/server/resources/manual/07-git.md +94 -0
- package/packages/server/resources/manual/08-terminal.md +59 -0
- package/packages/server/resources/manual/09-queue-runner.md +262 -0
- package/packages/server/resources/manual/10-project-board.md +193 -0
- package/packages/server/resources/manual/11-bmad-method-integration.md +128 -0
- package/packages/server/resources/manual/12-harness-workbench.md +175 -0
- package/packages/server/resources/manual/13-settings.md +241 -0
- package/packages/server/resources/manual/14-keyboard-shortcuts.md +68 -0
- package/packages/server/resources/manual/15-environment-variables.md +28 -0
- package/packages/server/resources/manual/16-troubleshooting.md +110 -0
- package/packages/server/resources/manual/INDEX.md +60 -0
- package/packages/shared/dist/index.d.ts +3 -0
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +6 -0
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/command.d.ts +3 -3
- package/packages/shared/dist/types/command.d.ts.map +1 -1
- package/packages/shared/dist/types/harness.d.ts +1211 -0
- package/packages/shared/dist/types/harness.d.ts.map +1 -0
- package/packages/shared/dist/types/harness.js +107 -0
- package/packages/shared/dist/types/harness.js.map +1 -0
- package/packages/shared/dist/types/harnessBundle.d.ts +170 -0
- package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -0
- package/packages/shared/dist/types/harnessBundle.js +18 -0
- package/packages/shared/dist/types/harnessBundle.js.map +1 -0
- package/packages/shared/dist/types/preferences.d.ts +2 -0
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/queue.d.ts +9 -0
- package/packages/shared/dist/types/queue.d.ts.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +10 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/shared/dist/utils/markdownSections.d.ts +50 -0
- package/packages/shared/dist/utils/markdownSections.d.ts.map +1 -0
- package/packages/shared/dist/utils/markdownSections.js +111 -0
- package/packages/shared/dist/utils/markdownSections.js.map +1 -0
- package/packages/shared/dist/utils/queueParser.d.ts.map +1 -1
- package/packages/shared/dist/utils/queueParser.js +104 -0
- package/packages/shared/dist/utils/queueParser.js.map +1 -1
- package/scripts/build-manual-shards.mjs +100 -0
- package/packages/client/dist/assets/index-6jREnVYd.js +0 -2
- package/packages/client/dist/assets/index-BFF0iqyW.css +0 -32
- package/packages/client/dist/assets/index-BcI4y-fU.js +0 -1454
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
## 2. Chat
|
|
2
|
+
|
|
3
|
+
The chat interface is the core of Hammoc. It provides a rich, real-time conversation experience with Claude.
|
|
4
|
+
|
|
5
|
+
### 2.1 Sending Messages
|
|
6
|
+
|
|
7
|
+
- Type your message in the input area at the bottom
|
|
8
|
+
- **Desktop**: Press `Enter` to send, `Shift+Enter` for a new line
|
|
9
|
+
- **Mobile**: Press `Enter` for a new line, tap the send button to send
|
|
10
|
+
- The input area auto-expands as you type
|
|
11
|
+
|
|
12
|
+
### 2.2 Streaming Responses
|
|
13
|
+
|
|
14
|
+
Claude's responses stream in real-time, character by character. You'll see:
|
|
15
|
+
|
|
16
|
+
- **Text content** — Rendered as markdown as it arrives
|
|
17
|
+
- **Tool calls** — Shown as expandable cards with tool name, inputs, and results
|
|
18
|
+
- **Thinking blocks** — Claude's extended reasoning displayed in collapsible sections
|
|
19
|
+
- **Timestamps** — Each message shows a relative timestamp (e.g., "2 hours ago")
|
|
20
|
+
- **Copy button** — Click the copy icon on any message to copy its content to the clipboard
|
|
21
|
+
- **Scroll to bottom** — When scrolled up, a down-arrow button appears to jump back to the latest message
|
|
22
|
+
|
|
23
|
+
### 2.3 Markdown & Code Blocks
|
|
24
|
+
|
|
25
|
+
Messages support full GitHub-flavored markdown:
|
|
26
|
+
|
|
27
|
+
- Headers, bold, italic, strikethrough
|
|
28
|
+
- Ordered and unordered lists
|
|
29
|
+
- Tables
|
|
30
|
+
- Blockquotes
|
|
31
|
+
- Links (open in new tab)
|
|
32
|
+
- Inline code and fenced code blocks
|
|
33
|
+
|
|
34
|
+
**HTML support:**
|
|
35
|
+
- Inline HTML tags are rendered alongside markdown (e.g., `<div>`, `<span>`, `<table>`)
|
|
36
|
+
- Dangerous elements (`<script>`, `<iframe>`, `<style>`, event handlers) are automatically stripped for XSS protection
|
|
37
|
+
|
|
38
|
+
**Relative path resolution:**
|
|
39
|
+
- File links and image references in markdown resolve relative to the source file's directory
|
|
40
|
+
- Parent traversal (`../`) is supported (e.g., `../../config.json` navigates up two levels)
|
|
41
|
+
- Clicking resolved file links opens them in the text editor; images open in the image viewer
|
|
42
|
+
|
|
43
|
+
**Code blocks** have:
|
|
44
|
+
- Language-specific syntax highlighting
|
|
45
|
+
- Copy button (top-right corner)
|
|
46
|
+
- File reference links that open directly in the editor
|
|
47
|
+
|
|
48
|
+
### 2.4 Image Attachments
|
|
49
|
+
|
|
50
|
+
Attach images to your messages for Claude to analyze:
|
|
51
|
+
|
|
52
|
+
- Click the attachment button (paperclip icon) in the input area
|
|
53
|
+
- Drag and drop images directly onto the input area
|
|
54
|
+
- Paste from clipboard (`Ctrl+V` / `Cmd+V`)
|
|
55
|
+
- Supported formats: PNG, JPEG, GIF, WebP
|
|
56
|
+
- Maximum: 5 images per message, 10MB per image
|
|
57
|
+
- Images preview in the input area before sending
|
|
58
|
+
- Sent images display as clickable thumbnails above the message text. Clicking a thumbnail opens the full image viewer with multi-image navigation (see §6.4)
|
|
59
|
+
|
|
60
|
+
### 2.5 Tool Call Visualization
|
|
61
|
+
|
|
62
|
+
When Claude uses tools (reading files, editing code, running commands), each tool call is shown as a card:
|
|
63
|
+
|
|
64
|
+
- **Tool name** — e.g., Read, Edit, Bash, Grep
|
|
65
|
+
- **Input parameters** — What was passed to the tool
|
|
66
|
+
- **Status indicator** — Running (spinner), completed (checkmark), failed (X), denied (shield icon)
|
|
67
|
+
- **Execution time** — How long the tool took
|
|
68
|
+
- **Result** — Expandable section showing tool output
|
|
69
|
+
- **File paths** — Toggle between short and full path display
|
|
70
|
+
|
|
71
|
+
### 2.6 Task Notifications
|
|
72
|
+
|
|
73
|
+
When Claude runs background tasks (e.g., Agent sub-tasks), a notification card appears in the message stream upon completion:
|
|
74
|
+
|
|
75
|
+
- **Status indicators** — Completed (green checkmark), Failed (red alert), Stopped (bell icon)
|
|
76
|
+
- **Summary text** — Brief description of the task outcome
|
|
77
|
+
- **Clickable** — When linked to a tool call, clicking the card scrolls to the associated Agent tool card and highlights it briefly
|
|
78
|
+
|
|
79
|
+
### 2.7 Diff Viewer
|
|
80
|
+
|
|
81
|
+
When Claude modifies files, a diff viewer shows the changes:
|
|
82
|
+
|
|
83
|
+
- **Side-by-side mode** — Before and after comparison (wide screens)
|
|
84
|
+
- **Inline mode** — Unified diff view (narrow screens or mobile)
|
|
85
|
+
- **Syntax highlighting** — Language-aware coloring
|
|
86
|
+
- **Diff navigation** — `F7` next change, `Shift+F7` previous change
|
|
87
|
+
- **Large file handling** — Very large files are handled with optimized rendering
|
|
88
|
+
- **Responsive layout** — Automatically switches between side-by-side and inline modes based on screen width (768px breakpoint)
|
|
89
|
+
- **Manual layout toggle** — A toggle button in the viewer header (Columns2 / Rows2 icon) lets you force side-by-side or inline. The choice is persisted per user and overrides the responsive default until reset
|
|
90
|
+
|
|
91
|
+
### 2.8 Permission Requests
|
|
92
|
+
|
|
93
|
+
Depending on your permission mode, Claude may ask for approval before modifying files:
|
|
94
|
+
|
|
95
|
+
- **Approve** — Allow the change
|
|
96
|
+
- **Reject** — Block the change
|
|
97
|
+
- View the diff before deciding
|
|
98
|
+
- See the list of requested permissions
|
|
99
|
+
|
|
100
|
+
### 2.9 Prompt Chaining
|
|
101
|
+
|
|
102
|
+
Queue multiple prompts for sequential execution. Chain state is managed server-side, enabling multi-browser sync and background execution.
|
|
103
|
+
|
|
104
|
+
1. Toggle **chain mode** ON via the chain button (link icon next to send) or hold `Ctrl`
|
|
105
|
+
2. Type your first prompt and send it — the send button label changes to **"Add to chain"**
|
|
106
|
+
3. While Claude is responding, type the next prompt and send — it enters the chain
|
|
107
|
+
4. Up to **10** prompts can be queued
|
|
108
|
+
5. A **violet banner** shows the chain status:
|
|
109
|
+
- **Collapsed mode** — First prompt preview + "+N" count indicator
|
|
110
|
+
- **Expanded mode** — Full list with individual **Remove** buttons (click to expand when 2+ items)
|
|
111
|
+
- **Drag-and-drop reorder** — In the expanded list, grab the grip handle (GripVertical icon) on the left of any pending item to drag it up or down. Items that are actively sending show a spinner instead of a grip and cannot be moved
|
|
112
|
+
- **Cancel all** — Clear the entire chain
|
|
113
|
+
6. Each prompt auto-executes when the previous one completes
|
|
114
|
+
|
|
115
|
+
**Server-side features:**
|
|
116
|
+
- **Multi-browser sync** — Chain state is synchronized across all browser tabs/windows
|
|
117
|
+
- **Background execution** — Chain continues running even if all browsers are closed
|
|
118
|
+
- **Auto-retry** — Failed items are automatically retried before being marked as failed
|
|
119
|
+
|
|
120
|
+
### 2.10 Context Usage
|
|
121
|
+
|
|
122
|
+
Monitor token usage in real-time:
|
|
123
|
+
|
|
124
|
+
- **Usage donut** — Visual indicator showing used/limit tokens and percentage
|
|
125
|
+
- **Cost display** — Estimated cost for the session
|
|
126
|
+
- **Cache tokens** — Cache creation and read token counts
|
|
127
|
+
- **Rate limit dots** — 5h/7d utilization indicators in the input area
|
|
128
|
+
- **Color thresholds** — Green (normal), Yellow (moderate), Red (high usage)
|
|
129
|
+
- **Context compaction** — Click the usage donut to trigger compaction, which summarizes the conversation to free up context space. At critical usage levels, clicking instead creates a new session
|
|
130
|
+
- **Auto-compact on overflow** — When message history hits the context window limit, Hammoc automatically compacts the context and retries the message instead of losing the session
|
|
131
|
+
|
|
132
|
+
### 2.11 Aborting Responses
|
|
133
|
+
|
|
134
|
+
Stop Claude mid-response:
|
|
135
|
+
|
|
136
|
+
- Click the **Stop** button (appears during streaming)
|
|
137
|
+
- Press `ESC` key
|
|
138
|
+
- Press `Ctrl+C` (when no text is selected in the input)
|
|
139
|
+
|
|
140
|
+
### 2.12 Prompt History
|
|
141
|
+
|
|
142
|
+
Navigate through your previous inputs:
|
|
143
|
+
|
|
144
|
+
- Press `↑` (Up arrow) to recall the previous prompt
|
|
145
|
+
- Press `↓` (Down arrow) to go forward
|
|
146
|
+
- History is per-session
|
|
147
|
+
|
|
148
|
+
### 2.13 Voice Input (Speech Recognition)
|
|
149
|
+
|
|
150
|
+
Dictate messages using your browser's built-in speech recognition:
|
|
151
|
+
|
|
152
|
+
- **Microphone button** — Located inside the chat input area (right side). Only shown when the browser supports the Web Speech API (Chrome, Edge, Safari)
|
|
153
|
+
- **Toggle** — Click the mic button to start/stop listening
|
|
154
|
+
- **Visual indicator** — Green indicator while actively listening
|
|
155
|
+
- **Language-aware** — Automatically matches the app's language setting (English, Korean, Chinese, Japanese, Spanish, Portuguese)
|
|
156
|
+
- Recognized text is added to the current input without replacing existing text
|
|
157
|
+
- **Auto-stop** — Voice recognition stops automatically when sending a message or when the session becomes locked
|
|
158
|
+
- **Error handling** — Toast notification shown if microphone access is denied or recognition fails
|
|
159
|
+
|
|
160
|
+
### 2.14 Extended Thinking
|
|
161
|
+
|
|
162
|
+
When Claude uses extended thinking, the reasoning is shown in a collapsible block:
|
|
163
|
+
|
|
164
|
+
- Click to expand/collapse
|
|
165
|
+
- Thinking content is visually distinct from the main response
|
|
166
|
+
- Useful for understanding Claude's decision-making process
|
|
167
|
+
|
|
168
|
+
### 2.15 Model Selector
|
|
169
|
+
|
|
170
|
+
The model selector button is located in the chat input toolbar. It displays the current model family name (e.g., "Opus", "Sonnet", "Haiku") directly on the button. When using the default model, it shows "Default". Click to open a dropdown for choosing a different model and adjusting thinking effort.
|
|
171
|
+
|
|
172
|
+
### 2.16 Thinking Effort
|
|
173
|
+
|
|
174
|
+
Control how much Claude "thinks" before responding. The intensity bar appears inside the model selector dropdown. The number of bars depends on the selected model:
|
|
175
|
+
|
|
176
|
+
- **Low / Medium / High** — 3 levels, available for all models
|
|
177
|
+
- **Max** — 4th level, added for Opus 4.6 / Sonnet 4.6
|
|
178
|
+
- **XHigh** — 5th level, added only for **Opus 4.7** (the default effort for this model is XHigh)
|
|
179
|
+
|
|
180
|
+
Behavior:
|
|
181
|
+
|
|
182
|
+
- Click the currently active level again to reset to default
|
|
183
|
+
- Cannot be changed while Claude is responding
|
|
184
|
+
- If you switch to a model that doesn't support the current level (e.g., XHigh → non-Opus-4.7, or Max → model without Max), the effort automatically resets to the highest supported level
|
|
185
|
+
- When the active model is temporarily unknown (e.g., right after switching projects before the resolved model arrives), the dropdown keeps your saved choice instead of resetting it. As soon as the model is known, the effort is reclamped if necessary
|
|
186
|
+
|
|
187
|
+
The default thinking effort for new sessions can be configured in Settings > Global.
|
|
188
|
+
|
|
189
|
+
### 2.17 Message Actions
|
|
190
|
+
|
|
191
|
+
Each message has an action bar that appears at its bottom-right corner. Available actions depend on the message type:
|
|
192
|
+
|
|
193
|
+
**On all messages:**
|
|
194
|
+
- **Copy** — Copy the message text to clipboard
|
|
195
|
+
|
|
196
|
+
**On user messages:**
|
|
197
|
+
- **Edit** — Open an inline editor to modify the message (see §2.18)
|
|
198
|
+
- **Summarize & Continue** — Generate an AI summary of the conversation up to that point (see §2.19)
|
|
199
|
+
- **Rewind Code** — Restore the codebase to the state it was in when this message was sent (see §2.20)
|
|
200
|
+
|
|
201
|
+
**On assistant messages:**
|
|
202
|
+
- **Fork** — Create a new session branching from this response (see §2.21)
|
|
203
|
+
|
|
204
|
+
All action buttons are disabled during streaming, and while another action (edit, rewind, summarize) is in progress. Actions are also disabled when viewing an old branch or in branch viewer mode (see §2.23).
|
|
205
|
+
|
|
206
|
+
### 2.18 Message Edit
|
|
207
|
+
|
|
208
|
+
Edit a previously sent user message to explore a different conversation path:
|
|
209
|
+
|
|
210
|
+
1. Click the **Edit** button (pencil icon) on a user message
|
|
211
|
+
2. The message transforms into an editable textarea with the original text
|
|
212
|
+
3. Modify the text, then:
|
|
213
|
+
- **Accept** (checkmark button or `Ctrl+Enter`) — Send the edited message. Claude responds to the new version, creating a new conversation branch
|
|
214
|
+
- **Cancel** (X button or `Escape`) — Discard changes
|
|
215
|
+
4. Empty messages cannot be submitted
|
|
216
|
+
|
|
217
|
+
After editing, you can navigate between the original and edited branches using branch pagination (see §2.22).
|
|
218
|
+
|
|
219
|
+
### 2.19 Summarize & Continue
|
|
220
|
+
|
|
221
|
+
Compress a long conversation into a summary to free up context space while continuing the session:
|
|
222
|
+
|
|
223
|
+
1. Click the **Summarize & Continue** button (sparkles icon) on a user message
|
|
224
|
+
2. AI generates a summary of the conversation up to that point (spinner shown during generation)
|
|
225
|
+
3. To cancel mid-generation, click the button again (shows X on hover)
|
|
226
|
+
4. When complete, the inline edit form opens with the generated summary pre-filled
|
|
227
|
+
5. Review, edit if needed, then **Accept** to continue with the summary or **Cancel** to discard
|
|
228
|
+
|
|
229
|
+
### 2.20 Code Rewind
|
|
230
|
+
|
|
231
|
+
Revert project files to a previous state in the conversation:
|
|
232
|
+
|
|
233
|
+
1. Click the **Rewind Code** button (undo icon) on a user message
|
|
234
|
+
2. A dry-run preview shows how many files will change (insertions/deletions count)
|
|
235
|
+
3. Review the file list and click **Rewind** to confirm, or **Cancel** to abort
|
|
236
|
+
4. On success, a toast confirms the number of files restored
|
|
237
|
+
|
|
238
|
+
If no checkpoint is available for that message, or the code is already at that state, an error message is shown.
|
|
239
|
+
|
|
240
|
+
### 2.21 Session Fork
|
|
241
|
+
|
|
242
|
+
Branch into a completely new session from any assistant response:
|
|
243
|
+
|
|
244
|
+
1. Click the **Fork** button (git-fork icon) on an assistant message
|
|
245
|
+
2. A dialog appears with an optional message field (defaults to "Continue from here")
|
|
246
|
+
3. Click **Fork** to create the new session
|
|
247
|
+
4. The new session starts with the full conversation history up to that point, plus your fork message
|
|
248
|
+
5. You are automatically navigated to the new session
|
|
249
|
+
|
|
250
|
+
The original session remains unchanged.
|
|
251
|
+
|
|
252
|
+
### 2.22 Conversation Branching
|
|
253
|
+
|
|
254
|
+
When you edit a message, the conversation splits into branches. Branch pagination controls appear at the bottom-left of user messages that have multiple branches:
|
|
255
|
+
|
|
256
|
+
- **← / →** arrows to navigate between branches
|
|
257
|
+
- **"X / Y"** indicator showing current branch number and total count
|
|
258
|
+
- Keyboard: **Left/Right arrow keys** to navigate (when the pagination is focused)
|
|
259
|
+
- Navigation is disabled during streaming
|
|
260
|
+
|
|
261
|
+
Switching branches replaces all messages from that point forward with the selected branch's history.
|
|
262
|
+
|
|
263
|
+
### 2.23 Branch Viewer
|
|
264
|
+
|
|
265
|
+
Browse all conversation branches in a read-only mode:
|
|
266
|
+
|
|
267
|
+
1. Click the **branch history button** (git-branch icon) in the chat header — only visible when the session has branches
|
|
268
|
+
2. The chat enters read-only mode:
|
|
269
|
+
- Branch pagination controls become active at every branch point
|
|
270
|
+
- Navigate freely between branches using ← / → arrows
|
|
271
|
+
- The input area shows "Branch viewer mode (read-only)"
|
|
272
|
+
- All message actions (edit, rewind, summarize, fork) are disabled
|
|
273
|
+
3. Click **"Exit branch viewer"** in the header to return to the active conversation
|
|
274
|
+
|
|
275
|
+
### 2.24 Max Budget Warning Banner
|
|
276
|
+
|
|
277
|
+
When the **Max Budget (USD)** advanced setting (see §13.16) is configured, a sticky banner appears at the top of the chat area once the session cost approaches the limit:
|
|
278
|
+
|
|
279
|
+
- **Yellow warning** (80% threshold) — "Budget warning: $X.XXXX / $Y.YYYY used (ZZ%) — approaching Max Budget limit."
|
|
280
|
+
- **Red critical warning** (95% threshold) — "Budget critical: $X.XXXX / $Y.YYYY used (ZZ%) — stream will auto-stop when limit is exceeded."
|
|
281
|
+
- Cost is shown to 4 decimal places
|
|
282
|
+
- The banner is informational; the SDK auto-stops the stream once the limit is actually crossed
|
|
283
|
+
|
|
284
|
+
The banner disappears automatically once the running cost falls back below the warning threshold (for example, after starting a new session).
|
|
285
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
## 3. Sessions
|
|
2
|
+
|
|
3
|
+
### 3.1 Session List
|
|
4
|
+
|
|
5
|
+
Access the session list via the sidebar or quick panel:
|
|
6
|
+
|
|
7
|
+
- **Preview** — First prompt of each session
|
|
8
|
+
- **Session name badge** — Custom name shown as a blue badge (if renamed)
|
|
9
|
+
- **Agent badge** — Active BMad agent shown as a purple badge (if set)
|
|
10
|
+
- **Session ID** — Truncated identifier
|
|
11
|
+
- **Message count** — Number of messages in the session
|
|
12
|
+
- **Date** — When the session was last active
|
|
13
|
+
- **Streaming indicator** — Green dot with animation when streaming
|
|
14
|
+
- **Waiting indicator** — Amber pulsing dot with "Waiting" badge when a session is connected but not yet streaming
|
|
15
|
+
- **Queue badge** — Shown when queue runner is active on the session
|
|
16
|
+
- Empty sessions are hidden by default (toggle with the eye icon)
|
|
17
|
+
|
|
18
|
+
### 3.2 Creating a New Session
|
|
19
|
+
|
|
20
|
+
- Click the **New Session** button in the header
|
|
21
|
+
- Each session gets a unique ID
|
|
22
|
+
|
|
23
|
+
### 3.3 Session Search
|
|
24
|
+
|
|
25
|
+
Two distinct search modes:
|
|
26
|
+
|
|
27
|
+
- **By name/ID** — Client-side filtering of the session list by name or session ID
|
|
28
|
+
- **By content** — Toggle "Search content" to search through actual conversation messages (server-side, slower but thorough)
|
|
29
|
+
- Matching sessions are filtered and displayed in the list
|
|
30
|
+
- "Load more" pagination for large result sets
|
|
31
|
+
|
|
32
|
+
### 3.4 Session Operations
|
|
33
|
+
|
|
34
|
+
- **Rename** — Click the edit icon next to the session name
|
|
35
|
+
- **Delete** — Remove a session (with confirmation)
|
|
36
|
+
- **Selection mode** — Select multiple sessions for batch delete
|
|
37
|
+
- **Delete empty sessions** — Bulk-delete all empty sessions at once
|
|
38
|
+
|
|
39
|
+
### 3.5 Quick Session Panel
|
|
40
|
+
|
|
41
|
+
Access sessions without leaving the chat:
|
|
42
|
+
|
|
43
|
+
- Open the quick panel (sidebar tab)
|
|
44
|
+
- Switch between sessions instantly
|
|
45
|
+
- See session previews and status
|
|
46
|
+
- **Side toggle** — Move the panel to the left or right side using the button in the panel header
|
|
47
|
+
- **Mobile swipe** — Swipe inward from the screen edge to open, swipe back toward the edge to close
|
|
48
|
+
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
## 4. Slash Commands & Favorites
|
|
2
|
+
|
|
3
|
+
### 4.1 Command Palette
|
|
4
|
+
|
|
5
|
+
Type `/` in the chat input to open the command palette:
|
|
6
|
+
|
|
7
|
+
- Browse available commands grouped by category — **Agents**, **Tasks**, **Skills**, **Slash Commands** (project / global / plugin `.claude/commands/*.md` files), and **Commands** (everything else)
|
|
8
|
+
- Filter by typing: `/test` shows commands containing "test"
|
|
9
|
+
- Commands are project-specific — loaded from the project's configured agents and tasks
|
|
10
|
+
- **Real-time refresh** — The command and skill list is fetched from the server each time the palette opens, reflecting newly added or removed commands
|
|
11
|
+
- Navigate with **ArrowUp/Down**, close with **Escape**
|
|
12
|
+
- Press **Enter** or click to insert the selected command
|
|
13
|
+
|
|
14
|
+
### 4.2 Star Command Palette
|
|
15
|
+
|
|
16
|
+
Type `*` in the chat input to open the star command palette (requires an active agent):
|
|
17
|
+
|
|
18
|
+
- Shows commands specific to the currently active agent
|
|
19
|
+
- Filter by typing: `*create` filters matching commands
|
|
20
|
+
- Navigate with **ArrowUp/Down**, close with **Escape**
|
|
21
|
+
- Press **Enter** or click to insert — placeholders like `{name}` are auto-selected
|
|
22
|
+
- Add to star favorites by clicking the star icon on any command
|
|
23
|
+
|
|
24
|
+
### 4.3 Favorites
|
|
25
|
+
|
|
26
|
+
Pin your most-used slash commands for quick access:
|
|
27
|
+
|
|
28
|
+
- **Favorites bar** — Appears above the chat input (hidden when empty)
|
|
29
|
+
- Hold up to **20 favorites**
|
|
30
|
+
- Click a favorite chip to instantly insert it
|
|
31
|
+
- **Add**: Click the star icon on any command in the slash command palette
|
|
32
|
+
- **Remove**: Open the favorites popup and click the X button
|
|
33
|
+
- **Reorder**: Open the favorites popup and drag to rearrange
|
|
34
|
+
- Disabled during queue runner execution
|
|
35
|
+
|
|
36
|
+
### 4.4 Star Favorites
|
|
37
|
+
|
|
38
|
+
Mark up to **10 star favorites** per agent for even quicker access:
|
|
39
|
+
|
|
40
|
+
- Star favorites appear with a yellow indicator and `*` prefix
|
|
41
|
+
- They are prioritized at the top of the favorites bar, before slash favorites
|
|
42
|
+
- **Add**: Click the star icon on any command in the star command palette (`*`)
|
|
43
|
+
- **Remove**: Open the favorites popup and click the X button
|
|
44
|
+
|
|
45
|
+
### 4.5 Favorite Management
|
|
46
|
+
|
|
47
|
+
Click the star button (★) on the favorites bar to open the management popup:
|
|
48
|
+
|
|
49
|
+
- **Two sections**: "Agent Command" (star favorites) and "Slash Command" (slash favorites), separated by a divider
|
|
50
|
+
- Remove favorites with the X button
|
|
51
|
+
- Drag to reorder within each section
|
|
52
|
+
- Click a command to insert it into the chat input
|
|
53
|
+
|
|
54
|
+
### 4.6 Prompt Snippets
|
|
55
|
+
|
|
56
|
+
Prompt snippets are reusable prompt templates stored as files. Invoke them with the `%` prefix in the chat input.
|
|
57
|
+
|
|
58
|
+
**Snippet storage (3-tier hierarchy, highest priority first):**
|
|
59
|
+
|
|
60
|
+
1. **Project snippets** — `.hammoc/snippets/` in the project directory
|
|
61
|
+
2. **Global snippets** — `~/.hammoc/snippets/`
|
|
62
|
+
3. **Bundled snippets** — Built-in snippets shipped with Hammoc (~22 standard snippets)
|
|
63
|
+
|
|
64
|
+
If the same snippet name exists in multiple tiers, the highest-priority source is used. You can override bundled snippets by placing a file with the same name in your project or global snippets directory.
|
|
65
|
+
|
|
66
|
+
**Snippet files:**
|
|
67
|
+
- Plain text files (optionally with `.md` extension)
|
|
68
|
+
- File name becomes the snippet name (e.g., `commit-and-done` or `commit-and-done.md`)
|
|
69
|
+
- Maximum file size: 100KB
|
|
70
|
+
|
|
71
|
+
**Bundled standard snippets include:**
|
|
72
|
+
- Workflow: `commit-and-done`, `mark-done`, `apply-qa-fixes`, `validate-and-approve`, `validate-and-fix`
|
|
73
|
+
- Issues: `quick-fix-issue`, `promote-issue`, `promote-to-story`, `promote-to-epic`
|
|
74
|
+
- Research: `brainstorm`, `competitor-analysis`, `market-research`, `create-prd`, `create-project-brief`
|
|
75
|
+
- Architecture: `create-backend-arch`, `create-frontend-arch`, `create-fullstack-arch`, `create-frontend-spec`
|
|
76
|
+
- Stories: `develop-story`, `draft-story`, `brownfield-create-story`, `brownfield-create-epic`
|
|
77
|
+
- QA: `qa-review`, `validate-story`
|
|
78
|
+
|
|
79
|
+
### 4.7 Snippet Autocomplete
|
|
80
|
+
|
|
81
|
+
Type `%` in the chat input to open the snippet autocomplete popup:
|
|
82
|
+
|
|
83
|
+
- **Grouped by source** — Sections labeled "Project", "Global", and "Bundled"
|
|
84
|
+
- **Preview** — Shows the first line of each snippet's content (up to 80 characters)
|
|
85
|
+
- **Real-time filtering** — Type after `%` to filter by name or preview text (case-insensitive)
|
|
86
|
+
- **Keyboard navigation** — ArrowUp/Down to navigate, Enter or Tab to select, Escape to close
|
|
87
|
+
- **Click** to select a snippet
|
|
88
|
+
- **Real-time refresh** — The snippet list is fetched from the server each time the popup opens, reflecting any file changes
|
|
89
|
+
|
|
90
|
+
Selecting a snippet inserts `%snippet-name ` (with trailing space) into the input. Deduplication ensures only the highest-priority version of each snippet name appears.
|
|
91
|
+
|
|
92
|
+
### 4.8 Snippet Arguments & Context
|
|
93
|
+
|
|
94
|
+
Snippets support placeholder substitution for dynamic content.
|
|
95
|
+
|
|
96
|
+
**Positional arguments** (`{arg1}`, `{arg2}`, ...):
|
|
97
|
+
|
|
98
|
+
Arguments are space-separated after the snippet name:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
%commit-and-done BS-2
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
If the snippet file contains `Commit changes for story {arg1}`, this resolves to `Commit changes for story BS-2`.
|
|
105
|
+
|
|
106
|
+
**Quoted arguments** — Use double quotes for multi-word arguments:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
%promote-issue "Fix login button" critical bug
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Here `{arg1}` = `Fix login button`, `{arg2}` = `critical`, `{arg3}` = `bug`. Inside quotes, use `\"` for literal quotes and `\\` for literal backslashes.
|
|
113
|
+
|
|
114
|
+
**Context blocks** (`{context}` + `---context`):
|
|
115
|
+
|
|
116
|
+
For injecting longer text into a snippet, add `---context` after the arguments followed by the content:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
%quick-fix-issue docs/issues/ISSUE-1.md critical bug
|
|
120
|
+
---context
|
|
121
|
+
# Button fails on mobile
|
|
122
|
+
The login button doesn't render on iOS devices.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The text after `---context` replaces all `{context}` placeholders in the snippet.
|
|
126
|
+
|
|
127
|
+
**Unreferenced arguments** are ignored. Unreplaced placeholders remain as literal text.
|
|
128
|
+
|
|
129
|
+
### 4.9 Multi-Prompt Snippets
|
|
130
|
+
|
|
131
|
+
Snippets can contain multiple prompts separated by `---` on its own line:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
*validate-story-draft {arg1}
|
|
135
|
+
---
|
|
136
|
+
Please fix all identified issues.
|
|
137
|
+
---
|
|
138
|
+
Mark as approved.
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
When invoked as `%validate-and-fix BS-2`:
|
|
142
|
+
|
|
143
|
+
1. The first prompt executes immediately as the chat message
|
|
144
|
+
2. Remaining prompts are added to the prompt chain queue (see §2.9) for sequential execution
|
|
145
|
+
|
|
146
|
+
The total number of chain items is subject to the 10-item chain limit.
|
|
147
|
+
|
|
148
|
+
**Usage in different contexts:**
|
|
149
|
+
- **Chat messages** — First prompt sent immediately, remaining prompts queued as chain items
|
|
150
|
+
- **Prompt chain** — All resolved prompts added as chain items
|
|
151
|
+
- **Queue scripts** — Snippet is expanded inline, with additional prompts spliced into the queue
|
|
152
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
## 5. Projects
|
|
2
|
+
|
|
3
|
+
### 5.1 Project List
|
|
4
|
+
|
|
5
|
+
The project list page shows all your Claude Code projects in a responsive grid:
|
|
6
|
+
|
|
7
|
+
Each project card displays:
|
|
8
|
+
|
|
9
|
+
- **Project name** — Derived from the directory name
|
|
10
|
+
- **Path** — Full project directory path
|
|
11
|
+
- **Session count** — Number of chat sessions
|
|
12
|
+
- **Last modified** — When the project was last active
|
|
13
|
+
- **BMad badge** — Indicates BMAD-METHOD enabled projects
|
|
14
|
+
- **Status indicators** — Active sessions (green dot), queue status badge, terminal count (updates in real-time)
|
|
15
|
+
|
|
16
|
+
Each card has a **kebab menu** (⋮) with:
|
|
17
|
+
|
|
18
|
+
- **Setup BMad** — Initialize BMAD-METHOD on non-BMad projects (with version selection)
|
|
19
|
+
- **Hide / Unhide** — Toggle project visibility
|
|
20
|
+
- **Delete** — Remove the project
|
|
21
|
+
|
|
22
|
+
**Dashboard summary bar** appears at the top when projects exist, showing aggregate stats: Projects, Sessions, Active, Queue, Terminals.
|
|
23
|
+
|
|
24
|
+
### 5.2 Creating a New Project
|
|
25
|
+
|
|
26
|
+
1. Click **"New Project"** on the project list page
|
|
27
|
+
2. Enter the project directory path
|
|
28
|
+
3. The path is validated automatically with a short debounce while you type (`"Validating path..."` helper text is shown). Blurring the field validates immediately
|
|
29
|
+
4. Path collision detection — if the path already belongs to an existing project, an amber warning appears with a **"Navigate to existing"** link and the **Create** button is disabled until you pick a different path
|
|
30
|
+
5. Invalid paths show the server's validation message in red below the input, and also disable **Create**
|
|
31
|
+
6. Optionally enable BMad Method initialization with version selection
|
|
32
|
+
|
|
33
|
+
### 5.3 Project Settings
|
|
34
|
+
|
|
35
|
+
Per-project settings live in their own tab inside each project (Overview / Queue / Git / Files / Terminal / Board / **Settings**), no longer under the global Settings page. Opening the tab takes you directly to that project's configuration — there is no project dropdown to disambiguate.
|
|
36
|
+
|
|
37
|
+
The Settings tab has a two-pane layout:
|
|
38
|
+
|
|
39
|
+
- **Left nav** — Two top-level groups: **General** and **Harness Workbench** (see §12)
|
|
40
|
+
- **Right panel** — Form contents for the selected group
|
|
41
|
+
|
|
42
|
+
**General group** (per-project override fields):
|
|
43
|
+
|
|
44
|
+
- **Default model** — Override the global model selection
|
|
45
|
+
- **Permission mode** — Override the global permission mode (Plan, Ask before edits, Edit automatically). Note: Bypass permissions is not available at project level
|
|
46
|
+
- **Hidden toggle** — Hide the project from the project list
|
|
47
|
+
- **Reset to Global Defaults** — Remove all overrides at once
|
|
48
|
+
|
|
49
|
+
On narrow screens, the left nav collapses into a row of buttons above the right panel (the inner Harness Workbench navigator beneath it becomes the horizontally-scrolling pill row — see §12.1).
|
|
50
|
+
|
|
51
|
+
### 5.4 Hiding Projects
|
|
52
|
+
|
|
53
|
+
- Hide projects from the kebab menu or project settings
|
|
54
|
+
- Hidden projects appear with reduced opacity when visible
|
|
55
|
+
- Toggle "Show hidden" (eye icon in header) to reveal them
|
|
56
|
+
- Hiding doesn't delete any data
|
|
57
|
+
|
|
58
|
+
### 5.5 Project Overview Page
|
|
59
|
+
|
|
60
|
+
Clicking a project card opens the Overview tab:
|
|
61
|
+
|
|
62
|
+
- **Stats cards** — Three cards showing Total Sessions, Total Messages, and Active Sessions
|
|
63
|
+
- **Recent Sessions** — Last 5 sessions with streaming indicators, session name badges, and message counts. Click to navigate directly to the session
|
|
64
|
+
- **Quick Start** — Buttons for New Session, Queue Runner, and File Explorer
|
|
65
|
+
- **Active streaming banner** — Green banner shown when sessions are actively streaming
|
|
66
|
+
|
|
67
|
+
For BMad projects, additional sections appear above this standard overview (see §11.4).
|
|
68
|
+
|
|
69
|
+
### 5.6 Deleting Projects
|
|
70
|
+
|
|
71
|
+
- Delete removes the project from Hammoc's list
|
|
72
|
+
- Optionally check **"Delete project files"** to also remove the directory on disk
|
|
73
|
+
- Confirmation dialog prevents accidental deletion
|
|
74
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
## 6. File Explorer & Editor
|
|
2
|
+
|
|
3
|
+
### 6.1 File Explorer
|
|
4
|
+
|
|
5
|
+
Access the file explorer from the sidebar tab. Toggle between views with the toolbar button:
|
|
6
|
+
|
|
7
|
+
**Grid View (Finder-style, default)**
|
|
8
|
+
- Icon-based card display with folder/file icons
|
|
9
|
+
- Click folders to navigate in, click files to open
|
|
10
|
+
- ".." entry to navigate to parent directory
|
|
11
|
+
- Breadcrumb navigation at the top
|
|
12
|
+
|
|
13
|
+
**List View (hierarchical tree)**
|
|
14
|
+
- Recursive tree with expand/collapse chevrons
|
|
15
|
+
- Lazy-loaded subdirectories
|
|
16
|
+
- Sorted by type (folders first) then by name
|
|
17
|
+
- Keyboard navigation: ArrowUp/Down/Left/Right, Enter, Home/End
|
|
18
|
+
|
|
19
|
+
**Context Menu** (right-click or ⋮ button on hover)
|
|
20
|
+
- **New File** / **New Folder** — Creates via inline input
|
|
21
|
+
- **Copy** / **Cut** / **Paste** — Copy or move files and folders within the project
|
|
22
|
+
- **Download** — Download individual files (files only)
|
|
23
|
+
- **Rename** — Inline renaming
|
|
24
|
+
- **Delete** — With confirmation dialog
|
|
25
|
+
|
|
26
|
+
**File Upload**
|
|
27
|
+
- Drag and drop files from your OS into the Grid view to upload them
|
|
28
|
+
- Paste files from clipboard (`Ctrl+V`) while the file explorer is focused
|
|
29
|
+
|
|
30
|
+
**Toolbar**
|
|
31
|
+
- **Search** — File search with real-time filtering
|
|
32
|
+
- **Hidden files** — Toggle visibility of ignored patterns (`.git`, `node_modules`, `.env`, `dist`, etc.)
|
|
33
|
+
- **View toggle** — Switch between Grid and List views
|
|
34
|
+
- **Open in OS explorer** — Opens the project folder in your OS file manager (Explorer, Finder, etc.). Only shown when accessing via localhost
|
|
35
|
+
- Default view mode configurable in settings
|
|
36
|
+
|
|
37
|
+
### 6.2 Text Editor
|
|
38
|
+
|
|
39
|
+
Click any text file to open it in the built-in editor:
|
|
40
|
+
|
|
41
|
+
- **Syntax highlighting** — Language-aware (detected from file extension)
|
|
42
|
+
- **Line numbers** and **active line highlighting**
|
|
43
|
+
- **Save** — `Ctrl+S` / `Cmd+S` or the save button
|
|
44
|
+
- **Close** — `Escape` key or the X button
|
|
45
|
+
- **Unsaved changes warning** — Confirmation dialog prevents accidental data loss
|
|
46
|
+
- **File size limit** — Files over 1MB are truncated and read-only
|
|
47
|
+
- **Binary files** — When a binary file is opened (images, PDFs, executables, etc.), the editor body shows the file's human-readable size (e.g., `104 B`, `5.0 MB`) together with a **Download** button for direct download
|
|
48
|
+
|
|
49
|
+
**External change detection**
|
|
50
|
+
|
|
51
|
+
The server watches open files and pushes a notification if the file changes on disk outside Hammoc. An alert banner appears above the editor:
|
|
52
|
+
|
|
53
|
+
- **File modified on disk (clean editor)** — Amber banner with **Reload** (re-read from disk) and **Dismiss** (keep current view)
|
|
54
|
+
- **File modified on disk (with unsaved edits)** — Amber banner warning that saving will overwrite the external changes; same Reload / Dismiss buttons
|
|
55
|
+
- **File deleted on disk** — Red banner with a **Dismiss** button (no reload is possible)
|
|
56
|
+
- **Stale-write conflict** — If you try to save a file that was modified on disk since you opened it, the save is rejected and a red banner offers **Reload** (discard your edits) or **Overwrite** (force-save over the external changes)
|
|
57
|
+
|
|
58
|
+
### 6.3 Markdown Preview
|
|
59
|
+
|
|
60
|
+
For `.md` files:
|
|
61
|
+
|
|
62
|
+
- Toggle between **Edit** and **Preview** modes via the header button
|
|
63
|
+
- Preview renders full markdown with styles
|
|
64
|
+
- Default mode (Edit or Preview) configurable in settings
|
|
65
|
+
|
|
66
|
+
### 6.4 Image Viewer
|
|
67
|
+
|
|
68
|
+
Click any image file to open the viewer in a fullscreen overlay:
|
|
69
|
+
|
|
70
|
+
- **Zoom in/out** — Button controls or mouse wheel scroll (wheel zoom cancels any active fit mode)
|
|
71
|
+
- **Drag to pan** — Click and drag to move the image. Pan position is clamped so the zoomed image cannot be dragged completely off-screen
|
|
72
|
+
- **Zoom percentage** — Displayed between zoom buttons
|
|
73
|
+
- **Fit controls** — Header buttons for **Actual size (100%)**, **Fit to screen**, **Fit to width**, and **Fit to height**. The active fit mode is cleared when you manually zoom with the wheel
|
|
74
|
+
- **Touch gestures** (mobile / touchscreen):
|
|
75
|
+
- **Pinch** with two fingers to zoom. The zoom is anchored at the midpoint between the two fingers so the content under your fingers stays put
|
|
76
|
+
- **One-finger drag** pans the image when it's zoomed in (with edge clamping)
|
|
77
|
+
- **One-finger horizontal swipe** (when the image fits on screen) navigates to the previous / next image in the set. A swipe needs to exceed roughly 50 px horizontally and be more horizontal than vertical to trigger
|
|
78
|
+
- **Multi-image navigation** — When multiple images are available (a chat message with multiple attachments, **or a file-explorer image opened from a folder containing other images**), they form a navigable set. Left/right arrow keys move between images and zoom resets to fit on each change. The header shows the current position (e.g., `filename (2/5)`)
|
|
79
|
+
- **Close** — `Escape` key or the X button
|
|
80
|
+
- Supports PNG, JPEG, GIF, WebP, SVG, BMP, ICO
|
|
81
|
+
|
|
82
|
+
### 6.5 Quick File Panel
|
|
83
|
+
|
|
84
|
+
Access files without leaving the chat:
|
|
85
|
+
|
|
86
|
+
- Open the quick panel and switch to the Files tab
|
|
87
|
+
- **Recently opened** files appear at the top (max 5 per session)
|
|
88
|
+
- Search and navigate the file tree
|
|
89
|
+
- Click to open in the editor overlay
|
|
90
|
+
|