@cryptiklemur/lattice 0.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 (162) hide show
  1. package/.editorconfig +12 -0
  2. package/.github/workflows/release.yml +44 -0
  3. package/.impeccable.md +66 -0
  4. package/.releaserc.json +32 -0
  5. package/.serena/project.yml +138 -0
  6. package/CLAUDE.md +35 -0
  7. package/CONTRIBUTING.md +93 -0
  8. package/LICENSE +21 -0
  9. package/README.md +83 -0
  10. package/bun.lock +1459 -0
  11. package/bunfig.toml +2 -0
  12. package/client/index.html +32 -0
  13. package/client/package.json +37 -0
  14. package/client/public/icons/icon-192.svg +11 -0
  15. package/client/public/icons/icon-512.svg +11 -0
  16. package/client/public/manifest.json +24 -0
  17. package/client/public/sw.js +61 -0
  18. package/client/src/App.tsx +28 -0
  19. package/client/src/components/auth/PassphrasePrompt.tsx +70 -0
  20. package/client/src/components/chat/ChatInput.tsx +241 -0
  21. package/client/src/components/chat/ChatView.tsx +727 -0
  22. package/client/src/components/chat/Message.tsx +362 -0
  23. package/client/src/components/chat/ModelSelector.tsx +87 -0
  24. package/client/src/components/chat/PermissionModeSelector.tsx +41 -0
  25. package/client/src/components/chat/StatusBar.tsx +50 -0
  26. package/client/src/components/chat/ToolGroup.tsx +129 -0
  27. package/client/src/components/chat/ToolResultRenderer.tsx +343 -0
  28. package/client/src/components/chat/toolSummary.ts +41 -0
  29. package/client/src/components/dashboard/DashboardView.tsx +219 -0
  30. package/client/src/components/dashboard/ProjectDashboardView.tsx +168 -0
  31. package/client/src/components/mesh/NodeBadge.tsx +24 -0
  32. package/client/src/components/mesh/PairingDialog.tsx +281 -0
  33. package/client/src/components/panels/FileBrowser.tsx +241 -0
  34. package/client/src/components/panels/StickyNotes.tsx +187 -0
  35. package/client/src/components/panels/Terminal.tsx +128 -0
  36. package/client/src/components/project-settings/ProjectClaude.tsx +304 -0
  37. package/client/src/components/project-settings/ProjectEnvironment.tsx +235 -0
  38. package/client/src/components/project-settings/ProjectGeneral.tsx +76 -0
  39. package/client/src/components/project-settings/ProjectMcp.tsx +232 -0
  40. package/client/src/components/project-settings/ProjectPermissions.tsx +209 -0
  41. package/client/src/components/project-settings/ProjectRules.tsx +277 -0
  42. package/client/src/components/project-settings/ProjectSettingsView.tsx +99 -0
  43. package/client/src/components/project-settings/ProjectSkills.tsx +91 -0
  44. package/client/src/components/settings/Appearance.tsx +151 -0
  45. package/client/src/components/settings/ClaudeSettings.tsx +151 -0
  46. package/client/src/components/settings/Environment.tsx +185 -0
  47. package/client/src/components/settings/GlobalMcp.tsx +207 -0
  48. package/client/src/components/settings/GlobalSkills.tsx +125 -0
  49. package/client/src/components/settings/MeshStatus.tsx +145 -0
  50. package/client/src/components/settings/SettingsView.tsx +57 -0
  51. package/client/src/components/settings/SkillMarketplace.tsx +175 -0
  52. package/client/src/components/settings/mcp-shared.tsx +194 -0
  53. package/client/src/components/settings/skill-shared.tsx +177 -0
  54. package/client/src/components/setup/SetupWizard.tsx +750 -0
  55. package/client/src/components/sidebar/NodeSettingsModal.tsx +180 -0
  56. package/client/src/components/sidebar/ProjectDropdown.tsx +43 -0
  57. package/client/src/components/sidebar/ProjectRail.tsx +291 -0
  58. package/client/src/components/sidebar/SearchFilter.tsx +52 -0
  59. package/client/src/components/sidebar/SessionList.tsx +384 -0
  60. package/client/src/components/sidebar/SettingsSidebar.tsx +128 -0
  61. package/client/src/components/sidebar/Sidebar.tsx +209 -0
  62. package/client/src/components/sidebar/UserIsland.tsx +59 -0
  63. package/client/src/components/sidebar/UserMenu.tsx +101 -0
  64. package/client/src/components/ui/CommandPalette.tsx +321 -0
  65. package/client/src/components/ui/ErrorBoundary.tsx +56 -0
  66. package/client/src/components/ui/IconPicker.tsx +209 -0
  67. package/client/src/components/ui/LatticeLogomark.tsx +19 -0
  68. package/client/src/components/ui/PopupMenu.tsx +98 -0
  69. package/client/src/components/ui/SaveFooter.tsx +38 -0
  70. package/client/src/components/ui/Toast.tsx +112 -0
  71. package/client/src/hooks/useMesh.ts +89 -0
  72. package/client/src/hooks/useProjectSettings.ts +56 -0
  73. package/client/src/hooks/useProjects.ts +66 -0
  74. package/client/src/hooks/useSaveState.ts +59 -0
  75. package/client/src/hooks/useSession.ts +317 -0
  76. package/client/src/hooks/useSidebar.ts +74 -0
  77. package/client/src/hooks/useSkills.ts +30 -0
  78. package/client/src/hooks/useTheme.ts +114 -0
  79. package/client/src/hooks/useWebSocket.ts +26 -0
  80. package/client/src/main.tsx +10 -0
  81. package/client/src/providers/WebSocketProvider.tsx +146 -0
  82. package/client/src/router.tsx +391 -0
  83. package/client/src/stores/mesh.ts +78 -0
  84. package/client/src/stores/session.ts +322 -0
  85. package/client/src/stores/sidebar.ts +336 -0
  86. package/client/src/stores/theme.ts +44 -0
  87. package/client/src/styles/global.css +167 -0
  88. package/client/src/styles/theme-vars.css +18 -0
  89. package/client/src/themes/index.ts +79 -0
  90. package/client/src/utils/findDuplicateKeys.ts +12 -0
  91. package/client/tsconfig.json +14 -0
  92. package/client/vite.config.ts +20 -0
  93. package/package.json +46 -0
  94. package/server/package.json +22 -0
  95. package/server/src/auth/passphrase.ts +48 -0
  96. package/server/src/config.ts +55 -0
  97. package/server/src/daemon.ts +338 -0
  98. package/server/src/features/ralph-loop.ts +173 -0
  99. package/server/src/features/scheduler.ts +281 -0
  100. package/server/src/features/sticky-notes.ts +102 -0
  101. package/server/src/handlers/chat.ts +194 -0
  102. package/server/src/handlers/fs.ts +84 -0
  103. package/server/src/handlers/loop.ts +37 -0
  104. package/server/src/handlers/mesh.ts +125 -0
  105. package/server/src/handlers/notes.ts +45 -0
  106. package/server/src/handlers/project-settings.ts +174 -0
  107. package/server/src/handlers/scheduler.ts +47 -0
  108. package/server/src/handlers/session.ts +159 -0
  109. package/server/src/handlers/settings.ts +109 -0
  110. package/server/src/handlers/skills.ts +380 -0
  111. package/server/src/handlers/terminal.ts +70 -0
  112. package/server/src/identity.ts +26 -0
  113. package/server/src/index.ts +190 -0
  114. package/server/src/mesh/connector.ts +209 -0
  115. package/server/src/mesh/discovery.ts +123 -0
  116. package/server/src/mesh/pairing.ts +94 -0
  117. package/server/src/mesh/peers.ts +52 -0
  118. package/server/src/mesh/proxy.ts +103 -0
  119. package/server/src/mesh/session-sync.ts +107 -0
  120. package/server/src/project/context-breakdown.ts +289 -0
  121. package/server/src/project/file-browser.ts +106 -0
  122. package/server/src/project/project-files.ts +267 -0
  123. package/server/src/project/registry.ts +57 -0
  124. package/server/src/project/sdk-bridge.ts +566 -0
  125. package/server/src/project/session.ts +432 -0
  126. package/server/src/project/terminal.ts +69 -0
  127. package/server/src/tls.ts +51 -0
  128. package/server/src/ws/broadcast.ts +31 -0
  129. package/server/src/ws/router.ts +104 -0
  130. package/server/src/ws/server.ts +2 -0
  131. package/server/tsconfig.json +16 -0
  132. package/shared/package.json +11 -0
  133. package/shared/src/constants.ts +7 -0
  134. package/shared/src/index.ts +4 -0
  135. package/shared/src/messages.ts +638 -0
  136. package/shared/src/models.ts +136 -0
  137. package/shared/src/project-settings.ts +45 -0
  138. package/shared/tsconfig.json +11 -0
  139. package/themes/amoled.json +20 -0
  140. package/themes/ayu-light.json +9 -0
  141. package/themes/catppuccin-latte.json +9 -0
  142. package/themes/catppuccin-mocha.json +9 -0
  143. package/themes/clay-light.json +10 -0
  144. package/themes/clay.json +10 -0
  145. package/themes/dracula.json +9 -0
  146. package/themes/everforest-light.json +9 -0
  147. package/themes/everforest.json +9 -0
  148. package/themes/github-light.json +9 -0
  149. package/themes/gruvbox-dark.json +9 -0
  150. package/themes/gruvbox-light.json +9 -0
  151. package/themes/monokai.json +9 -0
  152. package/themes/nord-light.json +9 -0
  153. package/themes/nord.json +9 -0
  154. package/themes/one-dark.json +9 -0
  155. package/themes/one-light.json +9 -0
  156. package/themes/rose-pine-dawn.json +9 -0
  157. package/themes/rose-pine.json +9 -0
  158. package/themes/solarized-dark.json +9 -0
  159. package/themes/solarized-light.json +9 -0
  160. package/themes/tokyo-night-light.json +9 -0
  161. package/themes/tokyo-night.json +9 -0
  162. package/tsconfig.json +26 -0
package/.editorconfig ADDED
@@ -0,0 +1,12 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
11
+ [*.md]
12
+ trim_trailing_whitespace = false
@@ -0,0 +1,44 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+ issues: write
11
+ pull-requests: write
12
+ id-token: write
13
+
14
+ jobs:
15
+ release:
16
+ name: Release
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0
23
+
24
+ - name: Setup Bun
25
+ uses: oven-sh/setup-bun@v2
26
+ with:
27
+ bun-version: latest
28
+
29
+ - name: Setup Node.js
30
+ uses: actions/setup-node@v4
31
+ with:
32
+ node-version: 22
33
+ registry-url: https://registry.npmjs.org
34
+
35
+ - name: Install dependencies
36
+ run: bun install --frozen-lockfile
37
+
38
+ - name: Build
39
+ run: bun run build
40
+
41
+ - name: Release
42
+ env:
43
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44
+ run: npx semantic-release
package/.impeccable.md ADDED
@@ -0,0 +1,66 @@
1
+ # Lattice Design Context
2
+
3
+ ## Users
4
+ Single developer managing Claude Code across multiple machines. They're power users who value efficiency, keyboard shortcuts, and information density. They interact with Lattice as a command center — monitoring sessions, browsing files, running terminals, and chatting with Claude across their fleet of nodes.
5
+
6
+ ## Brand Personality
7
+ **Precise. Technical. Calm.**
8
+
9
+ Lattice is a quiet authority — confident without being loud, technical without being intimidating. It respects the developer's attention and gets out of the way. Every pixel earns its place.
10
+
11
+ ## Emotional Goals
12
+ - **Control & Mastery**: "I have my entire fleet at my fingertips." The interface should communicate that the user is in command — clear status, predictable behavior, immediate feedback.
13
+ - **Trust & Reliability**: "I can depend on this." Stability over novelty. Consistent patterns. No surprises. Professional confidence in every interaction.
14
+
15
+ ## Aesthetic Direction
16
+ - **Dark-first**: Deep, low-chroma backgrounds with precise accent colors. Light themes available but dark is the native habitat.
17
+ - **Monospace DNA**: JetBrains Mono for headings and emphasis gives Lattice its terminal-rooted identity. IBM Plex Sans for readable body text.
18
+ - **Topological motif**: The lattice grid (dot-grid backgrounds, node connection lines, the 2x2 logomark) is the recurring visual thread.
19
+ - **Three surface tiers**: Chrome (sidebar/headers, `base-200`), Stage (chat area, `base-100` with dot-grid), Elevated (panels/modals, `base-300` with shadow).
20
+ - **OKLCH color space**: Perceptually consistent colors across all 23 base16 themes.
21
+ - **Utilitarian density**: Information-rich without clutter. Compact spacing, small type sizes, efficient use of space.
22
+
23
+ ## Anti-patterns
24
+ - No gratuitous animations or transitions — motion serves function only
25
+ - No rounded-everything bubbly aesthetic — keep edges intentional
26
+ - No pastel-heavy palettes in dark mode — maintain contrast authority
27
+ - No emoji icons — lucide-react only
28
+ - No "AI slop" aesthetics — avoid generic Inter/purple-gradient patterns
29
+
30
+ ## Design Principles
31
+
32
+ 1. **Earn every pixel**: Nothing decorative without function. If an element doesn't help the user understand state, take action, or navigate, remove it.
33
+ 2. **Quiet confidence**: The interface communicates competence through consistency and precision, not through visual loudness or novelty.
34
+ 3. **State is sacred**: Connection status, session state, node health — these must be instantly legible. Use color, position, and subtle animation to make state changes unmissable without being alarming.
35
+ 4. **Dense but breathable**: Pack information efficiently but maintain clear visual hierarchy through type scale, opacity, and spacing — not through excessive whitespace.
36
+ 5. **Theme-native**: Never hardcode colors. Every visual decision flows through CSS variables and the active base16 theme. A component should look correct in all 23 themes without special-casing.
37
+
38
+ ## Accessibility Requirements
39
+ - **WCAG AA** minimum contrast ratios
40
+ - **Reduced motion**: Respect `prefers-reduced-motion` — disable non-essential animations, keep functional transitions minimal
41
+ - **High contrast**: Support a dedicated high-contrast theme option for low-vision users
42
+ - **Color blind safe**: Status indicators (online/offline, success/error/warning) must be distinguishable without relying on hue alone — use shape, icon, or label as secondary signal
43
+ - **Mobile & responsive**: Support touch targets, responsive layouts, and gesture navigation for tablet/mobile use
44
+ - **Keyboard-first**: All actions reachable via keyboard; visible focus indicators
45
+
46
+ ## Typography Scale
47
+ | Role | Font | Size | Weight | Tracking |
48
+ |------|------|------|--------|----------|
49
+ | Section label | JetBrains Mono | 11-12px | Bold | wider/widest, uppercase |
50
+ | Body text | IBM Plex Sans | 14px | Regular | normal |
51
+ | Secondary text | IBM Plex Sans | 13px | Regular | normal |
52
+ | Muted/hint | IBM Plex Sans | 11px | Regular | normal |
53
+ | Code/terminal | JetBrains Mono | 14px | Regular | normal |
54
+ | Heading emphasis | JetBrains Mono | 17px | Bold | normal |
55
+
56
+ ## Spacing Patterns
57
+ - Standard padding: `px-4`, `py-2.5`, `gap-2`-`gap-3`
58
+ - Compact list items: `px-3`, `py-1.5`
59
+ - Input fields: `px-3`, `py-2.5`, `rounded-xl`
60
+ - Section spacing: `pt-4`, `pb-2`
61
+
62
+ ## Component Patterns
63
+ - **Buttons**: daisyUI `btn` with ghost/primary/accent variants. Icon buttons use `btn-ghost btn-xs btn-square`.
64
+ - **Inputs**: `bg-base-300 border border-base-content/15 rounded-xl`, focus: `border-primary`
65
+ - **Opacity hierarchy**: `/70` secondary, `/40` muted labels, `/30` hints, `/15`-`/20` borders
66
+ - **Surfaces**: Three tiers — chrome (`base-200`), stage (`base-100` + dot-grid), elevated (`base-300` + shadow)
@@ -0,0 +1,32 @@
1
+ {
2
+ "branches": [
3
+ "main",
4
+ {
5
+ "name": "alpha",
6
+ "prerelease": true
7
+ }
8
+ ],
9
+ "plugins": [
10
+ [
11
+ "@semantic-release/commit-analyzer",
12
+ {
13
+ "preset": "angular"
14
+ }
15
+ ],
16
+ [
17
+ "@semantic-release/release-notes-generator",
18
+ {
19
+ "preset": "angular"
20
+ }
21
+ ],
22
+ [
23
+ "@semantic-release/npm",
24
+ {
25
+ "pkgRoot": "."
26
+ }
27
+ ],
28
+ [
29
+ "@semantic-release/github"
30
+ ]
31
+ ]
32
+ }
@@ -0,0 +1,138 @@
1
+ # the name by which the project can be referenced within Serena
2
+ project_name: "lattice"
3
+
4
+
5
+ # list of languages for which language servers are started; choose from:
6
+ # al bash clojure cpp csharp
7
+ # csharp_omnisharp dart elixir elm erlang
8
+ # fortran fsharp go groovy haskell
9
+ # java julia kotlin lua markdown
10
+ # matlab nix pascal perl php
11
+ # php_phpactor powershell python python_jedi r
12
+ # rego ruby ruby_solargraph rust scala
13
+ # swift terraform toml typescript typescript_vts
14
+ # vue yaml zig
15
+ # (This list may be outdated. For the current list, see values of Language enum here:
16
+ # https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py
17
+ # For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.)
18
+ # Note:
19
+ # - For C, use cpp
20
+ # - For JavaScript, use typescript
21
+ # - For Free Pascal/Lazarus, use pascal
22
+ # Special requirements:
23
+ # Some languages require additional setup/installations.
24
+ # See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers
25
+ # When using multiple languages, the first language server that supports a given file will be used for that file.
26
+ # The first language is the default language and the respective language server will be used as a fallback.
27
+ # Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
28
+ languages:
29
+ - typescript
30
+
31
+ # the encoding used by text files in the project
32
+ # For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
33
+ encoding: "utf-8"
34
+
35
+ # line ending convention to use when writing source files.
36
+ # Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
37
+ # This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
38
+ line_ending:
39
+
40
+ # The language backend to use for this project.
41
+ # If not set, the global setting from serena_config.yml is used.
42
+ # Valid values: LSP, JetBrains
43
+ # Note: the backend is fixed at startup. If a project with a different backend
44
+ # is activated post-init, an error will be returned.
45
+ language_backend:
46
+
47
+ # whether to use project's .gitignore files to ignore files
48
+ ignore_all_files_in_gitignore: true
49
+
50
+ # list of additional paths to ignore in this project.
51
+ # Same syntax as gitignore, so you can use * and **.
52
+ # Note: global ignored_paths from serena_config.yml are also applied additively.
53
+ ignored_paths: []
54
+
55
+ # whether the project is in read-only mode
56
+ # If set to true, all editing tools will be disabled and attempts to use them will result in an error
57
+ # Added on 2025-04-18
58
+ read_only: false
59
+
60
+ # list of tool names to exclude.
61
+ # This extends the existing exclusions (e.g. from the global configuration)
62
+ #
63
+ # Below is the complete list of tools for convenience.
64
+ # To make sure you have the latest list of tools, and to view their descriptions,
65
+ # execute `uv run scripts/print_tool_overview.py`.
66
+ #
67
+ # * `activate_project`: Activates a project by name.
68
+ # * `check_onboarding_performed`: Checks whether project onboarding was already performed.
69
+ # * `create_text_file`: Creates/overwrites a file in the project directory.
70
+ # * `delete_lines`: Deletes a range of lines within a file.
71
+ # * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
72
+ # * `execute_shell_command`: Executes a shell command.
73
+ # * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
74
+ # * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
75
+ # * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
76
+ # * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
77
+ # * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
78
+ # * `initial_instructions`: Gets the initial instructions for the current project.
79
+ # Should only be used in settings where the system prompt cannot be set,
80
+ # e.g. in clients you have no control over, like Claude Desktop.
81
+ # * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
82
+ # * `insert_at_line`: Inserts content at a given line in a file.
83
+ # * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
84
+ # * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
85
+ # * `list_memories`: Lists memories in Serena's project-specific memory store.
86
+ # * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
87
+ # * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
88
+ # * `read_file`: Reads a file within the project directory.
89
+ # * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
90
+ # * `remove_project`: Removes a project from the Serena configuration.
91
+ # * `replace_lines`: Replaces a range of lines within a file with new content.
92
+ # * `replace_symbol_body`: Replaces the full definition of a symbol.
93
+ # * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
94
+ # * `search_for_pattern`: Performs a search for a pattern in the project.
95
+ # * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
96
+ # * `switch_modes`: Activates modes by providing a list of their names
97
+ # * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
98
+ # * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
99
+ # * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
100
+ # * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
101
+ excluded_tools: []
102
+
103
+ # list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default).
104
+ # This extends the existing inclusions (e.g. from the global configuration).
105
+ included_optional_tools: []
106
+
107
+ # fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools.
108
+ # This cannot be combined with non-empty excluded_tools or included_optional_tools.
109
+ fixed_tools: []
110
+
111
+ # list of mode names to that are always to be included in the set of active modes
112
+ # The full set of modes to be activated is base_modes + default_modes.
113
+ # If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply.
114
+ # Otherwise, this setting overrides the global configuration.
115
+ # Set this to [] to disable base modes for this project.
116
+ # Set this to a list of mode names to always include the respective modes for this project.
117
+ base_modes:
118
+
119
+ # list of mode names that are to be activated by default.
120
+ # The full set of modes to be activated is base_modes + default_modes.
121
+ # If the setting is undefined, the default_modes from the global configuration (serena_config.yml) apply.
122
+ # Otherwise, this overrides the setting from the global configuration (serena_config.yml).
123
+ # This setting can, in turn, be overridden by CLI parameters (--mode).
124
+ default_modes:
125
+
126
+ # initial prompt for the project. It will always be given to the LLM upon activating the project
127
+ # (contrary to the memories, which are loaded on demand).
128
+ initial_prompt: ""
129
+
130
+ # time budget (seconds) per tool call for the retrieval of additional symbol information
131
+ # such as docstrings or parameter information.
132
+ # This overrides the corresponding setting in the global configuration; see the documentation there.
133
+ # If null or missing, use the setting from the global configuration.
134
+ symbol_info_budget:
135
+
136
+ # list of regex patterns which, when matched, mark a memory entry as read‑only.
137
+ # Extends the list from the global configuration, merging the two lists.
138
+ read_only_memory_patterns: []
package/CLAUDE.md ADDED
@@ -0,0 +1,35 @@
1
+ # Lattice — Project Rules
2
+
3
+ ## Icons
4
+ - Use `lucide-react` for ALL icons. Never write custom/inline SVG icons.
5
+ - Import icons individually: `import { Settings, Moon, Sun } from "lucide-react"`
6
+
7
+ ## Coding Standards
8
+ - Use `var` instead of `const`/`let`. No arrow functions.
9
+ - Server-side: ESM with Bun. Client-side: ESM with Vite + React.
10
+ - No emojis for icons or in UI.
11
+ - No section separator comments or organizational comments.
12
+ - One class per file.
13
+ - Follow .editorconfig (2-space indent, LF, UTF-8).
14
+
15
+ ## Git
16
+ - Never add "Co-Authored-By" lines mentioning Claude/AI.
17
+ - Commit messages follow Angular Commit Convention.
18
+ - Only commit when explicitly asked.
19
+
20
+ ## Development
21
+ - Use `bun run dev` to start the development server — it hot reloads both the server and the web app automatically. No manual restart needed after code changes.
22
+
23
+ ## Pre-existing Errors
24
+ - DO NOT EVER LEAVE PRE-EXISTING ERRORS, FIX THEM.
25
+
26
+ ## Design Context
27
+ See `.impeccable.md` for comprehensive design guidelines. Key principles:
28
+ - **Personality**: Precise, Technical, Calm — quiet authority, no fluff
29
+ - **Emotions**: Control & Mastery, Trust & Reliability
30
+ - **Dark-first** with 23 base16 themes via OKLCH color space
31
+ - **Typography**: JetBrains Mono (headings/code), IBM Plex Sans (body)
32
+ - **Three surface tiers**: Chrome (base-200), Stage (base-100 + dot-grid), Elevated (base-300 + shadow)
33
+ - **Design principles**: Earn every pixel, quiet confidence, state is sacred, dense but breathable, theme-native
34
+ - **Accessibility**: WCAG AA, reduced motion, high contrast, color blind safe, mobile/responsive, keyboard-first
35
+ - **Anti-patterns**: No gratuitous animation, no emoji icons, no hardcoded colors, no "AI slop" aesthetics
@@ -0,0 +1,93 @@
1
+ # Contributing to Lattice
2
+
3
+ Thanks for your interest in contributing to Lattice! This document covers the basics you need to get started.
4
+
5
+ ## Development Setup
6
+
7
+ ### Prerequisites
8
+
9
+ - [Bun](https://bun.sh/) v1.1+
10
+ - Node.js 20+ (for some tooling)
11
+ - Git
12
+
13
+ ### Getting Started
14
+
15
+ ```bash
16
+ git clone https://github.com/cryptiklemur/lattice.git
17
+ cd lattice
18
+ bun install
19
+ bun run dev
20
+ ```
21
+
22
+ The dev server starts on `http://localhost:7654` with hot reload for both server and client.
23
+
24
+ ### Project Structure
25
+
26
+ ```
27
+ lattice/
28
+ shared/ # Shared TypeScript types and message definitions
29
+ server/ # Bun server — WebSocket handlers, session management, mesh networking
30
+ client/ # React + Vite client — dashboard, settings, chat UI
31
+ ```
32
+
33
+ ## Development Workflow
34
+
35
+ ### Coding Standards
36
+
37
+ - Use `var` instead of `const`/`let`
38
+ - No arrow functions — use `function` keyword
39
+ - Use `lucide-react` for all icons
40
+ - Follow `.editorconfig` (2-space indent, LF line endings, UTF-8)
41
+ - One class per file
42
+
43
+ ### Commit Messages
44
+
45
+ We follow [Angular Commit Message Conventions](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#-commit-message-format):
46
+
47
+ ```
48
+ <type>(<scope>): <short summary>
49
+ ```
50
+
51
+ **Types:** `feat`, `fix`, `refactor`, `docs`, `style`, `test`, `chore`, `ci`
52
+
53
+ **Scopes:** `client`, `server`, `shared`, or omit for cross-cutting changes
54
+
55
+ **Examples:**
56
+ ```
57
+ feat(client): add skill marketplace search
58
+ fix(server): use correct node identity for project list
59
+ refactor(shared): extract MCP form components
60
+ ```
61
+
62
+ ### Building
63
+
64
+ ```bash
65
+ bun run build # Build all packages
66
+ bun run typecheck # Type-check without emitting
67
+ ```
68
+
69
+ ### Testing Changes
70
+
71
+ 1. Run the dev server: `bun run dev`
72
+ 2. Open `http://localhost:7654` in your browser
73
+ 3. Verify your changes work visually
74
+
75
+ ## Pull Requests
76
+
77
+ 1. Fork the repo and create a branch from `main`
78
+ 2. Make your changes following the coding standards above
79
+ 3. Ensure the project builds without errors: `bun run build`
80
+ 4. Write a clear PR description explaining what changed and why
81
+ 5. Submit your PR
82
+
83
+ ## Reporting Issues
84
+
85
+ Use [GitHub Issues](https://github.com/cryptiklemur/lattice/issues) to report bugs or suggest features. Include:
86
+
87
+ - Steps to reproduce (for bugs)
88
+ - Expected vs actual behavior
89
+ - Your environment (OS, Bun version, browser)
90
+
91
+ ## License
92
+
93
+ By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Aaron Scherer
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,83 @@
1
+ # Lattice
2
+
3
+ Multi-machine agentic dashboard for Claude Code. Monitor sessions, manage MCP servers and skills, orchestrate across mesh-networked nodes.
4
+
5
+ > **Alpha** — Lattice is under active development. APIs and features may change.
6
+
7
+ ## What is Lattice?
8
+
9
+ Lattice is a web dashboard that sits alongside your Claude Code sessions. It gives you a unified view across projects, machines, and sessions — with real-time monitoring, configuration management, and a skill marketplace.
10
+
11
+ ### Features
12
+
13
+ - **Multi-project dashboard** — See recent sessions across all projects at a glance, jump back into any conversation
14
+ - **MCP server management** — Add, edit, and remove MCP servers at global or project level through a visual editor
15
+ - **Skill marketplace** — Search and install skills from [skills.sh](https://skills.sh), manage installed skills with rendered markdown previews
16
+ - **Mesh networking** — Connect multiple machines into a mesh network, see node status and project distribution
17
+ - **Session management** — Browse, rename, delete, and resume Claude Code sessions per project
18
+ - **Real-time chat** — Send messages, approve tool use, monitor context usage and costs
19
+ - **Theme system** — 23 base16 themes (dark and light) with OKLCH color space
20
+ - **Configuration editor** — Edit CLAUDE.md, environment variables, rules, and permissions through the UI
21
+
22
+ ## Quick Start
23
+
24
+ ### Install
25
+
26
+ ```bash
27
+ # With npm
28
+ npm install -g lattice-ai
29
+
30
+ # With bun
31
+ bun install -g lattice-ai
32
+ ```
33
+
34
+ ### Run
35
+
36
+ ```bash
37
+ lattice
38
+ ```
39
+
40
+ Opens the dashboard at `http://localhost:7654`. Add projects through the UI or by navigating to a directory with a `CLAUDE.md` file.
41
+
42
+ ### Development
43
+
44
+ ```bash
45
+ git clone https://github.com/cryptiklemur/lattice.git
46
+ cd lattice
47
+ bun install
48
+ bun run dev
49
+ ```
50
+
51
+ ## Architecture
52
+
53
+ Lattice is a monorepo with three packages:
54
+
55
+ | Package | Description |
56
+ |---------|------------|
57
+ | `shared/` | TypeScript types, message definitions, constants |
58
+ | `server/` | Bun WebSocket server — handlers, session management, mesh networking |
59
+ | `client/` | React + Vite dashboard — UI components, state management, themes |
60
+
61
+ The server communicates with clients via WebSocket using a typed message protocol defined in `shared/`. Sessions are managed through the Claude Agent SDK. The client uses Tanstack Store for state management and Tanstack Router for routing.
62
+
63
+ ## Configuration
64
+
65
+ Lattice stores its config at `~/.lattice/config.json`. Global Claude settings are read from `~/.claude/` and `~/.claude.json`.
66
+
67
+ | Path | Purpose |
68
+ |------|---------|
69
+ | `~/.lattice/config.json` | Lattice daemon config (port, name, TLS, projects) |
70
+ | `~/.claude/CLAUDE.md` | Global Claude instructions |
71
+ | `~/.claude.json` | Global MCP server configuration |
72
+ | `~/.claude/skills/` | Global skills directory |
73
+ | `~/.claude/rules/` | Global rules |
74
+
75
+ Project-level settings are stored in each project's `.claude/` directory and `.mcp.json`.
76
+
77
+ ## Contributing
78
+
79
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, coding standards, and pull request guidelines.
80
+
81
+ ## License
82
+
83
+ [MIT](LICENSE)