open-walnut 0.3.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/bin/open-walnut.js +2 -0
  4. package/bin/walnut.js +2 -0
  5. package/dist/cli.js +137849 -0
  6. package/dist/daemon-binaries/acp-worker.js +44 -0
  7. package/dist/daemon-binaries/acp-worker.js.version +1 -0
  8. package/dist/data/skills/daily-standup/SKILL.md +16 -0
  9. package/dist/data/skills/install-plugin/SKILL.md +118 -0
  10. package/dist/data/skills/learn/SKILL.md +46 -0
  11. package/dist/data/skills/register-repo/SKILL.md +20 -0
  12. package/dist/data/skills/setup-cloud-companion/SKILL.md +326 -0
  13. package/dist/data/skills/triage/SKILL.md +23 -0
  14. package/dist/data/skills/walnut-calendar/SKILL.md +92 -0
  15. package/dist/data/skills/walnut-manage-repos/SKILL.md +107 -0
  16. package/dist/data/skills/walnut-peer-sessions/SKILL.md +61 -0
  17. package/dist/data/skills/walnut-register-repo/SKILL.md +72 -0
  18. package/dist/data/skills/walnut-register-repo/references/yaml-format.md +111 -0
  19. package/dist/data/skills/walnut-register-repo/scripts/validate-repo.py +177 -0
  20. package/dist/data/skills/walnut-routines/SKILL.md +65 -0
  21. package/dist/data/skills/weekly-review/SKILL.md +22 -0
  22. package/dist/data/walnut-calendar.swift +213 -0
  23. package/dist/data/walnut-extract.swift +80 -0
  24. package/dist/hooks/on-compact.js +976 -0
  25. package/dist/hooks/on-stop.js +1329 -0
  26. package/dist/integrations/jira/index.js +4200 -0
  27. package/dist/integrations/jira/manifest.json +26 -0
  28. package/dist/integrations/local/index.js +51 -0
  29. package/dist/integrations/local/manifest.json +10 -0
  30. package/dist/integrations/ms-todo/index.js +4672 -0
  31. package/dist/integrations/ms-todo/manifest.json +17 -0
  32. package/dist/session-server/index.js +1382 -0
  33. package/dist/web/server.js +135275 -0
  34. package/dist/web/static/assets/apl-B4CMkyY2.js +1 -0
  35. package/dist/web/static/assets/asciiarmor-Df11BRmG.js +1 -0
  36. package/dist/web/static/assets/asn1-EdZsLKOL.js +1 -0
  37. package/dist/web/static/assets/asterisk-B-8jnY81.js +1 -0
  38. package/dist/web/static/assets/brainfuck-C4LP7Hcl.js +1 -0
  39. package/dist/web/static/assets/clike-B9uivgTg.js +1 -0
  40. package/dist/web/static/assets/clojure-BMjYHr_A.js +1 -0
  41. package/dist/web/static/assets/cmake-BQqOBYOt.js +1 -0
  42. package/dist/web/static/assets/cobol-CWcv1MsR.js +1 -0
  43. package/dist/web/static/assets/coffeescript-S37ZYGWr.js +1 -0
  44. package/dist/web/static/assets/commonlisp-DBKNyK5s.js +1 -0
  45. package/dist/web/static/assets/crystal-SjHAIU92.js +1 -0
  46. package/dist/web/static/assets/css-BnMrqG3P.js +1 -0
  47. package/dist/web/static/assets/cypher-C_CwsFkJ.js +1 -0
  48. package/dist/web/static/assets/d-pRatUO7H.js +1 -0
  49. package/dist/web/static/assets/diff-DbItnlRl.js +1 -0
  50. package/dist/web/static/assets/dockerfile-BKs6k2Af.js +1 -0
  51. package/dist/web/static/assets/dtd-DF_7sFjM.js +1 -0
  52. package/dist/web/static/assets/dylan-DwRh75JA.js +1 -0
  53. package/dist/web/static/assets/ebnf-CDyGwa7X.js +1 -0
  54. package/dist/web/static/assets/ecl-Cabwm37j.js +1 -0
  55. package/dist/web/static/assets/eiffel-CnydiIhH.js +1 -0
  56. package/dist/web/static/assets/elm-vLlmbW-K.js +1 -0
  57. package/dist/web/static/assets/erlang-BNw1qcRV.js +1 -0
  58. package/dist/web/static/assets/factor-kuTfRLto.js +1 -0
  59. package/dist/web/static/assets/fcl-Kvtd6kyn.js +1 -0
  60. package/dist/web/static/assets/forth-Ffai-XNe.js +1 -0
  61. package/dist/web/static/assets/fortran-DYz_wnZ1.js +1 -0
  62. package/dist/web/static/assets/gas-Bneqetm1.js +1 -0
  63. package/dist/web/static/assets/gherkin-heZmZLOM.js +1 -0
  64. package/dist/web/static/assets/groovy-D9Dt4D0W.js +1 -0
  65. package/dist/web/static/assets/haskell-Cw1EW3IL.js +1 -0
  66. package/dist/web/static/assets/haxe-H-WmDvRZ.js +1 -0
  67. package/dist/web/static/assets/http-DBlCnlav.js +1 -0
  68. package/dist/web/static/assets/idl-BEugSyMb.js +1 -0
  69. package/dist/web/static/assets/index-B3K5yAdA.js +1 -0
  70. package/dist/web/static/assets/index-B7OvpXOs.js +632 -0
  71. package/dist/web/static/assets/index-C07UNJIJ.js +1 -0
  72. package/dist/web/static/assets/index-C8k-3wfu.js +2 -0
  73. package/dist/web/static/assets/index-CBXGsT3t.js +1 -0
  74. package/dist/web/static/assets/index-CUrO3qpX.js +1 -0
  75. package/dist/web/static/assets/index-CpTvBBAa.js +1 -0
  76. package/dist/web/static/assets/index-D4J6slTf.js +1 -0
  77. package/dist/web/static/assets/index-DUgC5K_q.js +3 -0
  78. package/dist/web/static/assets/index-DhqXE1wa.js +1 -0
  79. package/dist/web/static/assets/index-DkGqHTCk.js +1 -0
  80. package/dist/web/static/assets/index-DsxFiBic.js +1 -0
  81. package/dist/web/static/assets/index-Dz3umkfm.js +1 -0
  82. package/dist/web/static/assets/index-G2v0oaqp.js +1 -0
  83. package/dist/web/static/assets/index-GNDKJKwy.js +1 -0
  84. package/dist/web/static/assets/index-U1CVtNUH.css +32 -0
  85. package/dist/web/static/assets/index-ft4kpQXq.js +1 -0
  86. package/dist/web/static/assets/index-ls7h0u-p.js +1 -0
  87. package/dist/web/static/assets/index-nL5l5WPW.js +7 -0
  88. package/dist/web/static/assets/javascript-iXu5QeM3.js +1 -0
  89. package/dist/web/static/assets/julia-DuME0IfC.js +1 -0
  90. package/dist/web/static/assets/livescript-BwQOo05w.js +1 -0
  91. package/dist/web/static/assets/lua-VAEuO923.js +1 -0
  92. package/dist/web/static/assets/mathematica-DTrFuWx2.js +1 -0
  93. package/dist/web/static/assets/mbox-CNhZ1qSd.js +1 -0
  94. package/dist/web/static/assets/mirc-CjQqDB4T.js +1 -0
  95. package/dist/web/static/assets/mllike-CXdrOF99.js +1 -0
  96. package/dist/web/static/assets/modelica-Dc1JOy9r.js +1 -0
  97. package/dist/web/static/assets/mscgen-BA5vi2Kp.js +1 -0
  98. package/dist/web/static/assets/mumps-BT43cFF4.js +1 -0
  99. package/dist/web/static/assets/nginx-DdIZxoE0.js +1 -0
  100. package/dist/web/static/assets/nsis-LdVXkNf5.js +1 -0
  101. package/dist/web/static/assets/ntriples-BfvgReVJ.js +1 -0
  102. package/dist/web/static/assets/octave-Ck1zUtKM.js +1 -0
  103. package/dist/web/static/assets/oz-BzwKVEFT.js +1 -0
  104. package/dist/web/static/assets/pascal--L3eBynH.js +1 -0
  105. package/dist/web/static/assets/perl-CdXCOZ3F.js +1 -0
  106. package/dist/web/static/assets/pig-CevX1Tat.js +1 -0
  107. package/dist/web/static/assets/powershell-CFHJl5sT.js +1 -0
  108. package/dist/web/static/assets/properties-C78fOPTZ.js +1 -0
  109. package/dist/web/static/assets/protobuf-ChK-085T.js +1 -0
  110. package/dist/web/static/assets/pug-DeIclll2.js +1 -0
  111. package/dist/web/static/assets/puppet-DMA9R1ak.js +1 -0
  112. package/dist/web/static/assets/python-BuPzkPfP.js +1 -0
  113. package/dist/web/static/assets/q-pXgVlZs6.js +1 -0
  114. package/dist/web/static/assets/r-B6wPVr8A.js +1 -0
  115. package/dist/web/static/assets/rpm-CTu-6PCP.js +1 -0
  116. package/dist/web/static/assets/ruby-B2Rjki9n.js +1 -0
  117. package/dist/web/static/assets/sas-B4kiWyti.js +1 -0
  118. package/dist/web/static/assets/scheme-C41bIUwD.js +1 -0
  119. package/dist/web/static/assets/shell-CjFT_Tl9.js +1 -0
  120. package/dist/web/static/assets/sieve-C3Gn_uJK.js +1 -0
  121. package/dist/web/static/assets/simple-mode-GW_nhZxv.js +1 -0
  122. package/dist/web/static/assets/smalltalk-CnHTOXQT.js +1 -0
  123. package/dist/web/static/assets/solr-DehyRSwq.js +1 -0
  124. package/dist/web/static/assets/sparql-DkYu6x3z.js +1 -0
  125. package/dist/web/static/assets/spreadsheet-BCZA_wO0.js +1 -0
  126. package/dist/web/static/assets/sql-D0XecflT.js +1 -0
  127. package/dist/web/static/assets/stex-C3f8Ysf7.js +1 -0
  128. package/dist/web/static/assets/stylus-B533Al4x.js +1 -0
  129. package/dist/web/static/assets/swift-BzpIVaGY.js +1 -0
  130. package/dist/web/static/assets/tcl-DVfN8rqt.js +1 -0
  131. package/dist/web/static/assets/textile-CnDTJFAw.js +1 -0
  132. package/dist/web/static/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  133. package/dist/web/static/assets/tiki-DGYXhP31.js +1 -0
  134. package/dist/web/static/assets/toml-Bm5Em-hy.js +1 -0
  135. package/dist/web/static/assets/troff-wAsdV37c.js +1 -0
  136. package/dist/web/static/assets/ttcn-CfJYG6tj.js +1 -0
  137. package/dist/web/static/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  138. package/dist/web/static/assets/turtle-B1tBg_DP.js +1 -0
  139. package/dist/web/static/assets/vb-CmGdzxic.js +1 -0
  140. package/dist/web/static/assets/vbscript-BuJXcnF6.js +1 -0
  141. package/dist/web/static/assets/velocity-D8B20fx6.js +1 -0
  142. package/dist/web/static/assets/verilog-C6RDOZhf.js +1 -0
  143. package/dist/web/static/assets/vhdl-lSbBsy5d.js +1 -0
  144. package/dist/web/static/assets/webidl-ZXfAyPTL.js +1 -0
  145. package/dist/web/static/assets/xquery-DzFWVndE.js +1 -0
  146. package/dist/web/static/assets/yacas-BJ4BC0dw.js +1 -0
  147. package/dist/web/static/assets/z80-Hz9HOZM7.js +1 -0
  148. package/dist/web/static/index.html +22 -0
  149. package/dist/web/static/walnut-icon.png +0 -0
  150. package/dist/workers/git-compaction-worker.js +898 -0
  151. package/dist/workers/qmd-index-worker.js +97162 -0
  152. package/package.json +143 -0
  153. package/patches/@anthropic-ai+claude-agent-sdk+0.2.50.patch +13 -0
  154. package/scripts/patch-qmd.mjs +171 -0
  155. package/scripts/postinstall.mjs +120 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Walnut 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,339 @@
1
+ # Open Walnut - Your Personal AI
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
+ [![CI](https://github.com/EvanZhang008/open-walnut/actions/workflows/ci.yml/badge.svg)](https://github.com/EvanZhang008/open-walnut/actions)
5
+ [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D22-green.svg)](https://nodejs.org/)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-blue.svg)](https://www.typescriptlang.org/)
7
+ [![GitHub stars](https://img.shields.io/github/stars/EvanZhang008/open-walnut?style=social)](https://github.com/EvanZhang008/open-walnut)
8
+
9
+ [![Open Walnut demo](docs/assets/demo-video-thumb.png)](https://youtu.be/uN4WCZ-n2mw)
10
+
11
+ <p align="center"><b><a href="https://youtu.be/uN4WCZ-n2mw">Watch the 3-minute demo</a></b></p>
12
+
13
+ Open Walnut is a self-hosted home for your AI work. It brings your personal AI, Claude
14
+ Code sessions, tasks, notes, and long-term memory into one web app.
15
+
16
+ Use Walnut to plan work, organize tasks, find context in your notes and memory, and
17
+ start coding sessions. Run Claude Code on your laptop or remote SSH hosts, follow
18
+ multiple sessions from one browser, and review every file they change. Open Walnut is
19
+ local-first, self-hosted, and has no telemetry.
20
+
21
+ ## What Open Walnut Does
22
+
23
+ - **Personal AI**: Ask Walnut to manage tasks, find information, write and search
24
+ notes, start coding sessions, and run scheduled routines.
25
+ - **Claude Code workspace**: Run and monitor multiple Claude Code sessions side by side
26
+ with live output, permission controls, terminals, files, and session history.
27
+ - **Local and remote sessions**: Use the same web app for sessions on your laptop and
28
+ any configured SSH host.
29
+ - **Durable sessions**: Sessions keep running across browser disconnects, dropped SSH
30
+ connections, and Walnut server restarts.
31
+ - **Change review**: Inspect a per-session diff, comment on individual lines, and send
32
+ the review back to the same session.
33
+ - **Tasks and projects**: Organize work as `Project -> Task -> Subtask`, with an Inbox
34
+ for tasks that do not belong to a project.
35
+ - **Notes and memory**: Keep Markdown notes with wiki links and search them together
36
+ with task, session, and memory data.
37
+ - **Local-first storage**: Core data is stored under `~/.open-walnut/` in JSON, YAML,
38
+ Markdown, and SQLite files.
39
+
40
+ ## Quick Start
41
+
42
+ ### Requirements
43
+
44
+ - Node.js 22 or newer
45
+ - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) for coding sessions
46
+ - An Anthropic API key, AWS Bedrock credentials, or another supported model provider
47
+ for Walnut
48
+
49
+ Claude Code and Walnut authenticate separately. Coding sessions use your existing
50
+ Claude Code CLI login, while Walnut uses the model provider selected during setup.
51
+
52
+ ### Install
53
+
54
+ ```bash
55
+ git clone https://github.com/EvanZhang008/open-walnut.git
56
+ cd open-walnut
57
+ npm install
58
+ npm start
59
+ ```
60
+
61
+ Open [http://localhost:3456](http://localhost:3456) and follow the setup screen. The
62
+ first start downloads the default local embedding model, Qwen3-Embedding-0.6B
63
+ (approximately 640 MB), in the background.
64
+
65
+ For provider options, remote hosts, and troubleshooting, see
66
+ [Getting Started](GETTING_STARTED.md).
67
+
68
+ ### Set Up with Claude Code
69
+
70
+ If Claude Code is already configured on your machine, you can ask it to install and
71
+ verify Open Walnut. Paste this into an authenticated Claude Code session:
72
+
73
+ ```text
74
+ Set up Open Walnut for me: read and run the skill at
75
+ https://github.com/EvanZhang008/open-walnut/blob/main/skills/setup-walnut/SKILL.md
76
+ ```
77
+
78
+ The skill mirrors your existing provider setup, installs dependencies, starts Walnut,
79
+ and verifies the connection with a real model request. Review the
80
+ [setup skill](skills/setup-walnut/SKILL.md) for the exact steps.
81
+
82
+ ## Product Tour
83
+
84
+ ### Start a Session from a Prompt
85
+
86
+ Choose a working directory, describe the work, and start a Claude Code session. The
87
+ task stays attached to the session while its output streams in the browser.
88
+
89
+ ![Start a Claude Code session from a prompt and working directory](docs/assets/gifs/01-task-to-session.gif)
90
+
91
+ ### Use Claude Code from the Browser
92
+
93
+ Chat with Claude Code, change its mode or model, open a terminal, browse files, inspect
94
+ history, and fork the session without leaving the page.
95
+
96
+ ![Claude Code session with chat, terminal, files, and history](docs/assets/gifs/02-session-panel.gif)
97
+
98
+ ### Keep Work in One View
99
+
100
+ The home page combines tasks, Walnut, and Claude Code session columns. You can move
101
+ between planning, execution, and review without rebuilding context in another app.
102
+
103
+ ![Open Walnut home page with tasks, Walnut, and Claude Code sessions](docs/assets/gifs/04-home-three-pane.gif)
104
+
105
+ ### Set Your Active Work
106
+
107
+ Move pinned tasks between Focus, Satellite, and Wait to show what needs attention now,
108
+ what can run in parallel, and what is blocked.
109
+
110
+ ![Pinned task tiers for Focus, Satellite, and Wait](docs/assets/gifs/03-focus-tiers.gif)
111
+
112
+ ### Search Notes and Memory
113
+
114
+ Write Markdown notes with wiki links and backlinks. Walnut can search notes and memory
115
+ through local keyword and vector indexes.
116
+
117
+ ![Search across notes and memory](docs/assets/gifs/05-notes-memory.gif)
118
+
119
+ ### Review Session Changes
120
+
121
+ Open the Changed view to inspect the files edited by one session. Select code or leave
122
+ line comments, then send the review back to that session.
123
+
124
+ ![Review the files changed by a Claude Code session](docs/assets/gifs/06-changed-review.gif)
125
+
126
+ ## Local and Remote Sessions
127
+
128
+ Open Walnut uses the same session system for local and remote work. A small daemon on
129
+ each host owns the long-running Claude Code processes, while the web app connects to
130
+ those daemons.
131
+
132
+ ![Open Walnut topology for local and remote Claude Code sessions](docs/assets/remote-topology.svg)
133
+
134
+ - A session keeps running if the browser, SSH tunnel, or Walnut server disconnects.
135
+ - When Walnut reconnects, it finds the existing process and restores its history from
136
+ the on-disk session log.
137
+ - Walnut deploys and updates its daemon over SSH. No manual copy step is required.
138
+ - Chat, terminal access, files, diffs, commands, and skills work on remote hosts.
139
+
140
+ Add remote hosts to `~/.open-walnut/config.yaml`:
141
+
142
+ ```yaml
143
+ hosts:
144
+ my-server:
145
+ hostname: dev.example.com
146
+ user: myuser
147
+ # Optional: identity_file, port, shell_setup
148
+ ```
149
+
150
+ See [Remote sessions via SSH](GETTING_STARTED.md#remote-sessions-via-ssh) for the full
151
+ setup.
152
+
153
+ ## Change Review and Workflows
154
+
155
+ The Changed view reconstructs a diff from the selected session's own history rather
156
+ than the repository's current Git state. This keeps edits attributed to the correct
157
+ session when several sessions share a repository.
158
+
159
+ - View changes as a split or unified diff.
160
+ - Select code and ask the session about it.
161
+ - Add line comments and send them as one review.
162
+ - Group changes by repository when a session works across several repositories.
163
+
164
+ Open Walnut also displays dynamic Claude Code workflows as a live graph. Each node
165
+ shows a subagent's status, model, token use, and duration. Select a node to read its
166
+ transcript or inspect the script that created the workflow.
167
+
168
+ ![Dynamic Claude Code workflow displayed as a live graph](docs/assets/workflow-viz.png)
169
+
170
+ The graph is restored from its on-disk manifest after a reload or reconnect.
171
+
172
+ ## Tasks, Notes, and Memory
173
+
174
+ ### Tasks
175
+
176
+ Tasks are the main unit of work in Open Walnut.
177
+
178
+ - Projects group related tasks; unassigned tasks stay in the Inbox.
179
+ - Tasks can contain subtasks, priorities, due dates, dependencies, tags, and notes.
180
+ - Session activity updates task progress, while final completion remains a human
181
+ decision.
182
+ - The task board supports search, filters, bulk actions, and drag-and-drop ordering.
183
+ - Optional plugins provide two-way sync with Microsoft To-Do and Jira.
184
+
185
+ ### Notes
186
+
187
+ The notes workspace supports Markdown, `[[wiki-links]]`, backlinks, folders,
188
+ attachments, slash commands, and rich editing. Notes remain ordinary files under
189
+ `~/.open-walnut/notes/`.
190
+
191
+ Walnut can search your notes, and `notes/AGENTS.md` can provide shared instructions to
192
+ Claude Code sessions.
193
+
194
+ ### Memory
195
+
196
+ Walnut records useful context in daily logs, project memory, repository memory, and
197
+ session summaries. A background consolidation job updates topic pages so important
198
+ context remains easy to find without loading every old conversation.
199
+
200
+ Search combines BM25 keyword matching, local vector embeddings, optional reranking,
201
+ and freshness weighting. Memory, notes, tasks, and sessions use separate indexes so
202
+ one source does not overwhelm the others.
203
+
204
+ ## Automation and Extensions
205
+
206
+ - **Routines**: Run one-time, interval, and cron-based jobs from the Routines page.
207
+ - **Custom agents**: Create focused agents with separate conversations and memory.
208
+ - **Commands and skills**: Browse and run local or remote Claude Code commands and
209
+ skills from the web app.
210
+ - **Task integrations**: Sync Microsoft To-Do and Jira through built-in plugins.
211
+ - **Custom plugins**: Add private integrations under
212
+ `~/.open-walnut/plugins/<name>/` without changing the repository.
213
+ - **Notifications**: Send optional Slack notifications for important events.
214
+
215
+ ## iOS Companion
216
+
217
+ The beta SwiftUI app provides access to tasks, notes, and live sessions from an iPhone.
218
+ It pairs with the web app by QR code. An optional self-hosted cloud companion can
219
+ connect the phone to your machines when you are away from your local network.
220
+
221
+ See [Cloud sync](docs/reference/cloud-sync.md) for the architecture and setup.
222
+
223
+ ## Data and Privacy
224
+
225
+ - Core app data is stored locally under `~/.open-walnut/`.
226
+ - Open Walnut does not include telemetry or require an Open Walnut account.
227
+ - Model prompts are sent only to the provider you configure.
228
+ - Remote sessions connect only to hosts you configure.
229
+ - Cloud access, task integrations, Slack, and Git remotes are optional.
230
+ - Private plugins stay outside the repository.
231
+
232
+ ## Web Pages
233
+
234
+ | Route | Purpose |
235
+ |---|---|
236
+ | `/` | Walnut, tasks, and Claude Code session columns |
237
+ | `/tasks` | Project and task workspace |
238
+ | `/tasks/:id` | Task details, subtasks, sessions, notes, and dependencies |
239
+ | `/notes` | Markdown notes workspace |
240
+ | `/memory` | Memory browser |
241
+ | `/calendar` | Calendar view |
242
+ | `/routines` | Scheduled routines and automation |
243
+ | `/agents` | Custom agents and their conversations |
244
+ | `/commands` | Claude Code commands |
245
+ | `/skills` | Claude Code and Walnut skills |
246
+ | `/settings` | Providers, integrations, repositories, usage, and app settings |
247
+
248
+ Sessions open as columns on the home page. Legacy `/sessions?id=...` links redirect
249
+ there automatically.
250
+
251
+ ## CLI
252
+
253
+ Both `walnut` and `open-walnut` invoke the same CLI.
254
+
255
+ ```bash
256
+ walnut web [--port 3456] # Start the web app
257
+ walnut add "Task title" --project X # Create a task
258
+ walnut tasks [--status todo] # List tasks
259
+ walnut projects # List projects
260
+ walnut done <id> # Complete a task
261
+ walnut sessions # List sessions
262
+ walnut start <task_id> # Start a Claude Code session
263
+ walnut recall "query" # Search memory and tasks
264
+ walnut chat [question] # Talk to Walnut
265
+ walnut logs [-f] [--json] # Read structured logs
266
+ ```
267
+
268
+ Use `walnut --help` for all commands and options.
269
+
270
+ ## Configuration
271
+
272
+ Configuration is stored in `~/.open-walnut/config.yaml`. The Settings page covers model
273
+ providers, search, integrations, repositories, session hosts, usage, and other app
274
+ options.
275
+
276
+ Open Walnut supports Anthropic, AWS Bedrock, OpenAI-compatible APIs, Google Generative
277
+ AI, and Ollama. See [Getting Started](GETTING_STARTED.md#provider-configuration) for
278
+ provider examples.
279
+
280
+ ## Project Structure
281
+
282
+ ```text
283
+ src/
284
+ agent/ # Personal AI loop, tools, providers, and context
285
+ commands/ # CLI commands
286
+ core/ # Tasks, memory, search, sessions, routines, and config
287
+ integrations/ # Built-in task integrations
288
+ logging/ # Structured logging and redaction
289
+ providers/ # Claude Code sessions, daemons, and subagents
290
+ web/ # Express server, REST API, and WebSocket handlers
291
+ web/ # React web app
292
+ ios-native/ # SwiftUI companion app
293
+ infra/ # Optional cloud companion infrastructure
294
+ docs/ # Design, decisions, investigations, and references
295
+ tests/ # Unit, integration, end-to-end, and browser tests
296
+ ```
297
+
298
+ Read [Architecture](ARCHITECTURE.md) for the system design and the
299
+ [documentation index](docs/README.md) for deeper technical documentation.
300
+
301
+ ## Development
302
+
303
+ ```bash
304
+ npm run build # Build the server and session daemon
305
+ cd web && npx vite build # Build the web app
306
+ npm run dev # Watch the server
307
+ cd web && npx vite # Run the web app with hot reload
308
+ npm run test:quick # Run the default fast test suite
309
+ npm run test:focus -- <test-path> # Run focused tests
310
+ npm run lint # Type-check the server
311
+ ```
312
+
313
+ The backend development server and Vite can also be started together with:
314
+
315
+ ```bash
316
+ npm run web:dev
317
+ ```
318
+
319
+ ## Tech Stack
320
+
321
+ - Node.js, Express, TypeScript, and SQLite
322
+ - React, Vite, and TypeScript
323
+ - Anthropic Claude and other configurable model providers
324
+ - Claude Code CLI with stream-JSON I/O
325
+ - QMD search with BM25 and local vector embeddings
326
+ - Vitest and Playwright
327
+
328
+ ## Star History
329
+
330
+ [![Open Walnut star history](docs/assets/star-history.svg)](https://github.com/EvanZhang008/open-walnut/stargazers)
331
+
332
+ ## Contributing
333
+
334
+ Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a
335
+ pull request.
336
+
337
+ ## License
338
+
339
+ [MIT](LICENSE)
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/cli.js';
package/bin/walnut.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/cli.js';