hammoc 1.3.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 -403
- package/bin/hammoc.js +0 -6
- package/package.json +100 -93
- 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 +24 -24
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/controllers/boardController.d.ts.map +1 -1
- package/packages/server/dist/controllers/boardController.js +0 -5
- package/packages/server/dist/controllers/boardController.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/fileSystemController.d.ts +4 -0
- package/packages/server/dist/controllers/fileSystemController.d.ts.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.js +20 -2
- package/packages/server/dist/controllers/fileSystemController.js.map +1 -1
- 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/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +84 -49
- package/packages/server/dist/controllers/serverController.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 +16 -0
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +221 -8
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +66 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +41 -6
- package/packages/server/dist/locales/es/server.json +3 -5
- package/packages/server/dist/locales/ja/server.json +3 -5
- package/packages/server/dist/locales/ko/server.json +4 -6
- package/packages/server/dist/locales/pt/server.json +3 -5
- package/packages/server/dist/locales/zh-CN/server.json +3 -5
- package/packages/server/dist/routes/account.d.ts +7 -0
- package/packages/server/dist/routes/account.d.ts.map +1 -0
- package/packages/server/dist/routes/account.js +35 -0
- package/packages/server/dist/routes/account.js.map +1 -0
- package/packages/server/dist/routes/debug.d.ts +1 -1
- package/packages/server/dist/routes/debug.d.ts.map +1 -1
- package/packages/server/dist/routes/debug.js +60 -1
- package/packages/server/dist/routes/debug.js.map +1 -1
- 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/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +11 -2
- package/packages/server/dist/routes/preferences.js.map +1 -1
- 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/accountInfoService.d.ts +38 -0
- package/packages/server/dist/services/accountInfoService.d.ts.map +1 -0
- package/packages/server/dist/services/accountInfoService.js +118 -0
- package/packages/server/dist/services/accountInfoService.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 +36 -8
- 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/fileSystemService.d.ts +7 -1
- package/packages/server/dist/services/fileSystemService.d.ts.map +1 -1
- package/packages/server/dist/services/fileSystemService.js +67 -8
- package/packages/server/dist/services/fileSystemService.js.map +1 -1
- package/packages/server/dist/services/fileWatcherService.d.ts +59 -0
- package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -0
- package/packages/server/dist/services/fileWatcherService.js +329 -0
- package/packages/server/dist/services/fileWatcherService.js.map +1 -0
- package/packages/server/dist/services/gitService.d.ts.map +1 -1
- package/packages/server/dist/services/gitService.js +67 -7
- package/packages/server/dist/services/gitService.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/historyParser.d.ts +4 -14
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +60 -5
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +10 -2
- 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/notificationService.d.ts.map +1 -1
- package/packages/server/dist/services/notificationService.js +34 -9
- package/packages/server/dist/services/notificationService.js.map +1 -1
- package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
- package/packages/server/dist/services/preferencesService.js +8 -1
- package/packages/server/dist/services/preferencesService.js.map +1 -1
- package/packages/server/dist/services/projectService.d.ts +5 -0
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +42 -2
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/ptyService.d.ts +1 -0
- package/packages/server/dist/services/ptyService.d.ts.map +1 -1
- package/packages/server/dist/services/ptyService.js +36 -5
- package/packages/server/dist/services/ptyService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +83 -14
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.js +26 -0
- package/packages/server/dist/services/sessionBufferManager.js.map +1 -1
- package/packages/server/dist/services/sessionService.d.ts +4 -3
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +5 -4
- package/packages/server/dist/services/sessionService.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/services/webPushService.d.ts.map +1 -1
- package/packages/server/dist/services/webPushService.js +8 -1
- package/packages/server/dist/services/webPushService.js.map +1 -1
- 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/effortUtils.d.ts +21 -0
- package/packages/server/dist/utils/effortUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/effortUtils.js +36 -0
- package/packages/server/dist/utils/effortUtils.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/pathUtils.d.ts +3 -2
- package/packages/server/dist/utils/pathUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/pathUtils.js +26 -2
- package/packages/server/dist/utils/pathUtils.js.map +1 -1
- 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 +6 -2
- 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/fileSystem.d.ts +19 -0
- package/packages/shared/dist/types/fileSystem.d.ts.map +1 -1
- package/packages/shared/dist/types/fileSystem.js +5 -0
- package/packages/shared/dist/types/fileSystem.js.map +1 -1
- package/packages/shared/dist/types/git.d.ts +6 -1
- package/packages/shared/dist/types/git.d.ts.map +1 -1
- package/packages/shared/dist/types/git.js.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/history.d.ts +7 -0
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +4 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js +1 -0
- 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/sdk.d.ts +42 -1
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +26 -2
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +24 -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/scripts/mock-telegram.mjs +172 -0
- package/scripts/run-integration-test.mjs +362 -0
- package/packages/client/dist/assets/index-Bf0D9oVJ.css +0 -32
- package/packages/client/dist/assets/index-CRmzoqHy.js +0 -2
- package/packages/client/dist/assets/index-CszGQ29O.js +0 -1432
|
@@ -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
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
## 16. Troubleshooting
|
|
2
|
+
|
|
3
|
+
### 16.1 "Claude Code CLI not found"
|
|
4
|
+
|
|
5
|
+
Claude Code CLI must be installed and in your PATH:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
claude --version
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
If not installed, follow the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code). The Onboarding page shows CLI installation, authentication, and API key status at a glance.
|
|
12
|
+
|
|
13
|
+
### 16.2 "Authentication required" / `claude login`
|
|
14
|
+
|
|
15
|
+
If the chat displays an authentication error, Claude Code CLI needs to be logged in:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
claude login
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The Onboarding page (shown when CLI is not authenticated) displays the current auth status and provides setup commands.
|
|
22
|
+
|
|
23
|
+
### 16.3 API rate limit exceeded
|
|
24
|
+
|
|
25
|
+
When Anthropic API rate limits are reached, the chat shows a rate limit error with a retry delay. Solutions:
|
|
26
|
+
|
|
27
|
+
1. Wait for the indicated retry period and try again
|
|
28
|
+
2. Reduce concurrent sessions or shorten prompts
|
|
29
|
+
3. Check your API usage / plan limits on the Anthropic console
|
|
30
|
+
4. The header status indicator shows API health (yellow triangle = API unavailable)
|
|
31
|
+
|
|
32
|
+
### 16.4 "Connection lost" / Reconnecting
|
|
33
|
+
|
|
34
|
+
Hammoc automatically reconnects when the connection is lost. The header shows a status indicator: green (connected), yellow spinning (reconnecting), or red (disconnected with manual Reconnect button).
|
|
35
|
+
|
|
36
|
+
On mobile, the app automatically recovers when returning from background.
|
|
37
|
+
|
|
38
|
+
If the connection doesn't recover:
|
|
39
|
+
|
|
40
|
+
1. Check that the server is still running
|
|
41
|
+
2. Click the Reconnect button in the header (appears when disconnected)
|
|
42
|
+
3. Refresh the browser
|
|
43
|
+
4. Restart the server: `hammoc` or `npm start`
|
|
44
|
+
|
|
45
|
+
### 16.5 Port already in use
|
|
46
|
+
|
|
47
|
+
The server automatically retries when the port is in use. If it still fails:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
hammoc --port 3001
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or set the environment variable: `PORT=3001 hammoc`
|
|
54
|
+
|
|
55
|
+
### 16.6 Terminal not available
|
|
56
|
+
|
|
57
|
+
Terminal may be disabled when:
|
|
58
|
+
|
|
59
|
+
- Accessing from an external network (security restriction — only local IPs are allowed)
|
|
60
|
+
- `TERMINAL_ENABLED=false` is set in environment
|
|
61
|
+
- Maximum terminal sessions reached (default 10, configurable via `MAX_TERMINAL_SESSIONS`)
|
|
62
|
+
|
|
63
|
+
### 16.7 Reset password
|
|
64
|
+
|
|
65
|
+
If you forgot your password:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
hammoc --reset-password
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
This prompts you to set a new password. Alternatively, delete `~/.hammoc/config.json` and restart the server to re-trigger the password setup flow in the browser.
|
|
72
|
+
|
|
73
|
+
### 16.8 Chat timeout
|
|
74
|
+
|
|
75
|
+
If Claude's responses are timing out:
|
|
76
|
+
|
|
77
|
+
1. Go to **Settings > Global** and adjust the **Chat Timeout** dropdown
|
|
78
|
+
2. Available values: 1 min, 3 min, 5 min (default), 10 min, 30 min
|
|
79
|
+
3. Complex tasks (large codebases, multi-file edits) may need longer timeouts
|
|
80
|
+
4. If the `CHAT_TIMEOUT_MS` environment variable is set, it overrides the UI setting (shown with an indicator)
|
|
81
|
+
|
|
82
|
+
### 16.9 Large file warning
|
|
83
|
+
|
|
84
|
+
Files over 1 MB display a truncation warning. Consider:
|
|
85
|
+
|
|
86
|
+
- Using the terminal to view large files
|
|
87
|
+
- Opening in an external editor
|
|
88
|
+
- Breaking large files into smaller ones
|
|
89
|
+
|
|
90
|
+
### 16.10 Data locations
|
|
91
|
+
|
|
92
|
+
If you need to find or back up your data:
|
|
93
|
+
|
|
94
|
+
| Data | Path |
|
|
95
|
+
|------|------|
|
|
96
|
+
| App config & password | `~/.hammoc/config.json` |
|
|
97
|
+
| User preferences | `~/.hammoc/preferences.json` |
|
|
98
|
+
| Queue templates | `<project-root>/.hammoc/queue-templates.json` (per project) |
|
|
99
|
+
| Chain failures | `~/.hammoc/chain-failures/<sessionId>.json` (per session) |
|
|
100
|
+
| Global snippets | `~/.hammoc/snippets/` (shared across all projects) |
|
|
101
|
+
| Project snippets | `<project-root>/.hammoc/snippets/` (per project) |
|
|
102
|
+
| Global harness items | `~/.claude/` (skills, agents, commands, hooks, `CLAUDE.md`, `.mcp.json`, `settings.json`) |
|
|
103
|
+
| Project harness items | `<project-root>/.claude/` (same layout as global; project takes precedence) |
|
|
104
|
+
| Session data | `~/.claude/projects/` |
|
|
105
|
+
| Web Push VAPID keys | `~/.hammoc/vapid-keys.json` |
|
|
106
|
+
| Web Push subscriptions | `~/.hammoc/push-subscriptions.json` |
|
|
107
|
+
| TLS certificates | `~/.hammoc/key.pem`, `~/.hammoc/cert.pem` |
|
|
108
|
+
| Manual shards (synced) | `~/.hammoc/docs/manual/` and `~/.hammoc/docs/.manual-version` (auto-synced from the npm package on server boot; agents read these via the absolute path embedded in the system prompt) |
|
|
109
|
+
| Internals docs (synced) | `~/.hammoc/docs/internals/` (agent-only mechanism reference; also re-synced when the package version changes) |
|
|
110
|
+
| Server logs | `./logs/server-YYYY-MM-DD.log` (daily log files in working directory) |
|