symbiote-cli 0.1.0 → 0.1.2

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 (195) hide show
  1. package/README.md +405 -0
  2. package/dist/bin/symbiote.js +0 -0
  3. package/dist/src/brain/health/constraint-checker.d.ts +2 -4
  4. package/dist/src/brain/health/constraint-checker.d.ts.map +1 -1
  5. package/dist/src/brain/health/constraint-checker.js +2 -9
  6. package/dist/src/brain/health/constraint-checker.js.map +1 -1
  7. package/dist/src/brain/health/coupling-analyzer.d.ts +1 -4
  8. package/dist/src/brain/health/coupling-analyzer.d.ts.map +1 -1
  9. package/dist/src/brain/health/coupling-analyzer.js +3 -6
  10. package/dist/src/brain/health/coupling-analyzer.js.map +1 -1
  11. package/dist/src/brain/health/cycle-detector.d.ts +2 -4
  12. package/dist/src/brain/health/cycle-detector.d.ts.map +1 -1
  13. package/dist/src/brain/health/cycle-detector.js +33 -48
  14. package/dist/src/brain/health/cycle-detector.js.map +1 -1
  15. package/dist/src/brain/health/dead-code-detector.d.ts +1 -4
  16. package/dist/src/brain/health/dead-code-detector.d.ts.map +1 -1
  17. package/dist/src/brain/health/dead-code-detector.js +13 -17
  18. package/dist/src/brain/health/dead-code-detector.js.map +1 -1
  19. package/dist/src/brain/health/index.d.ts +5 -9
  20. package/dist/src/brain/health/index.d.ts.map +1 -1
  21. package/dist/src/brain/health/index.js +56 -19
  22. package/dist/src/brain/health/index.js.map +1 -1
  23. package/dist/src/brain/intent.d.ts +2 -0
  24. package/dist/src/brain/intent.d.ts.map +1 -1
  25. package/dist/src/brain/intent.js.map +1 -1
  26. package/dist/src/brain/metrics.d.ts +45 -0
  27. package/dist/src/brain/metrics.d.ts.map +1 -0
  28. package/dist/src/brain/metrics.js +136 -0
  29. package/dist/src/brain/metrics.js.map +1 -0
  30. package/dist/src/commands/hooks.d.ts.map +1 -1
  31. package/dist/src/commands/hooks.js +16 -31
  32. package/dist/src/commands/hooks.js.map +1 -1
  33. package/dist/src/commands/mcp.d.ts.map +1 -1
  34. package/dist/src/commands/mcp.js +14 -3
  35. package/dist/src/commands/mcp.js.map +1 -1
  36. package/dist/src/commands/serve.d.ts.map +1 -1
  37. package/dist/src/commands/serve.js +2 -12
  38. package/dist/src/commands/serve.js.map +1 -1
  39. package/dist/src/commands/shared.d.ts +1 -0
  40. package/dist/src/commands/shared.d.ts.map +1 -1
  41. package/dist/src/commands/shared.js +34 -0
  42. package/dist/src/commands/shared.js.map +1 -1
  43. package/dist/src/core/search.d.ts +1 -0
  44. package/dist/src/core/search.d.ts.map +1 -1
  45. package/dist/src/core/search.js +18 -7
  46. package/dist/src/core/search.js.map +1 -1
  47. package/dist/src/cortex/repository.d.ts +2 -25
  48. package/dist/src/cortex/repository.d.ts.map +1 -1
  49. package/dist/src/cortex/repository.js +1 -112
  50. package/dist/src/cortex/repository.js.map +1 -1
  51. package/dist/src/cortex/schema.js +12 -12
  52. package/dist/src/dna/engine.d.ts +1 -1
  53. package/dist/src/dna/engine.d.ts.map +1 -1
  54. package/dist/src/dna/engine.js +4 -4
  55. package/dist/src/dna/engine.js.map +1 -1
  56. package/dist/src/dna/types.d.ts +1 -0
  57. package/dist/src/dna/types.d.ts.map +1 -1
  58. package/dist/src/dna/types.js +4 -0
  59. package/dist/src/dna/types.js.map +1 -1
  60. package/dist/src/events/types.d.ts +1 -1
  61. package/dist/src/events/types.d.ts.map +1 -1
  62. package/dist/src/events/types.js +4 -10
  63. package/dist/src/events/types.js.map +1 -1
  64. package/dist/src/hooks/attention.d.ts +19 -2
  65. package/dist/src/hooks/attention.d.ts.map +1 -1
  66. package/dist/src/hooks/attention.js +67 -5
  67. package/dist/src/hooks/attention.js.map +1 -1
  68. package/dist/src/hooks/dna-checker.d.ts +3 -0
  69. package/dist/src/hooks/dna-checker.d.ts.map +1 -0
  70. package/dist/src/hooks/dna-checker.js +22 -0
  71. package/dist/src/hooks/dna-checker.js.map +1 -0
  72. package/dist/src/hooks/handlers/post-tool-use.d.ts +14 -0
  73. package/dist/src/hooks/handlers/post-tool-use.d.ts.map +1 -1
  74. package/dist/src/hooks/handlers/post-tool-use.js +139 -9
  75. package/dist/src/hooks/handlers/post-tool-use.js.map +1 -1
  76. package/dist/src/hooks/handlers/pre-tool-use.d.ts +21 -0
  77. package/dist/src/hooks/handlers/pre-tool-use.d.ts.map +1 -1
  78. package/dist/src/hooks/handlers/pre-tool-use.js +153 -6
  79. package/dist/src/hooks/handlers/pre-tool-use.js.map +1 -1
  80. package/dist/src/hooks/handlers/session-start.d.ts +12 -4
  81. package/dist/src/hooks/handlers/session-start.d.ts.map +1 -1
  82. package/dist/src/hooks/handlers/session-start.js +77 -25
  83. package/dist/src/hooks/handlers/session-start.js.map +1 -1
  84. package/dist/src/hooks/handlers/user-prompt-submit.d.ts +8 -6
  85. package/dist/src/hooks/handlers/user-prompt-submit.d.ts.map +1 -1
  86. package/dist/src/hooks/handlers/user-prompt-submit.js +36 -20
  87. package/dist/src/hooks/handlers/user-prompt-submit.js.map +1 -1
  88. package/dist/src/hooks/symbol-cache.d.ts +18 -0
  89. package/dist/src/hooks/symbol-cache.d.ts.map +1 -0
  90. package/dist/src/hooks/symbol-cache.js +23 -0
  91. package/dist/src/hooks/symbol-cache.js.map +1 -0
  92. package/dist/src/init/agent-connector.d.ts +4 -0
  93. package/dist/src/init/agent-connector.d.ts.map +1 -1
  94. package/dist/src/init/agent-connector.js +17 -11
  95. package/dist/src/init/agent-connector.js.map +1 -1
  96. package/dist/src/mcp/context.d.ts +15 -0
  97. package/dist/src/mcp/context.d.ts.map +1 -1
  98. package/dist/src/mcp/context.js +55 -1
  99. package/dist/src/mcp/context.js.map +1 -1
  100. package/dist/src/mcp/http-api.d.ts.map +1 -1
  101. package/dist/src/mcp/http-api.js +27 -6
  102. package/dist/src/mcp/http-api.js.map +1 -1
  103. package/dist/src/mcp/proxy-handler.d.ts +4 -0
  104. package/dist/src/mcp/proxy-handler.d.ts.map +1 -0
  105. package/dist/src/mcp/proxy-handler.js +129 -0
  106. package/dist/src/mcp/proxy-handler.js.map +1 -0
  107. package/dist/src/mcp/proxy-server.d.ts +5 -0
  108. package/dist/src/mcp/proxy-server.d.ts.map +1 -0
  109. package/dist/src/mcp/proxy-server.js +206 -0
  110. package/dist/src/mcp/proxy-server.js.map +1 -0
  111. package/dist/src/mcp/server.d.ts.map +1 -1
  112. package/dist/src/mcp/server.js +32 -20
  113. package/dist/src/mcp/server.js.map +1 -1
  114. package/dist/src/mcp/tools/dna-tools.d.ts +1 -0
  115. package/dist/src/mcp/tools/dna-tools.d.ts.map +1 -1
  116. package/dist/src/mcp/tools/dna-tools.js +5 -1
  117. package/dist/src/mcp/tools/dna-tools.js.map +1 -1
  118. package/dist/src/mcp/tools/trace-tools.d.ts +34 -0
  119. package/dist/src/mcp/tools/trace-tools.d.ts.map +1 -1
  120. package/dist/src/mcp/tools/trace-tools.js +6 -6
  121. package/dist/src/mcp/tools/trace-tools.js.map +1 -1
  122. package/dist/src/storage/repository.d.ts +1 -0
  123. package/dist/src/storage/repository.d.ts.map +1 -1
  124. package/dist/src/storage/repository.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +2 -3
  127. package/LICENSE +0 -21
  128. package/dist/bin/synapse.d.ts +0 -3
  129. package/dist/bin/synapse.d.ts.map +0 -1
  130. package/dist/bin/synapse.js +0 -369
  131. package/dist/bin/synapse.js.map +0 -1
  132. package/dist/src/brain/embeddings.d.ts +0 -9
  133. package/dist/src/brain/embeddings.d.ts.map +0 -1
  134. package/dist/src/brain/embeddings.js +0 -24
  135. package/dist/src/brain/embeddings.js.map +0 -1
  136. package/dist/src/brain/health.d.ts +0 -30
  137. package/dist/src/brain/health.d.ts.map +0 -1
  138. package/dist/src/brain/health.js +0 -147
  139. package/dist/src/brain/health.js.map +0 -1
  140. package/dist/src/commands/init.d.ts +0 -2
  141. package/dist/src/commands/init.d.ts.map +0 -1
  142. package/dist/src/commands/init.js +0 -132
  143. package/dist/src/commands/init.js.map +0 -1
  144. package/dist/src/hooks/post-tool-use.d.ts +0 -12
  145. package/dist/src/hooks/post-tool-use.d.ts.map +0 -1
  146. package/dist/src/hooks/post-tool-use.js +0 -33
  147. package/dist/src/hooks/post-tool-use.js.map +0 -1
  148. package/dist/src/hooks/pre-tool-use.d.ts +0 -24
  149. package/dist/src/hooks/pre-tool-use.d.ts.map +0 -1
  150. package/dist/src/hooks/pre-tool-use.js +0 -117
  151. package/dist/src/hooks/pre-tool-use.js.map +0 -1
  152. package/dist/src/init/dna-bootstrap.d.ts +0 -10
  153. package/dist/src/init/dna-bootstrap.d.ts.map +0 -1
  154. package/dist/src/init/dna-bootstrap.js +0 -32
  155. package/dist/src/init/dna-bootstrap.js.map +0 -1
  156. package/dist/src/init/index.d.ts +0 -29
  157. package/dist/src/init/index.d.ts.map +0 -1
  158. package/dist/src/init/index.js +0 -81
  159. package/dist/src/init/index.js.map +0 -1
  160. package/dist/src/init/overview-generator.d.ts +0 -5
  161. package/dist/src/init/overview-generator.d.ts.map +0 -1
  162. package/dist/src/init/overview-generator.js +0 -85
  163. package/dist/src/init/overview-generator.js.map +0 -1
  164. package/dist/src/init/parsers/eslint-config.d.ts +0 -10
  165. package/dist/src/init/parsers/eslint-config.d.ts.map +0 -1
  166. package/dist/src/init/parsers/eslint-config.js +0 -50
  167. package/dist/src/init/parsers/eslint-config.js.map +0 -1
  168. package/dist/src/init/parsers/markdown-rules.d.ts +0 -3
  169. package/dist/src/init/parsers/markdown-rules.d.ts.map +0 -1
  170. package/dist/src/init/parsers/markdown-rules.js +0 -90
  171. package/dist/src/init/parsers/markdown-rules.js.map +0 -1
  172. package/dist/src/init/parsers/package-json.d.ts +0 -17
  173. package/dist/src/init/parsers/package-json.d.ts.map +0 -1
  174. package/dist/src/init/parsers/package-json.js +0 -75
  175. package/dist/src/init/parsers/package-json.js.map +0 -1
  176. package/dist/src/init/parsers/prettier-config.d.ts +0 -16
  177. package/dist/src/init/parsers/prettier-config.d.ts.map +0 -1
  178. package/dist/src/init/parsers/prettier-config.js +0 -30
  179. package/dist/src/init/parsers/prettier-config.js.map +0 -1
  180. package/dist/src/init/parsers/tsconfig.d.ts +0 -32
  181. package/dist/src/init/parsers/tsconfig.d.ts.map +0 -1
  182. package/dist/src/init/parsers/tsconfig.js +0 -64
  183. package/dist/src/init/parsers/tsconfig.js.map +0 -1
  184. package/dist/src/init/parsers/types.d.ts +0 -27
  185. package/dist/src/init/parsers/types.d.ts.map +0 -1
  186. package/dist/src/init/parsers/types.js +0 -2
  187. package/dist/src/init/parsers/types.js.map +0 -1
  188. package/dist/src/init/project-analyzer.d.ts +0 -3
  189. package/dist/src/init/project-analyzer.d.ts.map +0 -1
  190. package/dist/src/init/project-analyzer.js +0 -102
  191. package/dist/src/init/project-analyzer.js.map +0 -1
  192. package/dist/src/init/rule-importer.d.ts +0 -3
  193. package/dist/src/init/rule-importer.d.ts.map +0 -1
  194. package/dist/src/init/rule-importer.js +0 -101
  195. package/dist/src/init/rule-importer.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,405 @@
1
+ <div align="center">
2
+
3
+ # Symbiote
4
+
5
+ **Your AI forgets. Symbiote remembers.**
6
+
7
+ _Symbiote bonds with your AI tools — giving them memory, context, and your coding DNA._
8
+
9
+ [![npm](https://img.shields.io/npm/v/symbiote-cli?style=flat-square&color=7b5fff)](https://www.npmjs.com/package/symbiote-cli)
10
+ [![license](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
11
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?style=flat-square)](https://www.typescriptlang.org/)
12
+ [![MCP](https://img.shields.io/badge/MCP-compatible-7b5fff?style=flat-square)](https://modelcontextprotocol.io/)
13
+
14
+ </div>
15
+
16
+ ---
17
+
18
+ ## The Problem
19
+
20
+ Every AI coding session starts from scratch. The AI doesn't know your architecture, ignores your conventions, and repeats the same mistakes you corrected yesterday. Static rule files are manual and fragile. Every new conversation is a cold start.
21
+
22
+ **Your corrections vanish. Your preferences reset. Your AI has amnesia.**
23
+
24
+ ## Why Not Just CLAUDE.md?
25
+
26
+ CLAUDE.md is great for explicit instructions — but it's static text you maintain by hand. Symbiote is a living knowledge graph that updates itself every time your codebase changes.
27
+
28
+ | | CLAUDE.md | Symbiote |
29
+ | ------------------------- | --------------------------------- | ------------------------------------------------ |
30
+ | **Project structure** | You write and maintain it | Auto-scanned, always current |
31
+ | **Dependencies & impact** | Not possible | Full graph — "what breaks if I change this?" |
32
+ | **File connections** | You document them manually | Every import, call, and edge mapped |
33
+ | **Coding style** | You write rules once | Learns from corrections, carries across projects |
34
+ | **Stays current** | Only if you remember to update it | Re-indexes on every change |
35
+
36
+ They're complementary. Use CLAUDE.md for explicit instructions your AI should always follow. Use Symbiote for the deep project understanding no static file can provide.
37
+
38
+ ---
39
+
40
+ ## Quick Start
41
+
42
+ ```bash
43
+ npm install -g symbiote-cli
44
+ symbiote install
45
+ ```
46
+
47
+ One command. Auto-detects your installed editors (Claude Code, Cursor, Windsurf, Copilot, OpenCode), registers the MCP server globally for each, and sets up 9 Claude Code hooks + the `/symbiote-init` skill. Run it once.
48
+
49
+ Then in any project, open Claude Code and run:
50
+
51
+ ```
52
+ /symbiote-init
53
+ ```
54
+
55
+ This scans your codebase, extracts your coding preferences, project constraints, and architectural decisions — all in one step.
56
+
57
+ ```
58
+ Symbiote initialized — scanned 142 files, recorded 18 DNA entries, 5 constraints, 3 decisions.
59
+ ```
60
+
61
+ No manual config. No copy-pasting. After the first init, Symbiote's SessionStart hook auto-scans and boots the server on every new Claude Code session — zero cold start.
62
+
63
+ ---
64
+
65
+ ## How It Works
66
+
67
+ Symbiote has two layers of intelligence that work together: **Developer DNA** (who you are) and the **Project Brain** (what your code is).
68
+
69
+ ```mermaid
70
+ sequenceDiagram
71
+ participant Brain as .brain/<br>Code Graph
72
+ participant Sym as Symbiote
73
+ participant AI as Claude Code
74
+ participant DNA as ~/.symbiote/<br>Developer DNA
75
+
76
+ Brain->>Sym: project structure, dependencies, health
77
+ DNA->>Sym: style traits, preferences, anti-patterns
78
+
79
+ loop Every interaction
80
+ Sym->>AI: injects context (MCP + hooks)
81
+ AI->>Sym: actions observed
82
+ Sym->>Brain: re-indexes changed files
83
+ Sym->>DNA: records corrections
84
+ end
85
+
86
+ Note over DNA: confidence evolves across sessions
87
+ ```
88
+
89
+ ### Developer DNA — Your Coding Identity
90
+
91
+ Lives at `~/.symbiote/dna/`. Follows you across every project.
92
+
93
+ When you correct your AI — _"no, use early returns"_ — Symbiote captures it. Same correction across three sessions? Auto-promoted from suggestion to approved trait. Explicit instruction? Approved immediately.
94
+
95
+ Your DNA is human-readable markdown. Review it, edit it, or ignore it:
96
+
97
+ ```bash
98
+ symbiote dna # Summary: 34 traits, 2 pending review
99
+ symbiote dna list # All traits with confidence scores
100
+ symbiote dna approve <id> # Promote a suggestion
101
+ ```
102
+
103
+ ### Project Brain — Your Codebase's Nervous System
104
+
105
+ Lives at `.brain/` in each repo. Auto-generated, optionally enriched.
106
+
107
+ - **Code graph** — Every function, class, import, and call chain mapped via Tree-sitter
108
+ - **Semantic search** — Natural language queries over your codebase (local embeddings, no API)
109
+ - **Intent layer** — Architectural decisions and constraints that travel with the repo
110
+ - **Health engine** — Dead code, circular deps, coupling hotspots, constraint violations
111
+ - **Impact analysis** — "What breaks if I change this?" with confidence-weighted blast radius
112
+
113
+ ---
114
+
115
+ ## DNA Learning System
116
+
117
+ Corrections don't just get recorded — they evolve. Symbiote tracks confidence across sessions and promotes patterns that hold up over time.
118
+
119
+ ```mermaid
120
+ stateDiagram-v2
121
+ [*] --> Detected: AI observes pattern
122
+ Detected --> Suggested: Confidence 0.3
123
+ Suggested --> Reinforced: Pattern holds (+0.05/session)
124
+ Reinforced --> Approved: 3+ sessions at ≥0.7
125
+ Approved --> Core: Auto-promoted
126
+
127
+ Detected --> Approved: Explicit correction (1.0)
128
+
129
+ Reinforced --> Decayed: 30+ days unseen
130
+ Suggested --> Decayed: 30+ days unseen
131
+ Decayed --> [*]: Fades away
132
+
133
+ Approved --> Replaced: Contradiction detected
134
+ Replaced --> [*]: Old pattern removed
135
+ ```
136
+
137
+ | Path | How it works |
138
+ | ----------------- | ------------------------------------------------------------------------------ |
139
+ | **Observed** | Symbiote detects a pattern in your code or corrections |
140
+ | **Reinforced** | Same pattern appears across multiple sessions (+0.05 confidence each time) |
141
+ | **Auto-promoted** | After 3+ sessions at ≥0.7 confidence, becomes an approved trait |
142
+ | **Explicit** | Direct corrections (_"don't use semicolons"_) skip straight to approved at 1.0 |
143
+ | **Decayed** | Patterns unseen for 30+ days gradually fade |
144
+ | **Contradicted** | New correction replaces the old pattern entirely |
145
+
146
+ ---
147
+
148
+ ## Session Intelligence
149
+
150
+ Symbiote hooks into **9 Claude Code lifecycle events** — not just file reads and edits, but session start, user prompts, subagent spawns, compaction, and session end.
151
+
152
+ ```mermaid
153
+ sequenceDiagram
154
+ participant Dev as Developer
155
+ participant CC as Claude Code
156
+ participant Sym as Symbiote
157
+
158
+ Note over CC,Sym: Session starts
159
+ CC->>Sym: SessionStart
160
+ Sym-->>CC: DNA + constraints + project overview
161
+
162
+ Note over Dev,CC: Developer types a prompt
163
+ Dev->>CC: "refactor the auth module"
164
+ CC->>Sym: UserPromptSubmit
165
+ Sym->>Sym: Haiku detects corrections
166
+
167
+ Note over CC,Sym: AI reads a file
168
+ CC->>Sym: PreToolUse (Read)
169
+ Sym-->>CC: File context + dependencies + constraints
170
+ CC->>Sym: PostToolUse (Read)
171
+ Sym->>Sym: Update attention set
172
+
173
+ Note over CC,Sym: AI edits a file
174
+ CC->>Sym: PreToolUse (Edit)
175
+ Sym-->>CC: Impact warnings + dependents
176
+ CC->>Sym: PostToolUse (Edit)
177
+ Sym->>Sym: Re-index file + record observation
178
+
179
+ Note over CC,Sym: AI spawns subagent
180
+ CC->>Sym: SubagentStart
181
+ Sym-->>CC: DNA + constraints (~50 tokens)
182
+
183
+ Note over CC,Sym: Context compacts
184
+ CC->>Sym: PreCompact
185
+ Sym->>Sym: Snapshot session state
186
+
187
+ Note over CC,Sym: Session ends
188
+ CC->>Sym: SessionEnd
189
+ Sym->>Sym: Evolve DNA confidence
190
+ ```
191
+
192
+ The hooks are the key. Your AI doesn't _choose_ to use Symbiote — Symbiote is injected into every interaction. The AI writes better code because it has better context.
193
+
194
+ Every tool call is observed and correlated with the code graph — not raw text logs, structured graph metadata. Over time, Symbiote learns:
195
+
196
+ - **Corrections** — detected in real-time via Haiku, recorded with evidence
197
+ - **Style patterns** — extracted from what you actually write, not what you say
198
+ - **Hotspots** — files edited 3+ times in a session get flagged
199
+ - **Failure patterns** — errors correlated with affected symbols across sessions
200
+
201
+ ---
202
+
203
+ ## The Living Brain
204
+
205
+ ```bash
206
+ symbiote serve
207
+ ```
208
+
209
+ Open the URL printed in your terminal. Your project's brain — a 3D neural graph of your entire codebase. Nodes are files, functions, classes. Edges are calls, imports, dependencies. Color-coded by module cluster. Sized by PageRank importance.
210
+
211
+ **It reacts in real time.** When your AI reads a file, the node glows. When it edits, the node pulses bright. When it navigates between files, impulses fire along the edges. You're watching your AI think.
212
+
213
+ | View | What it shows |
214
+ | ---------------- | ------------------------------------------------ |
215
+ | **Brain Graph** | 3D neural visualization — the hero, always alive |
216
+ | **Health Pulse** | Code health score (0-100) with actionable issues |
217
+ | **DNA Lab** | Your traits — approve, reject, edit |
218
+
219
+ ---
220
+
221
+ ## Editor Support
222
+
223
+ Symbiote works with any MCP-compatible AI tool. `symbiote install` auto-detects your editors and configures everything.
224
+
225
+ | Host | MCP | Hooks (9 events) | Session Intelligence | Real-Time Brain |
226
+ | ------------------ | --- | ---------------- | -------------------- | --------------- |
227
+ | **Claude Code** | Yes | Yes | Yes | Yes |
228
+ | **Cursor** | Yes | — | — | — |
229
+ | **Windsurf** | Yes | — | — | — |
230
+ | **GitHub Copilot** | Yes | — | — | — |
231
+ | **OpenCode** | Yes | — | — | — |
232
+
233
+ Claude Code gets the deepest integration — 9 hook events cover the full session lifecycle. The brain reacts in real time. Other hosts access Symbiote through MCP tools the AI calls when it needs context.
234
+
235
+ ### Manual Setup
236
+
237
+ If you prefer to configure manually instead of `symbiote install`:
238
+
239
+ **Claude Code:**
240
+
241
+ ```bash
242
+ claude mcp add symbiote -- npx -y symbiote-cli mcp
243
+ ```
244
+
245
+ **Cursor** (`~/.cursor/mcp.json`):
246
+
247
+ ```json
248
+ {
249
+ "mcpServers": {
250
+ "symbiote": {
251
+ "command": "npx",
252
+ "args": ["-y", "symbiote-cli", "mcp"]
253
+ }
254
+ }
255
+ }
256
+ ```
257
+
258
+ **OpenCode** (`~/.config/opencode/.opencode.json`):
259
+
260
+ ```json
261
+ {
262
+ "mcpServers": {
263
+ "symbiote": {
264
+ "command": "npx",
265
+ "args": ["-y", "symbiote-cli", "mcp"]
266
+ }
267
+ }
268
+ }
269
+ ```
270
+
271
+ ---
272
+
273
+ ## What Your AI Gets
274
+
275
+ When bonded, your AI gains 17 tools via MCP:
276
+
277
+ | Tool | Purpose |
278
+ | ------------------------ | -------------------------------------------------- |
279
+ | `get_developer_dna` | Your style and preferences, filtered by relevance |
280
+ | `get_project_overview` | Tech stack, structure, modules, health summary |
281
+ | `get_context_for_file` | Dependencies, dependents, constraints for any file |
282
+ | `get_context_for_symbol` | Full context for a specific symbol |
283
+ | `query_graph` | Symbol search, call chains, dependency tracing |
284
+ | `semantic_search` | Natural language search over the codebase |
285
+ | `get_constraints` | Active project rules, scoped to file or module |
286
+ | `get_decisions` | Architectural decisions with rationale |
287
+ | `get_health` | Dead code, cycles, coupling, violations |
288
+ | `get_impact` | Blast radius analysis with confidence scores |
289
+ | `get_architecture` | Module boundaries, layering, entry points |
290
+ | `find_patterns` | Recurring code patterns across the codebase |
291
+ | `detect_changes` | Git diff mapped to affected graph nodes |
292
+ | `rename_symbol` | Graph-aware multi-file rename preview |
293
+ | `propose_decision` | AI writes back a discovered decision |
294
+ | `propose_constraint` | AI writes back an inferred constraint |
295
+ | `record_instruction` | Captures your corrections for DNA learning |
296
+
297
+ Plus 3 MCP resources: `symbiote://dna`, `symbiote://project/overview`, `symbiote://project/health`
298
+
299
+ ---
300
+
301
+ ## Project Health
302
+
303
+ ```bash
304
+ symbiote impact # What breaks from your uncommitted changes?
305
+ ```
306
+
307
+ The health engine scores your project 0-100 across four dimensions:
308
+
309
+ | Dimension | Weight | What it catches |
310
+ | --------------------- | ------ | ------------------------------------------- |
311
+ | Constraint violations | 40% | Your own rules being broken |
312
+ | Circular dependencies | 20% | Modules that shouldn't depend on each other |
313
+ | Dead code | 20% | Unused exports, orphan files |
314
+ | Coupling hotspots | 20% | Files that change together too often |
315
+
316
+ Every issue links to a file and line number. The Health Pulse view in the web UI makes them actionable.
317
+
318
+ ---
319
+
320
+ ## What Gets Created
321
+
322
+ ```
323
+ ~/.symbiote/ # Global — your coding identity
324
+ ├── config.json
325
+ └── dna/
326
+ ├── style/ # "Use early returns, not nested else"
327
+ ├── preferences/ # "Drizzle over Prisma"
328
+ ├── anti-patterns/ # "No nested ternaries"
329
+ └── decisions/ # "Composition over inheritance"
330
+
331
+ your-project/.brain/ # Per-project — the brain
332
+ ├── symbiote.db # Code graph + embeddings (gitignored)
333
+ └── intent/ # Committed to git — shared with team
334
+ ├── overview.md # Auto-generated project summary
335
+ ├── decisions/ # "Why we chose X over Y"
336
+ └── constraints/ # "No raw SQL in application code"
337
+ ```
338
+
339
+ The intent layer is committed to git. New team member runs `/symbiote-init` — they get the full project brain plus their personal DNA on top. Same project understanding, individual style.
340
+
341
+ ---
342
+
343
+ ## Language Support
344
+
345
+ Symbiote uses Tree-sitter for precise code parsing. **Bundled** languages ship with the package and have dedicated extraction patterns. **On-demand** languages are downloaded on first encounter and use generic AST traversal.
346
+
347
+ | Language | Functions | Classes | Methods | Imports | Calls | Types | Enums |
348
+ | ---------- | --------- | ------- | ------- | ------- | ----- | ----- | ----- |
349
+ | TypeScript | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
350
+ | JavaScript | ✓ | ✓ | ✓ | ✓ | ✓ | — | — |
351
+ | TSX | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
352
+ | Python | ✓ | ✓ | ✓ | ✓ | ✓ | — | — |
353
+ | Go | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — |
354
+ | Rust | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
355
+ | Java | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
356
+ | C | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ |
357
+ | C++ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
358
+ | Ruby | ✓ | ✓ | ✓ | ✓ | ✓ | — | — |
359
+ | PHP | ✓ | ✓ | ✓ | ✓ | ✓ | — | — |
360
+
361
+ > **Any other language** with a Tree-sitter grammar also works — downloaded and cached at `~/.symbiote/grammars/` on first encounter. Functions and classes are extracted via generic traversal; deeper features depend on language-specific patterns.
362
+
363
+ ---
364
+
365
+ ## CLI Reference
366
+
367
+ | Command | What it does |
368
+ | ----------------------- | ---------------------------------------------- |
369
+ | `symbiote install` | One-time global setup for all detected editors |
370
+ | `symbiote scan` | Rescan codebase (incremental) |
371
+ | `symbiote scan --force` | Full rescan, ignore cache |
372
+ | `symbiote serve` | MCP server + web UI (port auto-assigned) |
373
+ | `symbiote mcp` | MCP server only (stdio, for editors) |
374
+ | `symbiote dna` | View and manage developer DNA |
375
+ | `symbiote impact` | Analyze impact of working changes |
376
+ | `symbiote unbond` | Detach from all AI hosts |
377
+
378
+ ---
379
+
380
+ ## Tech Stack
381
+
382
+ | Layer | Technology |
383
+ | -------------- | ------------------------------------------------------------ |
384
+ | **Language** | TypeScript (strict mode) |
385
+ | **Monorepo** | Turborepo (packages/cli + packages/web) |
386
+ | **Parsing** | Tree-sitter (11 bundled languages) |
387
+ | **Database** | DuckDB + sqlite-vec (graph storage + vector search) |
388
+ | **MCP** | @modelcontextprotocol/sdk (stdio + HTTP) |
389
+ | **Embeddings** | Transformers.js (local, all-MiniLM-L6-v2) |
390
+ | **Graph** | Graphology (Louvain, PageRank, betweenness) |
391
+ | **Web UI** | Vite + React 19 + react-three-fiber + Three.js + custom GLSL |
392
+ | **Styling** | Tailwind CSS v4 (dark theme) |
393
+ | **Testing** | Vitest (799 tests across 85 files) |
394
+
395
+ ---
396
+
397
+ ## Privacy
398
+
399
+ Everything runs locally. No data leaves your machine. No external API calls for core features. The code graph, embeddings, DNA, session observations, and health analysis all run on your hardware. Observations store graph metadata only (which tool, which file, which symbols) — never file contents or command outputs.
400
+
401
+ ---
402
+
403
+ ## License
404
+
405
+ [MIT](LICENSE)
File without changes
@@ -1,4 +1,3 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { IntentStore } from '../intent.js';
3
2
  import type { ConstraintViolation, DescriptiveConstraint } from './types.js';
4
3
  export interface ConstraintCheckResult {
@@ -6,10 +5,9 @@ export interface ConstraintCheckResult {
6
5
  descriptive: DescriptiveConstraint[];
7
6
  }
8
7
  export declare class ConstraintChecker {
9
- private repo;
10
8
  private intent;
11
- constructor(repo: Repository, intent: IntentStore);
12
- check(): Promise<ConstraintCheckResult>;
9
+ constructor(intent: IntentStore);
10
+ check(allFilePaths: Set<string>): Promise<ConstraintCheckResult>;
13
11
  private checkWithPattern;
14
12
  private getFilesInScope;
15
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-checker.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,qBAAa,iBAAiB;IAEtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;gBADN,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW;IAGzB,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;YA6B/B,gBAAgB;IAuD9B,OAAO,CAAC,eAAe;CAS1B"}
1
+ {"version":3,"file":"constraint-checker.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,qBAAa,iBAAiB;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAuBxD,gBAAgB;IAuD9B,OAAO,CAAC,eAAe;CAS1B"}
@@ -4,23 +4,16 @@ import { detectLanguage, getGrammar } from '#core/languages.js';
4
4
  const require = createRequire(import.meta.url);
5
5
  const Parser = require('tree-sitter');
6
6
  export class ConstraintChecker {
7
- repo;
8
7
  intent;
9
- constructor(repo, intent) {
10
- this.repo = repo;
8
+ constructor(intent) {
11
9
  this.intent = intent;
12
10
  }
13
- async check() {
11
+ async check(allFilePaths) {
14
12
  const constraints = await this.intent.listEntries('constraint', {
15
13
  status: 'active',
16
14
  });
17
15
  const violations = [];
18
16
  const descriptive = [];
19
- const allNodes = await this.repo.getAllNodes();
20
- const allFilePaths = new Set();
21
- for (const node of allNodes) {
22
- allFilePaths.add(node.filePath);
23
- }
24
17
  for (const constraint of constraints) {
25
18
  if (constraint.frontmatter.pattern) {
26
19
  const found = await this.checkWithPattern(constraint, allFilePaths);
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-checker.js","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constraint-checker.js","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { CouplingHotspot } from './types.js';
3
2
  import type { PreFetchedData } from './cycle-detector.js';
4
3
  export declare class CouplingAnalyzer {
5
- private repo;
6
- constructor(repo: Repository);
7
- detect(preFetched?: PreFetchedData): Promise<CouplingHotspot[]>;
4
+ detect(preFetched: PreFetchedData): Promise<CouplingHotspot[]>;
8
5
  }
9
6
  //# sourceMappingURL=coupling-analyzer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coupling-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwB1D,qBAAa,gBAAgB;IACb,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE9B,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA6FxE"}
1
+ {"version":3,"file":"coupling-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwB1D,qBAAa,gBAAgB;IACnB,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA8FvE"}
@@ -18,13 +18,8 @@ function computeThreshold(weightedCounts) {
18
18
  return Math.max(p90, MIN_THRESHOLD);
19
19
  }
20
20
  export class CouplingAnalyzer {
21
- repo;
22
- constructor(repo) {
23
- this.repo = repo;
24
- }
25
21
  async detect(preFetched) {
26
- const allNodes = preFetched?.nodes ?? (await this.repo.getAllNodes());
27
- const allEdges = preFetched?.edges ?? (await this.repo.getAllEdges());
22
+ const { nodes: allNodes, edges: allEdges } = preFetched;
28
23
  if (allEdges.length === 0)
29
24
  return [];
30
25
  const nodeToFile = new Map();
@@ -36,6 +31,8 @@ export class CouplingAnalyzer {
36
31
  const fileFanIn = new Map();
37
32
  const fileFanOut = new Map();
38
33
  for (const edge of allEdges) {
34
+ if (edge.type === 'contains')
35
+ continue;
39
36
  const sourceFile = nodeToFile.get(edge.sourceId);
40
37
  const targetFile = nodeToFile.get(edge.targetId);
41
38
  if (!sourceFile || !targetFile || sourceFile === targetFile) {
@@ -1 +1 @@
1
- {"version":3,"file":"coupling-analyzer.js","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coupling-analyzer.js","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- import type { Repository, NodeRecord, EdgeRecord } from '#storage/repository.js';
1
+ import type { NodeRecord, EdgeRecord } from '#storage/repository.js';
2
2
  import type { CircularDep } from './types.js';
3
3
  export interface PreFetchedData {
4
4
  nodes: NodeRecord[];
5
5
  edges: EdgeRecord[];
6
6
  }
7
7
  export declare class CycleDetector {
8
- private repo;
9
- constructor(repo: Repository);
10
- detect(preFetched?: PreFetchedData): Promise<CircularDep[]>;
8
+ detect(preFetched: PreFetchedData): Promise<CircularDep[]>;
11
9
  }
12
10
  //# sourceMappingURL=cycle-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IACV,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE9B,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CA8EpE"}
1
+ {"version":3,"file":"cycle-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IAChB,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAqEnE"}