claudedesk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/config/repos.example.json +128 -0
  4. package/config/settings.example.json +64 -0
  5. package/config/skills/code-review.md +76 -0
  6. package/config/skills/full-check.md +26 -0
  7. package/config/skills/lint-fix.md +23 -0
  8. package/dist/api/agent-routes.d.ts +2 -0
  9. package/dist/api/agent-routes.d.ts.map +1 -0
  10. package/dist/api/agent-routes.js +251 -0
  11. package/dist/api/agent-routes.js.map +1 -0
  12. package/dist/api/app-routes.d.ts +2 -0
  13. package/dist/api/app-routes.d.ts.map +1 -0
  14. package/dist/api/app-routes.js +150 -0
  15. package/dist/api/app-routes.js.map +1 -0
  16. package/dist/api/docker-routes.d.ts +2 -0
  17. package/dist/api/docker-routes.d.ts.map +1 -0
  18. package/dist/api/docker-routes.js +167 -0
  19. package/dist/api/docker-routes.js.map +1 -0
  20. package/dist/api/middleware.d.ts +6 -0
  21. package/dist/api/middleware.d.ts.map +1 -0
  22. package/dist/api/middleware.js +293 -0
  23. package/dist/api/middleware.js.map +1 -0
  24. package/dist/api/pin-auth.d.ts +65 -0
  25. package/dist/api/pin-auth.d.ts.map +1 -0
  26. package/dist/api/pin-auth.js +218 -0
  27. package/dist/api/pin-auth.js.map +1 -0
  28. package/dist/api/routes.d.ts +2 -0
  29. package/dist/api/routes.d.ts.map +1 -0
  30. package/dist/api/routes.js +473 -0
  31. package/dist/api/routes.js.map +1 -0
  32. package/dist/api/settings-routes.d.ts +2 -0
  33. package/dist/api/settings-routes.d.ts.map +1 -0
  34. package/dist/api/settings-routes.js +570 -0
  35. package/dist/api/settings-routes.js.map +1 -0
  36. package/dist/api/skill-routes.d.ts +2 -0
  37. package/dist/api/skill-routes.d.ts.map +1 -0
  38. package/dist/api/skill-routes.js +88 -0
  39. package/dist/api/skill-routes.js.map +1 -0
  40. package/dist/api/terminal-routes.d.ts +2 -0
  41. package/dist/api/terminal-routes.d.ts.map +1 -0
  42. package/dist/api/terminal-routes.js +3524 -0
  43. package/dist/api/terminal-routes.js.map +1 -0
  44. package/dist/api/tunnel-routes.d.ts +2 -0
  45. package/dist/api/tunnel-routes.d.ts.map +1 -0
  46. package/dist/api/tunnel-routes.js +196 -0
  47. package/dist/api/tunnel-routes.js.map +1 -0
  48. package/dist/api/workspace-routes.d.ts +3 -0
  49. package/dist/api/workspace-routes.d.ts.map +1 -0
  50. package/dist/api/workspace-routes.js +649 -0
  51. package/dist/api/workspace-routes.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +276 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/client/assets/index-B4r0njGe.js +780 -0
  57. package/dist/client/assets/index-CY_9MyE0.css +1 -0
  58. package/dist/client/favicon.svg +5 -0
  59. package/dist/client/icons/icon-192.svg +5 -0
  60. package/dist/client/icons/icon-512.svg +5 -0
  61. package/dist/client/icons/logo-with-message.png +0 -0
  62. package/dist/client/icons/logo.png +0 -0
  63. package/dist/client/index.html +25 -0
  64. package/dist/client/manifest.json +62 -0
  65. package/dist/client/sw.js +243 -0
  66. package/dist/config/agent-usage.d.ts +34 -0
  67. package/dist/config/agent-usage.d.ts.map +1 -0
  68. package/dist/config/agent-usage.js +87 -0
  69. package/dist/config/agent-usage.js.map +1 -0
  70. package/dist/config/repos.d.ts +34 -0
  71. package/dist/config/repos.d.ts.map +1 -0
  72. package/dist/config/repos.js +412 -0
  73. package/dist/config/repos.js.map +1 -0
  74. package/dist/config/settings.d.ts +634 -0
  75. package/dist/config/settings.d.ts.map +1 -0
  76. package/dist/config/settings.js +459 -0
  77. package/dist/config/settings.js.map +1 -0
  78. package/dist/config/skills.d.ts +18 -0
  79. package/dist/config/skills.d.ts.map +1 -0
  80. package/dist/config/skills.js +174 -0
  81. package/dist/config/skills.js.map +1 -0
  82. package/dist/config/workspaces.d.ts +961 -0
  83. package/dist/config/workspaces.d.ts.map +1 -0
  84. package/dist/config/workspaces.js +482 -0
  85. package/dist/config/workspaces.js.map +1 -0
  86. package/dist/core/app-manager.d.ts +85 -0
  87. package/dist/core/app-manager.d.ts.map +1 -0
  88. package/dist/core/app-manager.js +447 -0
  89. package/dist/core/app-manager.js.map +1 -0
  90. package/dist/core/claude-invoker.d.ts +49 -0
  91. package/dist/core/claude-invoker.d.ts.map +1 -0
  92. package/dist/core/claude-invoker.js +583 -0
  93. package/dist/core/claude-invoker.js.map +1 -0
  94. package/dist/core/claude-session-reader.d.ts +25 -0
  95. package/dist/core/claude-session-reader.d.ts.map +1 -0
  96. package/dist/core/claude-session-reader.js +184 -0
  97. package/dist/core/claude-session-reader.js.map +1 -0
  98. package/dist/core/claude-usage-query.d.ts +78 -0
  99. package/dist/core/claude-usage-query.d.ts.map +1 -0
  100. package/dist/core/claude-usage-query.js +294 -0
  101. package/dist/core/claude-usage-query.js.map +1 -0
  102. package/dist/core/git-credential-helper.d.ts +57 -0
  103. package/dist/core/git-credential-helper.d.ts.map +1 -0
  104. package/dist/core/git-credential-helper.js +176 -0
  105. package/dist/core/git-credential-helper.js.map +1 -0
  106. package/dist/core/git-sandbox.d.ts +135 -0
  107. package/dist/core/git-sandbox.d.ts.map +1 -0
  108. package/dist/core/git-sandbox.js +907 -0
  109. package/dist/core/git-sandbox.js.map +1 -0
  110. package/dist/core/github-integration.d.ts +66 -0
  111. package/dist/core/github-integration.d.ts.map +1 -0
  112. package/dist/core/github-integration.js +350 -0
  113. package/dist/core/github-integration.js.map +1 -0
  114. package/dist/core/github-oauth.d.ts +88 -0
  115. package/dist/core/github-oauth.d.ts.map +1 -0
  116. package/dist/core/github-oauth.js +244 -0
  117. package/dist/core/github-oauth.js.map +1 -0
  118. package/dist/core/gitlab-integration.d.ts +66 -0
  119. package/dist/core/gitlab-integration.d.ts.map +1 -0
  120. package/dist/core/gitlab-integration.js +353 -0
  121. package/dist/core/gitlab-integration.js.map +1 -0
  122. package/dist/core/gitlab-oauth.d.ts +100 -0
  123. package/dist/core/gitlab-oauth.d.ts.map +1 -0
  124. package/dist/core/gitlab-oauth.js +366 -0
  125. package/dist/core/gitlab-oauth.js.map +1 -0
  126. package/dist/core/insights-extractor.d.ts +68 -0
  127. package/dist/core/insights-extractor.d.ts.map +1 -0
  128. package/dist/core/insights-extractor.js +402 -0
  129. package/dist/core/insights-extractor.js.map +1 -0
  130. package/dist/core/logger.d.ts +27 -0
  131. package/dist/core/logger.d.ts.map +1 -0
  132. package/dist/core/logger.js +70 -0
  133. package/dist/core/logger.js.map +1 -0
  134. package/dist/core/process-runner.d.ts +27 -0
  135. package/dist/core/process-runner.d.ts.map +1 -0
  136. package/dist/core/process-runner.js +147 -0
  137. package/dist/core/process-runner.js.map +1 -0
  138. package/dist/core/project-detector.d.ts +30 -0
  139. package/dist/core/project-detector.d.ts.map +1 -0
  140. package/dist/core/project-detector.js +482 -0
  141. package/dist/core/project-detector.js.map +1 -0
  142. package/dist/core/qr-generator.d.ts +18 -0
  143. package/dist/core/qr-generator.d.ts.map +1 -0
  144. package/dist/core/qr-generator.js +61 -0
  145. package/dist/core/qr-generator.js.map +1 -0
  146. package/dist/core/remote-tunnel-manager.d.ts +59 -0
  147. package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
  148. package/dist/core/remote-tunnel-manager.js +235 -0
  149. package/dist/core/remote-tunnel-manager.js.map +1 -0
  150. package/dist/core/shared-docker-manager.d.ts +41 -0
  151. package/dist/core/shared-docker-manager.d.ts.map +1 -0
  152. package/dist/core/shared-docker-manager.js +409 -0
  153. package/dist/core/shared-docker-manager.js.map +1 -0
  154. package/dist/core/skill-executor.d.ts +25 -0
  155. package/dist/core/skill-executor.d.ts.map +1 -0
  156. package/dist/core/skill-executor.js +171 -0
  157. package/dist/core/skill-executor.js.map +1 -0
  158. package/dist/core/terminal-session.d.ts +149 -0
  159. package/dist/core/terminal-session.d.ts.map +1 -0
  160. package/dist/core/terminal-session.js +2340 -0
  161. package/dist/core/terminal-session.js.map +1 -0
  162. package/dist/core/tunnel-manager.d.ts +35 -0
  163. package/dist/core/tunnel-manager.d.ts.map +1 -0
  164. package/dist/core/tunnel-manager.js +137 -0
  165. package/dist/core/tunnel-manager.js.map +1 -0
  166. package/dist/core/usage-manager.d.ts +57 -0
  167. package/dist/core/usage-manager.d.ts.map +1 -0
  168. package/dist/core/usage-manager.js +363 -0
  169. package/dist/core/usage-manager.js.map +1 -0
  170. package/dist/core/ws-manager.d.ts +39 -0
  171. package/dist/core/ws-manager.d.ts.map +1 -0
  172. package/dist/core/ws-manager.js +190 -0
  173. package/dist/core/ws-manager.js.map +1 -0
  174. package/dist/index.d.ts +7 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +229 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/types.d.ts +868 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +119 -0
  181. package/dist/types.js.map +1 -0
  182. package/package.json +96 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 ClaudeDesk Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,431 @@
1
+ # ClaudeDesk
2
+
3
+ [![npm version](https://badge.fury.io/js/claudedesk.svg)](https://www.npmjs.com/package/claudedesk)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org/)
6
+
7
+ A web interface for Claude Code with session persistence, visual tool activity, and safe shipping workflows.
8
+
9
+ **See what Claude does. Review before you ship.**
10
+
11
+ ![ClaudeDesk Terminal](docs/screenshot.png)
12
+
13
+ ## Important Security Information
14
+
15
+ **ClaudeDesk grants Claude Code autonomous access to your local file system and command execution.**
16
+
17
+ By default, Claude can:
18
+ - Read, edit, and delete files in configured workspaces
19
+ - Execute arbitrary shell commands on your machine
20
+ - Install packages and modify system configuration
21
+ - Access network resources and external APIs
22
+
23
+ **Before using ClaudeDesk:**
24
+ - Only configure trusted repositories in workspaces
25
+ - Review all changes before committing or deploying
26
+ - Use read-only permission mode when exploring unfamiliar codebases
27
+ - Keep ClaudeDesk bound to localhost (default) unless you specifically need remote access
28
+ - Never configure system directories or sensitive paths
29
+ - Never run ClaudeDesk with elevated privileges unless absolutely necessary
30
+
31
+ ClaudeDesk is designed for development environments. Use production deployments with caution.
32
+
33
+ ## What is ClaudeDesk?
34
+
35
+ ClaudeDesk is a companion interface for developers who already use Claude Code CLI. It provides visual oversight of AI actions, persistent sessions you can resume anytime, and a structured workflow for reviewing and shipping changes safely.
36
+
37
+ It is not an IDE. It is not a replacement for Claude Code. It is a session manager that gives you control and visibility.
38
+
39
+ ## Features
40
+
41
+ - **Session Management** - Create, persist, resume, search, and export Claude Code sessions
42
+ - **Visual Tool Timeline** - See every Read, Edit, Bash action in real-time as Claude works
43
+ - **Git Worktree Isolation** - Each session runs in its own worktree branch for safe experimentation
44
+ - **Ship Workflow** - Review diffs, commit, push, and create PRs in one guided flow
45
+ - **Multi-Repo Sessions** - Work across multiple repositories from a single interface
46
+ - **Quota Tracking** - Monitor your Claude API usage and costs
47
+ - **GitHub/GitLab OAuth** - Push and create PRs using OAuth tokens
48
+ - **Plan Mode** - Review and approve Claude's plan before execution
49
+
50
+ ## Installation
51
+
52
+ ### Option 1: npm (Recommended)
53
+
54
+ ```bash
55
+ # Install globally
56
+ npm install -g claudedesk
57
+ claudedesk
58
+
59
+ # Or run without installing
60
+ npx claudedesk
61
+ ```
62
+
63
+ **Prerequisites:** Node.js 18+ and [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
64
+
65
+ ### Option 2: Docker
66
+
67
+ ```bash
68
+ cd deploy
69
+ cp .env.example .env
70
+ docker compose up -d
71
+ ```
72
+
73
+ See [deploy/README.md](deploy/README.md) for full Docker deployment instructions.
74
+
75
+ **Prerequisites:** Docker Engine 20.10+ and Docker Compose 2.0+
76
+
77
+ ### Option 3: From Source (Development)
78
+
79
+ ```bash
80
+ git clone https://github.com/carloluisito/claudedesk.git
81
+ cd claude-desk
82
+ npm install
83
+ npm run dev
84
+ ```
85
+
86
+ **Prerequisites:** Node.js 18+, npm, Git, and [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
87
+
88
+ ## CLI Reference
89
+
90
+ ```
91
+ claudedesk [options]
92
+
93
+ Options:
94
+ -p, --port <port> Port to listen on (default: 8787)
95
+ -d, --data-dir <path> Data directory for config and artifacts
96
+ --skip-wizard Skip the initial setup wizard
97
+ --allow-remote Allow remote network access (binds to 0.0.0.0)
98
+ -h, --help Show help message
99
+ -v, --version Show version number
100
+ ```
101
+
102
+ ### Examples
103
+
104
+ ```bash
105
+ # Start on default port
106
+ claudedesk
107
+
108
+ # Start on custom port
109
+ claudedesk --port 3000
110
+
111
+ # Use custom data directory
112
+ claudedesk --data-dir /opt/claudedesk-data
113
+
114
+ # Skip setup wizard (for automated deployments)
115
+ claudedesk --skip-wizard
116
+
117
+ # Allow remote access (see security warning below)
118
+ claudedesk --allow-remote --port 8080
119
+ ```
120
+
121
+ ### Remote Access Security Warning
122
+
123
+ By default, ClaudeDesk binds to `127.0.0.1` (localhost only). Using `--allow-remote` binds to `0.0.0.0`, exposing ClaudeDesk to your entire network.
124
+
125
+ **Risks of `--allow-remote`:**
126
+ - Anyone on your network can access the ClaudeDesk interface
127
+ - With your auth token, they can access your configured repositories
128
+ - Claude can execute arbitrary commands on your machine
129
+ - Your code and file system are exposed
130
+
131
+ **Only use `--allow-remote` when:**
132
+ - You are on a trusted private network
133
+ - You have additional authentication/firewall in place
134
+ - You specifically need mobile or remote access
135
+
136
+ **Safer alternative:** Use the built-in tunnel feature for secure remote access without exposing your local network.
137
+
138
+ ## Configuration
139
+
140
+ ### Data Directory
141
+
142
+ ClaudeDesk stores all configuration and data in a dedicated directory:
143
+
144
+ **Default locations:**
145
+ - Linux/macOS: `~/.claudedesk`
146
+ - Windows: `%APPDATA%\claudedesk`
147
+
148
+ **Custom location:**
149
+ ```bash
150
+ claudedesk --data-dir /custom/path
151
+ # Or via environment variable
152
+ export CLAUDEDESK_DATA_DIR=/custom/path
153
+ ```
154
+
155
+ **Directory structure:**
156
+ ```
157
+ .claudedesk/
158
+ config/
159
+ settings.json # App settings
160
+ repos.json # Repository configuration
161
+ workspaces.json # Workspace definitions
162
+ skills/ # Custom Claude skills
163
+ usage/ # API usage tracking
164
+ artifacts/ # Session artifacts and exports
165
+ ```
166
+
167
+ ### Environment Variables
168
+
169
+ ClaudeDesk can be configured via environment variables:
170
+
171
+ | Variable | Default | Description |
172
+ |----------|---------|-------------|
173
+ | `CLAUDEDESK_PORT` | 8787 | Port to listen on |
174
+ | `CLAUDEDESK_DATA_DIR` | `~/.claudedesk` | Data directory path |
175
+ | `ALLOW_REMOTE` | false | Set to `true` for remote access |
176
+ | `GITHUB_CLIENT_ID` | - | GitHub OAuth client ID |
177
+ | `GITHUB_CLIENT_SECRET` | - | GitHub OAuth client secret |
178
+ | `GITLAB_CLIENT_ID` | - | GitLab OAuth client ID |
179
+ | `GITLAB_CLIENT_SECRET` | - | GitLab OAuth client secret |
180
+
181
+ Example:
182
+ ```bash
183
+ CLAUDEDESK_PORT=3000 ALLOW_REMOTE=true claudedesk
184
+ ```
185
+
186
+ ### Workspaces
187
+
188
+ Configure your repositories in `config/repos.json` (inside your data directory):
189
+
190
+ ```json
191
+ {
192
+ "allowedBasePaths": ["/path/to/repos"],
193
+ "repos": [
194
+ {
195
+ "id": "my-project",
196
+ "path": "/path/to/repos/my-project"
197
+ }
198
+ ]
199
+ }
200
+ ```
201
+
202
+ ### GitHub OAuth (Optional)
203
+
204
+ To enable push and PR creation via OAuth:
205
+
206
+ 1. Create a GitHub OAuth App at https://github.com/settings/developers
207
+ 2. Set the callback URL to `http://localhost:<PORT>/api/auth/github/callback`
208
+ - Replace `<PORT>` with your configured port (default: 8787)
209
+ 3. Add credentials to your environment:
210
+
211
+ ```bash
212
+ export GITHUB_CLIENT_ID=your_client_id
213
+ export GITHUB_CLIENT_SECRET=your_client_secret
214
+ ```
215
+
216
+ ### GitLab OAuth (Optional)
217
+
218
+ 1. Create a GitLab Application at https://gitlab.com/-/user_settings/applications
219
+ 2. Set the callback URL to `http://localhost:<PORT>/api/auth/gitlab/callback`
220
+ - Replace `<PORT>` with your configured port (default: 8787)
221
+ 3. Add credentials to your environment:
222
+
223
+ ```bash
224
+ export GITLAB_CLIENT_ID=your_client_id
225
+ export GITLAB_CLIENT_SECRET=your_client_secret
226
+ ```
227
+
228
+ ## API Reference
229
+
230
+ ### Health Check
231
+
232
+ **GET `/api/health`**
233
+
234
+ Returns server health status and version information. Used for Docker healthchecks and monitoring.
235
+
236
+ ```json
237
+ {
238
+ "success": true,
239
+ "data": {
240
+ "status": "ok",
241
+ "version": "2.0.0",
242
+ "uptime": 12345,
243
+ "timestamp": "2024-01-27T12:00:00.000Z"
244
+ }
245
+ }
246
+ ```
247
+
248
+ ### Ship Workflow Endpoints
249
+
250
+ These endpoints power the commit, push, and PR creation workflow.
251
+
252
+ #### Get Ship Summary
253
+
254
+ **GET `/api/terminal/sessions/:id/ship-summary`**
255
+
256
+ Returns the current state of changes ready to ship.
257
+
258
+ Query parameters:
259
+ - `repoId` (optional) - For multi-repo sessions
260
+
261
+ ```json
262
+ {
263
+ "files": [
264
+ {
265
+ "path": "src/index.ts",
266
+ "status": "modified",
267
+ "insertions": 10,
268
+ "deletions": 3,
269
+ "oldPath": null
270
+ }
271
+ ],
272
+ "totalInsertions": 10,
273
+ "totalDeletions": 3,
274
+ "currentBranch": "feature/my-feature",
275
+ "baseBranch": "main",
276
+ "hasUncommittedChanges": true,
277
+ "hasChangesToShip": true,
278
+ "unpushedCommits": 0,
279
+ "hasStagedChanges": false,
280
+ "hasUnstagedChanges": true,
281
+ "existingPR": null
282
+ }
283
+ ```
284
+
285
+ #### Generate PR Content
286
+
287
+ **POST `/api/terminal/sessions/:id/generate-pr-content`**
288
+
289
+ Uses AI to generate a PR title and description based on the changes.
290
+
291
+ Request body:
292
+ ```json
293
+ {
294
+ "repoId": "optional-repo-id",
295
+ "targetBranch": "main"
296
+ }
297
+ ```
298
+
299
+ Response:
300
+ ```json
301
+ {
302
+ "title": "Add user authentication flow",
303
+ "description": "## Summary\n- Implements login/logout functionality\n- Adds session management\n\n## Changes\n- New auth middleware\n- Updated routes"
304
+ }
305
+ ```
306
+
307
+ #### Ship Changes
308
+
309
+ **POST `/api/terminal/sessions/:id/ship`**
310
+
311
+ Commits, pushes, and optionally creates a PR.
312
+
313
+ Request body:
314
+ ```json
315
+ {
316
+ "commitMessage": "Add user authentication",
317
+ "push": true,
318
+ "createPR": true,
319
+ "prTitle": "Add user authentication flow",
320
+ "prBody": "## Summary\n...",
321
+ "targetBranch": "main",
322
+ "repoId": "optional-repo-id"
323
+ }
324
+ ```
325
+
326
+ Response:
327
+ ```json
328
+ {
329
+ "success": true,
330
+ "committed": true,
331
+ "pushed": true,
332
+ "prUrl": "https://github.com/user/repo/pull/123",
333
+ "commitHash": "abc1234"
334
+ }
335
+ ```
336
+
337
+ For complete API documentation, see [ARCHITECTURE.md](ARCHITECTURE.md).
338
+
339
+ ## Troubleshooting
340
+
341
+ ### Installation Issues
342
+
343
+ **"Permission denied" when installing globally**
344
+ ```bash
345
+ # Use npx instead (no global install needed)
346
+ npx claudedesk
347
+
348
+ # Or fix npm permissions (Linux/macOS)
349
+ sudo npm install -g claudedesk
350
+ ```
351
+
352
+ **"Command not found: claudedesk"**
353
+ ```bash
354
+ # Check npm global bin directory is in PATH
355
+ npm config get prefix
356
+ # Add to PATH if needed:
357
+ export PATH="$PATH:$(npm config get prefix)/bin"
358
+
359
+ # Or use npx
360
+ npx claudedesk
361
+ ```
362
+
363
+ ### Runtime Issues
364
+
365
+ **"Port 8787 already in use"**
366
+ ```bash
367
+ claudedesk --port 3000
368
+ ```
369
+
370
+ **"Cannot create data directory"**
371
+ ```bash
372
+ # Check permissions
373
+ ls -la ~/.claudedesk
374
+
375
+ # Use custom location with write access
376
+ claudedesk --data-dir ./my-data
377
+ ```
378
+
379
+ **"Claude CLI not found"**
380
+
381
+ ClaudeDesk requires Claude Code CLI for terminal sessions. Install it from:
382
+ https://docs.anthropic.com/en/docs/claude-code
383
+
384
+ ClaudeDesk will show a warning but continue running without terminal features if Claude CLI is not found.
385
+
386
+ ## Data Migration
387
+
388
+ ### Backing Up Your Data
389
+
390
+ ```bash
391
+ # Linux/macOS
392
+ tar -czf claudedesk-backup.tar.gz ~/.claudedesk
393
+
394
+ # Windows (PowerShell)
395
+ Compress-Archive -Path "$env:APPDATA\claudedesk" -DestinationPath claudedesk-backup.zip
396
+ ```
397
+
398
+ ### Restoring Data
399
+
400
+ ```bash
401
+ # Linux/macOS
402
+ tar -xzf claudedesk-backup.tar.gz -C ~
403
+
404
+ # Or specify custom location
405
+ claudedesk --data-dir /path/to/restored/data
406
+ ```
407
+
408
+ ## Architecture
409
+
410
+ ```
411
+ src/
412
+ api/ # Express routes
413
+ core/ # Claude invoker, git operations, session management
414
+ config/ # Settings, workspaces, skills
415
+ ui/app/ # React frontend
416
+ config/
417
+ repos.json # Repository configuration (example)
418
+ skills/ # Custom skill definitions
419
+ deploy/
420
+ docker-compose.yml # Production Docker deployment
421
+ ```
422
+
423
+ ## Contributing
424
+
425
+ Contributions welcome. Please open an issue first to discuss significant changes.
426
+
427
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
428
+
429
+ ## License
430
+
431
+ MIT
@@ -0,0 +1,128 @@
1
+ {
2
+ "_comment": "Copy this file to repos.json and customize for your environment. Remove this _comment field.",
3
+
4
+ "allowedBasePaths": [
5
+ "./repos",
6
+ "/path/to/your/repositories"
7
+ ],
8
+
9
+ "scanPaths": [
10
+ "/path/to/scan/for/repos",
11
+ "/another/scan/path"
12
+ ],
13
+
14
+ "branchPrefix": "claudedesk",
15
+
16
+ "repos": [
17
+ {
18
+ "_comment": "Example: Node.js web application with API health check proof",
19
+ "id": "my-web-app",
20
+ "path": "/path/to/your/repositories/my-web-app",
21
+ "commands": {
22
+ "install": "npm install",
23
+ "build": "npm run build",
24
+ "test": "npm test",
25
+ "run": "npm run dev"
26
+ },
27
+ "proof": {
28
+ "mode": "api",
29
+ "api": {
30
+ "healthUrl": "http://localhost:3000/api/health",
31
+ "timeout": 30000
32
+ }
33
+ },
34
+ "port": 3000,
35
+ "tunnel": {
36
+ "enabled": false
37
+ }
38
+ },
39
+ {
40
+ "_comment": "Example: Frontend app with web screenshot proof",
41
+ "id": "my-frontend",
42
+ "path": "/path/to/your/repositories/my-frontend",
43
+ "commands": {
44
+ "install": "npm install",
45
+ "build": "npm run build",
46
+ "test": "npm test",
47
+ "run": "npm run dev"
48
+ },
49
+ "proof": {
50
+ "mode": "web",
51
+ "web": {
52
+ "url": "http://localhost:5173",
53
+ "waitForSelector": "#app",
54
+ "assertText": "Welcome"
55
+ }
56
+ },
57
+ "port": 5173
58
+ },
59
+ {
60
+ "_comment": "Example: CLI tool with stdout assertion proof",
61
+ "id": "my-cli-tool",
62
+ "path": "/path/to/your/repositories/my-cli-tool",
63
+ "commands": {
64
+ "install": "npm install",
65
+ "build": "npm run build",
66
+ "test": "npm test"
67
+ },
68
+ "proof": {
69
+ "mode": "cli",
70
+ "cli": {
71
+ "command": "node dist/cli.js --version",
72
+ "assertStdout": "v1.0.0",
73
+ "assertRegex": "^v\\d+\\.\\d+\\.\\d+$"
74
+ }
75
+ }
76
+ },
77
+ {
78
+ "_comment": "Example: Monorepo with multiple services",
79
+ "id": "my-monorepo",
80
+ "path": "/path/to/your/repositories/my-monorepo",
81
+ "commands": {
82
+ "install": "npm install",
83
+ "build": "npm run build",
84
+ "test": "npm test"
85
+ },
86
+ "proof": {
87
+ "mode": "api",
88
+ "api": {
89
+ "healthUrl": "http://localhost:3001/health",
90
+ "timeout": 30000
91
+ }
92
+ },
93
+ "isMonorepo": true,
94
+ "services": [
95
+ {
96
+ "id": "@myapp/frontend",
97
+ "name": "frontend",
98
+ "path": "packages/frontend",
99
+ "framework": "Next.js",
100
+ "runScript": "dev",
101
+ "suggestedPort": 3000,
102
+ "proof": {
103
+ "mode": "web",
104
+ "web": {
105
+ "url": "http://localhost:3000"
106
+ }
107
+ }
108
+ },
109
+ {
110
+ "id": "@myapp/api",
111
+ "name": "api",
112
+ "path": "packages/api",
113
+ "framework": "Express",
114
+ "runScript": "dev",
115
+ "suggestedPort": 3001,
116
+ "proof": {
117
+ "mode": "api",
118
+ "api": {
119
+ "healthUrl": "http://localhost:3001/health",
120
+ "timeout": 30000
121
+ }
122
+ }
123
+ }
124
+ ],
125
+ "primaryService": "@myapp/frontend"
126
+ }
127
+ ]
128
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "_comment": "Copy this file to settings.json and fill in your values. Remove this _comment field.",
3
+
4
+ "setupCompleted": false,
5
+
6
+ "general": {
7
+ "theme": "dark",
8
+ "defaultProofMode": "web",
9
+ "logRetentionDays": 30,
10
+ "autoCleanupArtifacts": false
11
+ },
12
+
13
+ "voice": {
14
+ "whisperModel": "small.en",
15
+ "enabled": true
16
+ },
17
+
18
+ "notifications": {
19
+ "enabled": true,
20
+ "sound": true,
21
+ "jobComplete": true,
22
+ "jobFailed": true
23
+ },
24
+
25
+ "favorites": {
26
+ "repos": [],
27
+ "recentRepos": []
28
+ },
29
+
30
+ "github": {
31
+ "_comment": "Create a GitHub OAuth App at https://github.com/settings/developers",
32
+ "clientId": "your-github-oauth-client-id"
33
+ },
34
+
35
+ "gitlab": {
36
+ "_comment": "Create a GitLab OAuth App at https://gitlab.com/-/user_settings/applications",
37
+ "clientId": "your-gitlab-oauth-client-id"
38
+ },
39
+
40
+ "docker": {
41
+ "enabled": false,
42
+ "autoStart": false,
43
+ "services": {
44
+ "postgres": {
45
+ "enabled": false,
46
+ "port": 5432,
47
+ "image": "postgres",
48
+ "version": "16-alpine",
49
+ "username": "claudedesk",
50
+ "password": "your-secure-random-password",
51
+ "database": "claudedesk_dev",
52
+ "dataVolume": true
53
+ },
54
+ "redis": {
55
+ "enabled": false,
56
+ "port": 6379,
57
+ "image": "redis",
58
+ "version": "7-alpine",
59
+ "dataVolume": false
60
+ }
61
+ },
62
+ "networkName": "claudedesk-dev-network"
63
+ }
64
+ }