hanzo-mcp 0.7.6__py3-none-any.whl → 0.8.0__py3-none-any.whl

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.

Potentially problematic release.


This version of hanzo-mcp might be problematic. Click here for more details.

Files changed (178) hide show
  1. hanzo_mcp/__init__.py +7 -1
  2. hanzo_mcp/__main__.py +1 -1
  3. hanzo_mcp/analytics/__init__.py +2 -2
  4. hanzo_mcp/analytics/posthog_analytics.py +76 -82
  5. hanzo_mcp/cli.py +31 -36
  6. hanzo_mcp/cli_enhanced.py +94 -72
  7. hanzo_mcp/cli_plugin.py +27 -17
  8. hanzo_mcp/config/__init__.py +2 -2
  9. hanzo_mcp/config/settings.py +112 -88
  10. hanzo_mcp/config/tool_config.py +32 -34
  11. hanzo_mcp/dev_server.py +66 -67
  12. hanzo_mcp/prompts/__init__.py +94 -12
  13. hanzo_mcp/prompts/enhanced_prompts.py +809 -0
  14. hanzo_mcp/prompts/example_custom_prompt.py +6 -5
  15. hanzo_mcp/prompts/project_todo_reminder.py +0 -1
  16. hanzo_mcp/prompts/tool_explorer.py +10 -7
  17. hanzo_mcp/server.py +17 -21
  18. hanzo_mcp/server_enhanced.py +15 -22
  19. hanzo_mcp/tools/__init__.py +56 -28
  20. hanzo_mcp/tools/agent/__init__.py +16 -19
  21. hanzo_mcp/tools/agent/agent.py +82 -65
  22. hanzo_mcp/tools/agent/agent_tool.py +152 -122
  23. hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +66 -62
  24. hanzo_mcp/tools/agent/clarification_protocol.py +55 -50
  25. hanzo_mcp/tools/agent/clarification_tool.py +11 -10
  26. hanzo_mcp/tools/agent/claude_cli_tool.py +21 -20
  27. hanzo_mcp/tools/agent/claude_desktop_auth.py +130 -144
  28. hanzo_mcp/tools/agent/cli_agent_base.py +59 -53
  29. hanzo_mcp/tools/agent/code_auth.py +102 -107
  30. hanzo_mcp/tools/agent/code_auth_tool.py +28 -27
  31. hanzo_mcp/tools/agent/codex_cli_tool.py +20 -19
  32. hanzo_mcp/tools/agent/critic_tool.py +86 -73
  33. hanzo_mcp/tools/agent/gemini_cli_tool.py +21 -20
  34. hanzo_mcp/tools/agent/grok_cli_tool.py +21 -20
  35. hanzo_mcp/tools/agent/iching_tool.py +404 -139
  36. hanzo_mcp/tools/agent/network_tool.py +89 -73
  37. hanzo_mcp/tools/agent/prompt.py +2 -1
  38. hanzo_mcp/tools/agent/review_tool.py +101 -98
  39. hanzo_mcp/tools/agent/swarm_alias.py +87 -0
  40. hanzo_mcp/tools/agent/swarm_tool.py +246 -161
  41. hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +134 -92
  42. hanzo_mcp/tools/agent/tool_adapter.py +21 -11
  43. hanzo_mcp/tools/common/__init__.py +1 -1
  44. hanzo_mcp/tools/common/base.py +3 -5
  45. hanzo_mcp/tools/common/batch_tool.py +46 -39
  46. hanzo_mcp/tools/common/config_tool.py +120 -84
  47. hanzo_mcp/tools/common/context.py +1 -5
  48. hanzo_mcp/tools/common/context_fix.py +5 -3
  49. hanzo_mcp/tools/common/critic_tool.py +4 -8
  50. hanzo_mcp/tools/common/decorators.py +58 -56
  51. hanzo_mcp/tools/common/enhanced_base.py +29 -32
  52. hanzo_mcp/tools/common/fastmcp_pagination.py +91 -94
  53. hanzo_mcp/tools/common/forgiving_edit.py +91 -87
  54. hanzo_mcp/tools/common/mode.py +15 -17
  55. hanzo_mcp/tools/common/mode_loader.py +27 -24
  56. hanzo_mcp/tools/common/paginated_base.py +61 -53
  57. hanzo_mcp/tools/common/paginated_response.py +72 -79
  58. hanzo_mcp/tools/common/pagination.py +50 -53
  59. hanzo_mcp/tools/common/permissions.py +4 -4
  60. hanzo_mcp/tools/common/personality.py +186 -138
  61. hanzo_mcp/tools/common/plugin_loader.py +54 -54
  62. hanzo_mcp/tools/common/stats.py +65 -47
  63. hanzo_mcp/tools/common/test_helpers.py +31 -0
  64. hanzo_mcp/tools/common/thinking_tool.py +4 -8
  65. hanzo_mcp/tools/common/tool_disable.py +17 -12
  66. hanzo_mcp/tools/common/tool_enable.py +13 -14
  67. hanzo_mcp/tools/common/tool_list.py +36 -28
  68. hanzo_mcp/tools/common/truncate.py +23 -23
  69. hanzo_mcp/tools/config/__init__.py +4 -4
  70. hanzo_mcp/tools/config/config_tool.py +42 -29
  71. hanzo_mcp/tools/config/index_config.py +37 -34
  72. hanzo_mcp/tools/config/mode_tool.py +175 -55
  73. hanzo_mcp/tools/database/__init__.py +15 -12
  74. hanzo_mcp/tools/database/database_manager.py +77 -75
  75. hanzo_mcp/tools/database/graph.py +137 -91
  76. hanzo_mcp/tools/database/graph_add.py +30 -18
  77. hanzo_mcp/tools/database/graph_query.py +178 -102
  78. hanzo_mcp/tools/database/graph_remove.py +33 -28
  79. hanzo_mcp/tools/database/graph_search.py +97 -75
  80. hanzo_mcp/tools/database/graph_stats.py +91 -59
  81. hanzo_mcp/tools/database/sql.py +107 -79
  82. hanzo_mcp/tools/database/sql_query.py +30 -24
  83. hanzo_mcp/tools/database/sql_search.py +29 -25
  84. hanzo_mcp/tools/database/sql_stats.py +47 -35
  85. hanzo_mcp/tools/editor/neovim_command.py +25 -28
  86. hanzo_mcp/tools/editor/neovim_edit.py +21 -23
  87. hanzo_mcp/tools/editor/neovim_session.py +60 -54
  88. hanzo_mcp/tools/filesystem/__init__.py +31 -30
  89. hanzo_mcp/tools/filesystem/ast_multi_edit.py +329 -249
  90. hanzo_mcp/tools/filesystem/ast_tool.py +4 -4
  91. hanzo_mcp/tools/filesystem/base.py +1 -1
  92. hanzo_mcp/tools/filesystem/batch_search.py +316 -224
  93. hanzo_mcp/tools/filesystem/content_replace.py +4 -4
  94. hanzo_mcp/tools/filesystem/diff.py +71 -59
  95. hanzo_mcp/tools/filesystem/directory_tree.py +7 -7
  96. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +49 -37
  97. hanzo_mcp/tools/filesystem/edit.py +4 -4
  98. hanzo_mcp/tools/filesystem/find.py +173 -80
  99. hanzo_mcp/tools/filesystem/find_files.py +73 -52
  100. hanzo_mcp/tools/filesystem/git_search.py +157 -104
  101. hanzo_mcp/tools/filesystem/grep.py +8 -8
  102. hanzo_mcp/tools/filesystem/multi_edit.py +4 -8
  103. hanzo_mcp/tools/filesystem/read.py +12 -10
  104. hanzo_mcp/tools/filesystem/rules_tool.py +59 -43
  105. hanzo_mcp/tools/filesystem/search_tool.py +263 -207
  106. hanzo_mcp/tools/filesystem/symbols_tool.py +94 -54
  107. hanzo_mcp/tools/filesystem/tree.py +35 -33
  108. hanzo_mcp/tools/filesystem/unix_aliases.py +13 -18
  109. hanzo_mcp/tools/filesystem/watch.py +37 -36
  110. hanzo_mcp/tools/filesystem/write.py +4 -8
  111. hanzo_mcp/tools/jupyter/__init__.py +4 -4
  112. hanzo_mcp/tools/jupyter/base.py +4 -5
  113. hanzo_mcp/tools/jupyter/jupyter.py +67 -47
  114. hanzo_mcp/tools/jupyter/notebook_edit.py +4 -4
  115. hanzo_mcp/tools/jupyter/notebook_read.py +4 -7
  116. hanzo_mcp/tools/llm/__init__.py +5 -7
  117. hanzo_mcp/tools/llm/consensus_tool.py +72 -52
  118. hanzo_mcp/tools/llm/llm_manage.py +101 -60
  119. hanzo_mcp/tools/llm/llm_tool.py +226 -166
  120. hanzo_mcp/tools/llm/provider_tools.py +25 -26
  121. hanzo_mcp/tools/lsp/__init__.py +1 -1
  122. hanzo_mcp/tools/lsp/lsp_tool.py +228 -143
  123. hanzo_mcp/tools/mcp/__init__.py +2 -3
  124. hanzo_mcp/tools/mcp/mcp_add.py +27 -25
  125. hanzo_mcp/tools/mcp/mcp_remove.py +7 -8
  126. hanzo_mcp/tools/mcp/mcp_stats.py +23 -22
  127. hanzo_mcp/tools/mcp/mcp_tool.py +129 -98
  128. hanzo_mcp/tools/memory/__init__.py +39 -21
  129. hanzo_mcp/tools/memory/knowledge_tools.py +124 -99
  130. hanzo_mcp/tools/memory/memory_tools.py +90 -108
  131. hanzo_mcp/tools/search/__init__.py +7 -2
  132. hanzo_mcp/tools/search/find_tool.py +297 -212
  133. hanzo_mcp/tools/search/unified_search.py +366 -314
  134. hanzo_mcp/tools/shell/__init__.py +8 -7
  135. hanzo_mcp/tools/shell/auto_background.py +56 -49
  136. hanzo_mcp/tools/shell/base.py +1 -1
  137. hanzo_mcp/tools/shell/base_process.py +75 -75
  138. hanzo_mcp/tools/shell/bash_session.py +2 -2
  139. hanzo_mcp/tools/shell/bash_session_executor.py +4 -4
  140. hanzo_mcp/tools/shell/bash_tool.py +24 -31
  141. hanzo_mcp/tools/shell/command_executor.py +12 -12
  142. hanzo_mcp/tools/shell/logs.py +43 -33
  143. hanzo_mcp/tools/shell/npx.py +13 -13
  144. hanzo_mcp/tools/shell/npx_background.py +24 -21
  145. hanzo_mcp/tools/shell/npx_tool.py +18 -22
  146. hanzo_mcp/tools/shell/open.py +19 -21
  147. hanzo_mcp/tools/shell/pkill.py +31 -26
  148. hanzo_mcp/tools/shell/process_tool.py +32 -32
  149. hanzo_mcp/tools/shell/processes.py +57 -58
  150. hanzo_mcp/tools/shell/run_background.py +24 -25
  151. hanzo_mcp/tools/shell/run_command.py +5 -5
  152. hanzo_mcp/tools/shell/run_command_windows.py +5 -5
  153. hanzo_mcp/tools/shell/session_storage.py +3 -3
  154. hanzo_mcp/tools/shell/streaming_command.py +141 -126
  155. hanzo_mcp/tools/shell/uvx.py +24 -25
  156. hanzo_mcp/tools/shell/uvx_background.py +35 -33
  157. hanzo_mcp/tools/shell/uvx_tool.py +18 -22
  158. hanzo_mcp/tools/todo/__init__.py +6 -2
  159. hanzo_mcp/tools/todo/todo.py +50 -37
  160. hanzo_mcp/tools/todo/todo_read.py +5 -8
  161. hanzo_mcp/tools/todo/todo_write.py +5 -7
  162. hanzo_mcp/tools/vector/__init__.py +40 -28
  163. hanzo_mcp/tools/vector/ast_analyzer.py +176 -143
  164. hanzo_mcp/tools/vector/git_ingester.py +170 -179
  165. hanzo_mcp/tools/vector/index_tool.py +96 -44
  166. hanzo_mcp/tools/vector/infinity_store.py +283 -228
  167. hanzo_mcp/tools/vector/mock_infinity.py +39 -40
  168. hanzo_mcp/tools/vector/project_manager.py +88 -78
  169. hanzo_mcp/tools/vector/vector.py +59 -42
  170. hanzo_mcp/tools/vector/vector_index.py +30 -27
  171. hanzo_mcp/tools/vector/vector_search.py +64 -45
  172. hanzo_mcp/types.py +6 -4
  173. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/METADATA +1 -1
  174. hanzo_mcp-0.8.0.dist-info/RECORD +185 -0
  175. hanzo_mcp-0.7.6.dist-info/RECORD +0 -182
  176. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/WHEEL +0 -0
  177. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/entry_points.txt +0 -0
  178. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,21 @@
1
1
  """Tool personality system for organizing development tools based on famous programmers."""
2
2
 
3
3
  import os
4
+ from typing import Set, Dict, List, Optional
4
5
  from dataclasses import dataclass
5
- from typing import Dict, List, Optional, Set
6
6
 
7
7
 
8
8
  @dataclass
9
9
  class ToolPersonality:
10
10
  """Represents a programmer personality with tool preferences."""
11
+
11
12
  name: str
12
13
  programmer: str
13
14
  description: str
14
15
  tools: List[str]
15
16
  environment: Optional[Dict[str, str]] = None
16
17
  philosophy: Optional[str] = None
17
-
18
+
18
19
  def __post_init__(self):
19
20
  """Validate personality configuration."""
20
21
  if not self.name:
@@ -25,39 +26,39 @@ class ToolPersonality:
25
26
 
26
27
  class PersonalityRegistry:
27
28
  """Registry for tool personalities."""
28
-
29
+
29
30
  _personalities: Dict[str, ToolPersonality] = {}
30
31
  _active_personality: Optional[str] = None
31
-
32
+
32
33
  @classmethod
33
34
  def register(cls, personality: ToolPersonality) -> None:
34
35
  """Register a tool personality."""
35
36
  cls._personalities[personality.name] = personality
36
-
37
+
37
38
  @classmethod
38
39
  def get(cls, name: str) -> Optional[ToolPersonality]:
39
40
  """Get a personality by name."""
40
41
  return cls._personalities.get(name)
41
-
42
+
42
43
  @classmethod
43
44
  def list(cls) -> List[ToolPersonality]:
44
45
  """List all registered personalities."""
45
46
  return list(cls._personalities.values())
46
-
47
+
47
48
  @classmethod
48
49
  def set_active(cls, name: str) -> None:
49
50
  """Set the active personality."""
50
51
  if name not in cls._personalities:
51
52
  raise ValueError(f"Personality '{name}' not found")
52
53
  cls._active_personality = name
53
-
54
+
54
55
  @classmethod
55
56
  def get_active(cls) -> Optional[ToolPersonality]:
56
57
  """Get the active personality."""
57
58
  if cls._active_personality:
58
59
  return cls._personalities.get(cls._active_personality)
59
60
  return None
60
-
61
+
61
62
  @classmethod
62
63
  def get_active_tools(cls) -> Set[str]:
63
64
  """Get the set of tools from the active personality."""
@@ -87,8 +88,11 @@ personalities = [
87
88
  programmer="Guido van Rossum",
88
89
  description="Python's BDFL - readability counts",
89
90
  philosophy="There should be one-- and preferably only one --obvious way to do it.",
90
- tools=ESSENTIAL_TOOLS + ["uvx", "jupyter", "multi_edit", "symbols", "rules"] + AI_TOOLS + SEARCH_TOOLS,
91
- environment={"PYTHONPATH": ".", "PYTEST_ARGS": "-xvs"}
91
+ tools=ESSENTIAL_TOOLS
92
+ + ["uvx", "jupyter", "multi_edit", "symbols", "rules"]
93
+ + AI_TOOLS
94
+ + SEARCH_TOOLS,
95
+ environment={"PYTHONPATH": ".", "PYTEST_ARGS": "-xvs"},
92
96
  ),
93
97
  ToolPersonality(
94
98
  name="matz",
@@ -96,15 +100,18 @@ personalities = [
96
100
  description="Ruby creator - optimize for developer happiness",
97
101
  philosophy="Ruby is designed to make programmers happy.",
98
102
  tools=ESSENTIAL_TOOLS + ["npx", "symbols", "batch", "todo"] + SEARCH_TOOLS,
99
- environment={"RUBY_VERSION": "3.0", "BUNDLE_PATH": "vendor/bundle"}
103
+ environment={"RUBY_VERSION": "3.0", "BUNDLE_PATH": "vendor/bundle"},
100
104
  ),
101
105
  ToolPersonality(
102
106
  name="brendan",
103
107
  programmer="Brendan Eich",
104
108
  description="JavaScript creator - dynamic and flexible",
105
109
  philosophy="Always bet on JS.",
106
- tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "todo", "rules"] + BUILD_TOOLS + SEARCH_TOOLS,
107
- environment={"NODE_ENV": "development", "NPM_CONFIG_LOGLEVEL": "warn"}
110
+ tools=ESSENTIAL_TOOLS
111
+ + ["npx", "watch", "symbols", "todo", "rules"]
112
+ + BUILD_TOOLS
113
+ + SEARCH_TOOLS,
114
+ environment={"NODE_ENV": "development", "NPM_CONFIG_LOGLEVEL": "warn"},
108
115
  ),
109
116
  ToolPersonality(
110
117
  name="dennis",
@@ -112,15 +119,18 @@ personalities = [
112
119
  description="C creator - close to the metal",
113
120
  philosophy="UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.",
114
121
  tools=ESSENTIAL_TOOLS + ["symbols", "content_replace"] + UNIX_TOOLS,
115
- environment={"CC": "gcc", "CFLAGS": "-Wall -O2"}
122
+ environment={"CC": "gcc", "CFLAGS": "-Wall -O2"},
116
123
  ),
117
124
  ToolPersonality(
118
125
  name="bjarne",
119
126
  programmer="Bjarne Stroustrup",
120
127
  description="C++ creator - zero-overhead abstractions",
121
128
  philosophy="C++ is designed to allow you to express ideas.",
122
- tools=ESSENTIAL_TOOLS + ["symbols", "multi_edit", "content_replace"] + UNIX_TOOLS + BUILD_TOOLS,
123
- environment={"CXX": "g++", "CXXFLAGS": "-std=c++20 -Wall"}
129
+ tools=ESSENTIAL_TOOLS
130
+ + ["symbols", "multi_edit", "content_replace"]
131
+ + UNIX_TOOLS
132
+ + BUILD_TOOLS,
133
+ environment={"CXX": "g++", "CXXFLAGS": "-std=c++20 -Wall"},
124
134
  ),
125
135
  ToolPersonality(
126
136
  name="james",
@@ -128,15 +138,18 @@ personalities = [
128
138
  description="Java creator - write once, run anywhere",
129
139
  philosophy="Java is C++ without the guns, knives, and clubs.",
130
140
  tools=ESSENTIAL_TOOLS + ["symbols", "batch", "todo"] + BUILD_TOOLS,
131
- environment={"JAVA_HOME": "/usr/lib/jvm/java-11-openjdk"}
141
+ environment={"JAVA_HOME": "/usr/lib/jvm/java-11-openjdk"},
132
142
  ),
133
143
  ToolPersonality(
134
144
  name="anders",
135
145
  programmer="Anders Hejlsberg",
136
146
  description="TypeScript/C# creator - type safety matters",
137
147
  philosophy="TypeScript is JavaScript that scales.",
138
- tools=ESSENTIAL_TOOLS + ["npx", "symbols", "watch", "rules"] + BUILD_TOOLS + SEARCH_TOOLS,
139
- environment={"TYPESCRIPT_VERSION": "5.0"}
148
+ tools=ESSENTIAL_TOOLS
149
+ + ["npx", "symbols", "watch", "rules"]
150
+ + BUILD_TOOLS
151
+ + SEARCH_TOOLS,
152
+ environment={"TYPESCRIPT_VERSION": "5.0"},
140
153
  ),
141
154
  ToolPersonality(
142
155
  name="larry",
@@ -144,7 +157,7 @@ personalities = [
144
157
  description="Perl creator - there's more than one way to do it",
145
158
  philosophy="The three chief virtues of a programmer are laziness, impatience, and hubris.",
146
159
  tools=ESSENTIAL_TOOLS + ["grep", "content_replace", "batch"] + UNIX_TOOLS,
147
- environment={"PERL5LIB": "./lib"}
160
+ environment={"PERL5LIB": "./lib"},
148
161
  ),
149
162
  ToolPersonality(
150
163
  name="rasmus",
@@ -152,7 +165,7 @@ personalities = [
152
165
  description="PHP creator - pragmatic web development",
153
166
  philosophy="I'm not a real programmer. I throw together things until it works.",
154
167
  tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch"] + DATABASE_TOOLS,
155
- environment={"PHP_VERSION": "8.0"}
168
+ environment={"PHP_VERSION": "8.0"},
156
169
  ),
157
170
  ToolPersonality(
158
171
  name="rich",
@@ -160,25 +173,29 @@ personalities = [
160
173
  description="Clojure creator - simplicity matters",
161
174
  philosophy="Programming is not about typing... it's about thinking.",
162
175
  tools=ESSENTIAL_TOOLS + ["symbols", "todo", "batch"] + AI_TOOLS,
163
- environment={"CLOJURE_VERSION": "1.11"}
176
+ environment={"CLOJURE_VERSION": "1.11"},
164
177
  ),
165
-
166
178
  # 11-20: Systems & Infrastructure
167
179
  ToolPersonality(
168
180
  name="linus",
169
181
  programmer="Linus Torvalds",
170
182
  description="Linux & Git creator - pragmatic excellence",
171
183
  philosophy="Talk is cheap. Show me the code.",
172
- tools=ESSENTIAL_TOOLS + ["git_search", "diff", "content_replace", "critic"] + UNIX_TOOLS,
173
- environment={"KERNEL_VERSION": "6.0", "GIT_AUTHOR_NAME": "Linus Torvalds"}
184
+ tools=ESSENTIAL_TOOLS
185
+ + ["git_search", "diff", "content_replace", "critic"]
186
+ + UNIX_TOOLS,
187
+ environment={"KERNEL_VERSION": "6.0", "GIT_AUTHOR_NAME": "Linus Torvalds"},
174
188
  ),
175
189
  ToolPersonality(
176
190
  name="rob",
177
191
  programmer="Rob Pike",
178
192
  description="Go creator - simplicity and concurrency",
179
193
  philosophy="A little copying is better than a little dependency.",
180
- tools=ESSENTIAL_TOOLS + ["symbols", "batch", "process"] + UNIX_TOOLS + BUILD_TOOLS,
181
- environment={"GOPATH": "~/go", "GO111MODULE": "on"}
194
+ tools=ESSENTIAL_TOOLS
195
+ + ["symbols", "batch", "process"]
196
+ + UNIX_TOOLS
197
+ + BUILD_TOOLS,
198
+ environment={"GOPATH": "~/go", "GO111MODULE": "on"},
182
199
  ),
183
200
  ToolPersonality(
184
201
  name="ken",
@@ -186,7 +203,7 @@ personalities = [
186
203
  description="Unix creator - elegant minimalism",
187
204
  philosophy="When in doubt, use brute force.",
188
205
  tools=ESSENTIAL_TOOLS + UNIX_TOOLS,
189
- environment={"PATH": "/usr/local/bin:$PATH"}
206
+ environment={"PATH": "/usr/local/bin:$PATH"},
190
207
  ),
191
208
  ToolPersonality(
192
209
  name="bill",
@@ -194,7 +211,7 @@ personalities = [
194
211
  description="Vi creator & BSD contributor",
195
212
  philosophy="The best way to predict the future is to invent it.",
196
213
  tools=ESSENTIAL_TOOLS + ["neovim_edit", "neovim_command"] + UNIX_TOOLS,
197
- environment={"EDITOR": "vi"}
214
+ environment={"EDITOR": "vi"},
198
215
  ),
199
216
  ToolPersonality(
200
217
  name="richard",
@@ -202,7 +219,7 @@ personalities = [
202
219
  description="GNU creator - software freedom",
203
220
  philosophy="Free software is a matter of liberty, not price.",
204
221
  tools=ESSENTIAL_TOOLS + ["content_replace", "batch"] + UNIX_TOOLS,
205
- environment={"EDITOR": "emacs"}
222
+ environment={"EDITOR": "emacs"},
206
223
  ),
207
224
  ToolPersonality(
208
225
  name="brian",
@@ -210,7 +227,7 @@ personalities = [
210
227
  description="AWK co-creator & Unix pioneer",
211
228
  philosophy="Controlling complexity is the essence of computer programming.",
212
229
  tools=ESSENTIAL_TOOLS + ["grep", "content_replace"] + UNIX_TOOLS,
213
- environment={"AWK": "gawk"}
230
+ environment={"AWK": "gawk"},
214
231
  ),
215
232
  ToolPersonality(
216
233
  name="donald",
@@ -218,15 +235,17 @@ personalities = [
218
235
  description="TeX creator - literate programming",
219
236
  philosophy="Premature optimization is the root of all evil.",
220
237
  tools=ESSENTIAL_TOOLS + ["symbols", "todo", "critic"],
221
- environment={"TEXMFHOME": "~/texmf"}
238
+ environment={"TEXMFHOME": "~/texmf"},
222
239
  ),
223
240
  ToolPersonality(
224
241
  name="graydon",
225
242
  programmer="Graydon Hoare",
226
243
  description="Rust creator - memory safety without GC",
227
244
  philosophy="Memory safety without garbage collection, concurrency without data races.",
228
- tools=ESSENTIAL_TOOLS + ["symbols", "multi_edit", "critic", "todo"] + BUILD_TOOLS,
229
- environment={"RUST_BACKTRACE": "1", "CARGO_HOME": "~/.cargo"}
245
+ tools=ESSENTIAL_TOOLS
246
+ + ["symbols", "multi_edit", "critic", "todo"]
247
+ + BUILD_TOOLS,
248
+ environment={"RUST_BACKTRACE": "1", "CARGO_HOME": "~/.cargo"},
230
249
  ),
231
250
  ToolPersonality(
232
251
  name="ryan",
@@ -234,7 +253,7 @@ personalities = [
234
253
  description="Node.js & Deno creator",
235
254
  philosophy="I/O needs to be done differently.",
236
255
  tools=ESSENTIAL_TOOLS + ["npx", "uvx", "watch", "process"] + BUILD_TOOLS,
237
- environment={"DENO_DIR": "~/.deno"}
256
+ environment={"DENO_DIR": "~/.deno"},
238
257
  ),
239
258
  ToolPersonality(
240
259
  name="mitchell",
@@ -242,9 +261,8 @@ personalities = [
242
261
  description="HashiCorp founder - infrastructure as code",
243
262
  philosophy="Automate everything.",
244
263
  tools=ESSENTIAL_TOOLS + ["bash", "process", "watch", "todo"] + BUILD_TOOLS,
245
- environment={"TERRAFORM_VERSION": "1.0"}
264
+ environment={"TERRAFORM_VERSION": "1.0"},
246
265
  ),
247
-
248
266
  # 21-30: Web & Frontend
249
267
  ToolPersonality(
250
268
  name="tim",
@@ -252,7 +270,7 @@ personalities = [
252
270
  description="WWW inventor - open web",
253
271
  philosophy="The Web is for everyone.",
254
272
  tools=ESSENTIAL_TOOLS + ["npx", "watch", "rules"] + SEARCH_TOOLS,
255
- environment={"W3C_VALIDATOR": "true"}
273
+ environment={"W3C_VALIDATOR": "true"},
256
274
  ),
257
275
  ToolPersonality(
258
276
  name="douglas",
@@ -260,7 +278,7 @@ personalities = [
260
278
  description="JSON creator - JavaScript the good parts",
261
279
  philosophy="JavaScript has some extraordinarily good parts.",
262
280
  tools=ESSENTIAL_TOOLS + ["npx", "symbols", "critic"] + SEARCH_TOOLS,
263
- environment={"JSLINT": "true"}
281
+ environment={"JSLINT": "true"},
264
282
  ),
265
283
  ToolPersonality(
266
284
  name="john",
@@ -268,7 +286,7 @@ personalities = [
268
286
  description="jQuery creator - write less, do more",
269
287
  philosophy="Do more with less code.",
270
288
  tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols"] + SEARCH_TOOLS,
271
- environment={"JQUERY_VERSION": "3.6"}
289
+ environment={"JQUERY_VERSION": "3.6"},
272
290
  ),
273
291
  ToolPersonality(
274
292
  name="evan",
@@ -276,7 +294,7 @@ personalities = [
276
294
  description="Vue.js creator - progressive framework",
277
295
  philosophy="Approachable, versatile, performant.",
278
296
  tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "todo"] + BUILD_TOOLS,
279
- environment={"VUE_VERSION": "3"}
297
+ environment={"VUE_VERSION": "3"},
280
298
  ),
281
299
  ToolPersonality(
282
300
  name="jordan",
@@ -284,7 +302,7 @@ personalities = [
284
302
  description="React creator - declarative UIs",
285
303
  philosophy="Learn once, write anywhere.",
286
304
  tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "rules"] + BUILD_TOOLS,
287
- environment={"REACT_VERSION": "18"}
305
+ environment={"REACT_VERSION": "18"},
288
306
  ),
289
307
  ToolPersonality(
290
308
  name="jeremy",
@@ -292,7 +310,7 @@ personalities = [
292
310
  description="CoffeeScript & Backbone creator",
293
311
  philosophy="It's just JavaScript.",
294
312
  tools=ESSENTIAL_TOOLS + ["npx", "symbols", "watch"],
295
- environment={"COFFEE_VERSION": "2.0"}
313
+ environment={"COFFEE_VERSION": "2.0"},
296
314
  ),
297
315
  ToolPersonality(
298
316
  name="david",
@@ -300,7 +318,7 @@ personalities = [
300
318
  description="Rails creator - convention over configuration",
301
319
  philosophy="Optimize for programmer happiness.",
302
320
  tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch", "todo"] + DATABASE_TOOLS,
303
- environment={"RAILS_ENV": "development"}
321
+ environment={"RAILS_ENV": "development"},
304
322
  ),
305
323
  ToolPersonality(
306
324
  name="taylor",
@@ -308,7 +326,7 @@ personalities = [
308
326
  description="Laravel creator - PHP artisan",
309
327
  philosophy="Love beautiful code? We do too.",
310
328
  tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch"] + DATABASE_TOOLS,
311
- environment={"LARAVEL_VERSION": "10"}
329
+ environment={"LARAVEL_VERSION": "10"},
312
330
  ),
313
331
  ToolPersonality(
314
332
  name="adrian",
@@ -316,7 +334,7 @@ personalities = [
316
334
  description="Django co-creator - web framework for perfectionists",
317
335
  philosophy="The web framework for perfectionists with deadlines.",
318
336
  tools=ESSENTIAL_TOOLS + ["uvx", "sql_query", "watch"] + DATABASE_TOOLS,
319
- environment={"DJANGO_SETTINGS_MODULE": "settings"}
337
+ environment={"DJANGO_SETTINGS_MODULE": "settings"},
320
338
  ),
321
339
  ToolPersonality(
322
340
  name="matt",
@@ -324,9 +342,8 @@ personalities = [
324
342
  description="WordPress creator - democratize publishing",
325
343
  philosophy="Code is poetry.",
326
344
  tools=ESSENTIAL_TOOLS + ["sql_query", "watch", "rules"] + DATABASE_TOOLS,
327
- environment={"WP_DEBUG": "true"}
345
+ environment={"WP_DEBUG": "true"},
328
346
  ),
329
-
330
347
  # 31-40: Database & Data
331
348
  ToolPersonality(
332
349
  name="michael_s",
@@ -334,7 +351,7 @@ personalities = [
334
351
  description="PostgreSQL creator - ACID matters",
335
352
  philosophy="One size does not fit all in databases.",
336
353
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "todo"],
337
- environment={"PGDATA": "/var/lib/postgresql/data"}
354
+ environment={"PGDATA": "/var/lib/postgresql/data"},
338
355
  ),
339
356
  ToolPersonality(
340
357
  name="michael_w",
@@ -342,7 +359,7 @@ personalities = [
342
359
  description="MySQL/MariaDB creator",
343
360
  philosophy="A small fast database for the web.",
344
361
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["watch"],
345
- environment={"MYSQL_HOME": "/usr/local/mysql"}
362
+ environment={"MYSQL_HOME": "/usr/local/mysql"},
346
363
  ),
347
364
  ToolPersonality(
348
365
  name="salvatore",
@@ -350,7 +367,7 @@ personalities = [
350
367
  description="Redis creator - data structures server",
351
368
  philosophy="Simplicity is a great virtue.",
352
369
  tools=ESSENTIAL_TOOLS + ["bash", "watch", "process"] + DATABASE_TOOLS,
353
- environment={"REDIS_VERSION": "7.0"}
370
+ environment={"REDIS_VERSION": "7.0"},
354
371
  ),
355
372
  ToolPersonality(
356
373
  name="dwight",
@@ -358,7 +375,7 @@ personalities = [
358
375
  description="MongoDB co-creator - document databases",
359
376
  philosophy="Build the database you want to use.",
360
377
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["watch", "todo"],
361
- environment={"MONGO_VERSION": "6.0"}
378
+ environment={"MONGO_VERSION": "6.0"},
362
379
  ),
363
380
  ToolPersonality(
364
381
  name="edgar",
@@ -366,7 +383,7 @@ personalities = [
366
383
  description="Relational model inventor",
367
384
  philosophy="Data independence is key.",
368
385
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["critic"],
369
- environment={"SQL_MODE": "ANSI"}
386
+ environment={"SQL_MODE": "ANSI"},
370
387
  ),
371
388
  ToolPersonality(
372
389
  name="jim_gray",
@@ -374,7 +391,7 @@ personalities = [
374
391
  description="Transaction processing pioneer",
375
392
  philosophy="The transaction is the unit of work.",
376
393
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "critic"],
377
- environment={"ISOLATION_LEVEL": "SERIALIZABLE"}
394
+ environment={"ISOLATION_LEVEL": "SERIALIZABLE"},
378
395
  ),
379
396
  ToolPersonality(
380
397
  name="jeff_dean",
@@ -382,7 +399,7 @@ personalities = [
382
399
  description="MapReduce & BigTable co-creator",
383
400
  philosophy="Design for planet-scale.",
384
401
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + VECTOR_TOOLS + ["batch"],
385
- environment={"HADOOP_HOME": "/opt/hadoop"}
402
+ environment={"HADOOP_HOME": "/opt/hadoop"},
386
403
  ),
387
404
  ToolPersonality(
388
405
  name="sanjay",
@@ -390,7 +407,7 @@ personalities = [
390
407
  description="MapReduce & BigTable co-creator",
391
408
  philosophy="Simple abstractions for complex systems.",
392
409
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process"],
393
- environment={"SPARK_HOME": "/opt/spark"}
410
+ environment={"SPARK_HOME": "/opt/spark"},
394
411
  ),
395
412
  ToolPersonality(
396
413
  name="mike",
@@ -398,7 +415,7 @@ personalities = [
398
415
  description="Hadoop co-creator",
399
416
  philosophy="Storage is cheap, compute is cheap.",
400
417
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process"],
401
- environment={"HADOOP_CONF_DIR": "/etc/hadoop"}
418
+ environment={"HADOOP_CONF_DIR": "/etc/hadoop"},
402
419
  ),
403
420
  ToolPersonality(
404
421
  name="matei",
@@ -406,9 +423,8 @@ personalities = [
406
423
  description="Apache Spark creator",
407
424
  philosophy="In-memory computing changes everything.",
408
425
  tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process", "jupyter"],
409
- environment={"SPARK_MASTER": "local[*]"}
426
+ environment={"SPARK_MASTER": "local[*]"},
410
427
  ),
411
-
412
428
  # 41-50: AI & Machine Learning
413
429
  ToolPersonality(
414
430
  name="yann",
@@ -416,7 +432,7 @@ personalities = [
416
432
  description="Deep learning pioneer - ConvNets",
417
433
  philosophy="AI is not magic; it's just math and data.",
418
434
  tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "watch"],
419
- environment={"PYTORCH_VERSION": "2.0"}
435
+ environment={"PYTORCH_VERSION": "2.0"},
420
436
  ),
421
437
  ToolPersonality(
422
438
  name="geoffrey",
@@ -424,7 +440,7 @@ personalities = [
424
440
  description="Deep learning godfather",
425
441
  philosophy="The brain has to work with what it's got.",
426
442
  tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter"],
427
- environment={"TF_VERSION": "2.13"}
443
+ environment={"TF_VERSION": "2.13"},
428
444
  ),
429
445
  ToolPersonality(
430
446
  name="yoshua",
@@ -432,7 +448,7 @@ personalities = [
432
448
  description="Deep learning pioneer",
433
449
  philosophy="We need to think about AI that helps humanity.",
434
450
  tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "batch"],
435
- environment={"THEANO_FLAGS": "device=cuda"}
451
+ environment={"THEANO_FLAGS": "device=cuda"},
436
452
  ),
437
453
  ToolPersonality(
438
454
  name="andrew",
@@ -440,7 +456,7 @@ personalities = [
440
456
  description="AI educator & Coursera co-founder",
441
457
  philosophy="AI is the new electricity.",
442
458
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "todo", "watch"],
443
- environment={"CUDA_VISIBLE_DEVICES": "0"}
459
+ environment={"CUDA_VISIBLE_DEVICES": "0"},
444
460
  ),
445
461
  ToolPersonality(
446
462
  name="demis",
@@ -448,7 +464,7 @@ personalities = [
448
464
  description="DeepMind co-founder",
449
465
  philosophy="Solve intelligence, use it to solve everything else.",
450
466
  tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["agent", "consensus"],
451
- environment={"JAX_VERSION": "0.4"}
467
+ environment={"JAX_VERSION": "0.4"},
452
468
  ),
453
469
  ToolPersonality(
454
470
  name="ilya",
@@ -456,7 +472,7 @@ personalities = [
456
472
  description="OpenAI co-founder",
457
473
  philosophy="Scale is all you need.",
458
474
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["agent", "consensus", "critic"],
459
- environment={"OPENAI_API_KEY": "sk-..."}
475
+ environment={"OPENAI_API_KEY": "sk-..."},
460
476
  ),
461
477
  ToolPersonality(
462
478
  name="andrej",
@@ -464,7 +480,7 @@ personalities = [
464
480
  description="AI educator & Tesla AI director",
465
481
  philosophy="Build it from scratch to understand it.",
466
482
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "todo"],
467
- environment={"CUDA_HOME": "/usr/local/cuda"}
483
+ environment={"CUDA_HOME": "/usr/local/cuda"},
468
484
  ),
469
485
  ToolPersonality(
470
486
  name="chris",
@@ -472,7 +488,7 @@ personalities = [
472
488
  description="AI interpretability researcher",
473
489
  philosophy="Understanding neural networks matters.",
474
490
  tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "critic"],
475
- environment={"DISTILL_MODE": "interactive"}
491
+ environment={"DISTILL_MODE": "interactive"},
476
492
  ),
477
493
  ToolPersonality(
478
494
  name="francois",
@@ -480,7 +496,7 @@ personalities = [
480
496
  description="Keras creator",
481
497
  philosophy="Deep learning for humans.",
482
498
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "todo"],
483
- environment={"KERAS_BACKEND": "tensorflow"}
499
+ environment={"KERAS_BACKEND": "tensorflow"},
484
500
  ),
485
501
  ToolPersonality(
486
502
  name="jeremy_howard",
@@ -488,9 +504,8 @@ personalities = [
488
504
  description="fast.ai founder",
489
505
  philosophy="Deep learning should be accessible to all.",
490
506
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "rules"],
491
- environment={"FASTAI_VERSION": "2.7"}
507
+ environment={"FASTAI_VERSION": "2.7"},
492
508
  ),
493
-
494
509
  # 51-60: Security & Cryptography
495
510
  ToolPersonality(
496
511
  name="bruce",
@@ -498,7 +513,7 @@ personalities = [
498
513
  description="Security expert & cryptographer",
499
514
  philosophy="Security is a process, not a product.",
500
515
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"] + UNIX_TOOLS,
501
- environment={"SECURITY_AUDIT": "true"}
516
+ environment={"SECURITY_AUDIT": "true"},
502
517
  ),
503
518
  ToolPersonality(
504
519
  name="phil",
@@ -506,7 +521,7 @@ personalities = [
506
521
  description="PGP creator - privacy matters",
507
522
  philosophy="If privacy is outlawed, only outlaws will have privacy.",
508
523
  tools=ESSENTIAL_TOOLS + ["critic", "content_replace"] + UNIX_TOOLS,
509
- environment={"GPG_TTY": "$(tty)"}
524
+ environment={"GPG_TTY": "$(tty)"},
510
525
  ),
511
526
  ToolPersonality(
512
527
  name="whitfield",
@@ -514,7 +529,7 @@ personalities = [
514
529
  description="Public-key cryptography pioneer",
515
530
  philosophy="Privacy is necessary for an open society.",
516
531
  tools=ESSENTIAL_TOOLS + ["critic", "symbols"],
517
- environment={"OPENSSL_VERSION": "3.0"}
532
+ environment={"OPENSSL_VERSION": "3.0"},
518
533
  ),
519
534
  ToolPersonality(
520
535
  name="ralph",
@@ -522,7 +537,7 @@ personalities = [
522
537
  description="Merkle trees inventor",
523
538
  philosophy="Cryptography is about mathematical guarantees.",
524
539
  tools=ESSENTIAL_TOOLS + ["symbols", "critic", "batch"],
525
- environment={"HASH_ALGORITHM": "SHA256"}
540
+ environment={"HASH_ALGORITHM": "SHA256"},
526
541
  ),
527
542
  ToolPersonality(
528
543
  name="daniel_b",
@@ -530,7 +545,7 @@ personalities = [
530
545
  description="djb - qmail & Curve25519 creator",
531
546
  philosophy="Security through simplicity.",
532
547
  tools=ESSENTIAL_TOOLS + ["critic", "symbols"] + UNIX_TOOLS,
533
- environment={"QMAIL_HOME": "/var/qmail"}
548
+ environment={"QMAIL_HOME": "/var/qmail"},
534
549
  ),
535
550
  ToolPersonality(
536
551
  name="moxie",
@@ -538,7 +553,7 @@ personalities = [
538
553
  description="Signal creator - privacy for everyone",
539
554
  philosophy="Making private communication simple.",
540
555
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "rules"],
541
- environment={"SIGNAL_PROTOCOL": "true"}
556
+ environment={"SIGNAL_PROTOCOL": "true"},
542
557
  ),
543
558
  ToolPersonality(
544
559
  name="theo",
@@ -546,7 +561,7 @@ personalities = [
546
561
  description="OpenBSD creator - security by default",
547
562
  philosophy="Shut up and hack.",
548
563
  tools=ESSENTIAL_TOOLS + ["critic", "diff"] + UNIX_TOOLS,
549
- environment={"OPENBSD_VERSION": "7.3"}
564
+ environment={"OPENBSD_VERSION": "7.3"},
550
565
  ),
551
566
  ToolPersonality(
552
567
  name="dan_kaminsky",
@@ -554,7 +569,7 @@ personalities = [
554
569
  description="DNS security researcher",
555
570
  philosophy="Break it to make it better.",
556
571
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "process"] + UNIX_TOOLS,
557
- environment={"DNSSEC": "true"}
572
+ environment={"DNSSEC": "true"},
558
573
  ),
559
574
  ToolPersonality(
560
575
  name="katie",
@@ -562,7 +577,7 @@ personalities = [
562
577
  description="Bug bounty pioneer",
563
578
  philosophy="Hackers are a resource, not a threat.",
564
579
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "todo"],
565
- environment={"BUG_BOUNTY": "enabled"}
580
+ environment={"BUG_BOUNTY": "enabled"},
566
581
  ),
567
582
  ToolPersonality(
568
583
  name="matt_blaze",
@@ -570,9 +585,8 @@ personalities = [
570
585
  description="Cryptographer & security researcher",
571
586
  philosophy="Crypto is hard to get right.",
572
587
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"],
573
- environment={"CRYPTO_LIBRARY": "nacl"}
588
+ environment={"CRYPTO_LIBRARY": "nacl"},
574
589
  ),
575
-
576
590
  # 61-70: Gaming & Graphics
577
591
  ToolPersonality(
578
592
  name="john_carmack",
@@ -580,7 +594,7 @@ personalities = [
580
594
  description="id Software - Doom & Quake creator",
581
595
  philosophy="Focus is a matter of deciding what things you're not going to do.",
582
596
  tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process"] + BUILD_TOOLS,
583
- environment={"OPENGL_VERSION": "4.6"}
597
+ environment={"OPENGL_VERSION": "4.6"},
584
598
  ),
585
599
  ToolPersonality(
586
600
  name="sid",
@@ -588,7 +602,7 @@ personalities = [
588
602
  description="Civilization creator",
589
603
  philosophy="A game is a series of interesting choices.",
590
604
  tools=ESSENTIAL_TOOLS + ["todo", "watch", "process"],
591
- environment={"GAME_MODE": "debug"}
605
+ environment={"GAME_MODE": "debug"},
592
606
  ),
593
607
  ToolPersonality(
594
608
  name="shigeru",
@@ -596,7 +610,7 @@ personalities = [
596
610
  description="Mario & Zelda creator",
597
611
  philosophy="A delayed game is eventually good, but a rushed game is forever bad.",
598
612
  tools=ESSENTIAL_TOOLS + ["todo", "watch", "critic"],
599
- environment={"NINTENDO_SDK": "true"}
613
+ environment={"NINTENDO_SDK": "true"},
600
614
  ),
601
615
  ToolPersonality(
602
616
  name="gabe",
@@ -604,7 +618,7 @@ personalities = [
604
618
  description="Valve founder - Half-Life & Steam",
605
619
  philosophy="The easiest way to stop piracy is not by putting antipiracy technology to work. It's by giving those people a service that's better than what they're receiving from the pirates.",
606
620
  tools=ESSENTIAL_TOOLS + ["process", "watch", "todo"] + BUILD_TOOLS,
607
- environment={"STEAM_RUNTIME": "1"}
621
+ environment={"STEAM_RUNTIME": "1"},
608
622
  ),
609
623
  ToolPersonality(
610
624
  name="markus",
@@ -612,7 +626,7 @@ personalities = [
612
626
  description="Minecraft creator - Notch",
613
627
  philosophy="Just make games for yourself and try to have fun.",
614
628
  tools=ESSENTIAL_TOOLS + ["watch", "todo", "process"],
615
- environment={"LWJGL_VERSION": "3.3"}
629
+ environment={"LWJGL_VERSION": "3.3"},
616
630
  ),
617
631
  ToolPersonality(
618
632
  name="jonathan",
@@ -620,7 +634,7 @@ personalities = [
620
634
  description="Braid & The Witness creator",
621
635
  philosophy="Optimize for deep, meaningful experiences.",
622
636
  tools=ESSENTIAL_TOOLS + ["symbols", "critic", "watch"],
623
- environment={"JAI_COMPILER": "beta"}
637
+ environment={"JAI_COMPILER": "beta"},
624
638
  ),
625
639
  ToolPersonality(
626
640
  name="casey",
@@ -628,7 +642,7 @@ personalities = [
628
642
  description="Handmade Hero creator",
629
643
  philosophy="Performance matters. Write code from scratch.",
630
644
  tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process", "critic"],
631
- environment={"HANDMADE": "true"}
645
+ environment={"HANDMADE": "true"},
632
646
  ),
633
647
  ToolPersonality(
634
648
  name="tim_sweeney",
@@ -636,7 +650,7 @@ personalities = [
636
650
  description="Epic Games founder - Unreal Engine",
637
651
  philosophy="The engine is the game.",
638
652
  tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process"] + BUILD_TOOLS,
639
- environment={"UNREAL_ENGINE": "5"}
653
+ environment={"UNREAL_ENGINE": "5"},
640
654
  ),
641
655
  ToolPersonality(
642
656
  name="hideo",
@@ -644,7 +658,7 @@ personalities = [
644
658
  description="Metal Gear creator",
645
659
  philosophy="70% of my body is made of movies.",
646
660
  tools=ESSENTIAL_TOOLS + ["todo", "watch", "critic"],
647
- environment={"KOJIMA_PRODUCTIONS": "true"}
661
+ environment={"KOJIMA_PRODUCTIONS": "true"},
648
662
  ),
649
663
  ToolPersonality(
650
664
  name="will",
@@ -652,9 +666,8 @@ personalities = [
652
666
  description="SimCity & The Sims creator",
653
667
  philosophy="Games are a form of communication.",
654
668
  tools=ESSENTIAL_TOOLS + ["todo", "watch", "process"],
655
- environment={"SIMULATION_MODE": "debug"}
669
+ environment={"SIMULATION_MODE": "debug"},
656
670
  ),
657
-
658
671
  # 71-80: Open Source Leaders
659
672
  ToolPersonality(
660
673
  name="miguel",
@@ -662,7 +675,7 @@ personalities = [
662
675
  description="GNOME & Mono creator",
663
676
  philosophy="Open source is about standing on the shoulders of giants.",
664
677
  tools=ESSENTIAL_TOOLS + ["symbols", "todo"] + BUILD_TOOLS,
665
- environment={"MONO_VERSION": "6.12"}
678
+ environment={"MONO_VERSION": "6.12"},
666
679
  ),
667
680
  ToolPersonality(
668
681
  name="nat",
@@ -670,7 +683,7 @@ personalities = [
670
683
  description="GitHub CEO & AI entrepreneur",
671
684
  philosophy="Developers are the builders of the digital world.",
672
685
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["git_search", "todo"],
673
- environment={"GITHUB_TOKEN": "ghp_..."}
686
+ environment={"GITHUB_TOKEN": "ghp_..."},
674
687
  ),
675
688
  ToolPersonality(
676
689
  name="patrick",
@@ -678,7 +691,7 @@ personalities = [
678
691
  description="Slackware creator",
679
692
  philosophy="Keep it simple, keep it stable.",
680
693
  tools=ESSENTIAL_TOOLS + UNIX_TOOLS,
681
- environment={"SLACKWARE_VERSION": "15.0"}
694
+ environment={"SLACKWARE_VERSION": "15.0"},
682
695
  ),
683
696
  ToolPersonality(
684
697
  name="ian",
@@ -686,7 +699,7 @@ personalities = [
686
699
  description="Debian founder",
687
700
  philosophy="Free software, free society.",
688
701
  tools=ESSENTIAL_TOOLS + UNIX_TOOLS + ["todo"],
689
- environment={"DEBIAN_FRONTEND": "noninteractive"}
702
+ environment={"DEBIAN_FRONTEND": "noninteractive"},
690
703
  ),
691
704
  ToolPersonality(
692
705
  name="mark_shuttleworth",
@@ -694,7 +707,7 @@ personalities = [
694
707
  description="Ubuntu founder",
695
708
  philosophy="Linux for human beings.",
696
709
  tools=ESSENTIAL_TOOLS + ["todo", "rules"] + BUILD_TOOLS,
697
- environment={"UBUNTU_VERSION": "22.04"}
710
+ environment={"UBUNTU_VERSION": "22.04"},
698
711
  ),
699
712
  ToolPersonality(
700
713
  name="lennart",
@@ -702,7 +715,7 @@ personalities = [
702
715
  description="systemd creator",
703
716
  philosophy="Do one thing and do it well... or do everything.",
704
717
  tools=ESSENTIAL_TOOLS + ["process", "watch"] + UNIX_TOOLS,
705
- environment={"SYSTEMD_VERSION": "253"}
718
+ environment={"SYSTEMD_VERSION": "253"},
706
719
  ),
707
720
  ToolPersonality(
708
721
  name="bram",
@@ -710,7 +723,7 @@ personalities = [
710
723
  description="Vim creator",
711
724
  philosophy="The best way to avoid RSI is to not type so much.",
712
725
  tools=ESSENTIAL_TOOLS + ["neovim_edit", "neovim_command", "neovim_session"],
713
- environment={"VIM_VERSION": "9.0"}
726
+ environment={"VIM_VERSION": "9.0"},
714
727
  ),
715
728
  ToolPersonality(
716
729
  name="daniel_r",
@@ -718,7 +731,7 @@ personalities = [
718
731
  description="Gentoo founder",
719
732
  philosophy="Your system, your way.",
720
733
  tools=ESSENTIAL_TOOLS + BUILD_TOOLS + UNIX_TOOLS,
721
- environment={"GENTOO_PROFILE": "default/linux/amd64/17.1"}
734
+ environment={"GENTOO_PROFILE": "default/linux/amd64/17.1"},
722
735
  ),
723
736
  ToolPersonality(
724
737
  name="judd",
@@ -726,7 +739,7 @@ personalities = [
726
739
  description="Arch Linux creator",
727
740
  philosophy="Keep it simple.",
728
741
  tools=ESSENTIAL_TOOLS + BUILD_TOOLS + UNIX_TOOLS,
729
- environment={"ARCH_VERSION": "rolling"}
742
+ environment={"ARCH_VERSION": "rolling"},
730
743
  ),
731
744
  ToolPersonality(
732
745
  name="fabrice",
@@ -734,9 +747,8 @@ personalities = [
734
747
  description="QEMU & FFmpeg creator",
735
748
  philosophy="Small, fast, and elegant code.",
736
749
  tools=ESSENTIAL_TOOLS + ["symbols", "process"] + BUILD_TOOLS,
737
- environment={"QEMU_VERSION": "8.0"}
750
+ environment={"QEMU_VERSION": "8.0"},
738
751
  ),
739
-
740
752
  # 81-90: Modern Innovators
741
753
  ToolPersonality(
742
754
  name="vitalik",
@@ -744,7 +756,7 @@ personalities = [
744
756
  description="Ethereum creator",
745
757
  philosophy="Decentralization matters.",
746
758
  tools=ESSENTIAL_TOOLS + ["symbols", "critic", "todo"] + AI_TOOLS,
747
- environment={"ETH_NETWORK": "mainnet"}
759
+ environment={"ETH_NETWORK": "mainnet"},
748
760
  ),
749
761
  ToolPersonality(
750
762
  name="satoshi",
@@ -752,7 +764,7 @@ personalities = [
752
764
  description="Bitcoin creator",
753
765
  philosophy="Trust in mathematics.",
754
766
  tools=ESSENTIAL_TOOLS + ["critic", "symbols"] + UNIX_TOOLS,
755
- environment={"BITCOIN_NETWORK": "mainnet"}
767
+ environment={"BITCOIN_NETWORK": "mainnet"},
756
768
  ),
757
769
  ToolPersonality(
758
770
  name="chris_lattner",
@@ -760,7 +772,7 @@ personalities = [
760
772
  description="LLVM & Swift creator",
761
773
  philosophy="Compiler infrastructure should be modular.",
762
774
  tools=ESSENTIAL_TOOLS + ["symbols", "multi_edit", "critic"] + BUILD_TOOLS,
763
- environment={"LLVM_VERSION": "16"}
775
+ environment={"LLVM_VERSION": "16"},
764
776
  ),
765
777
  ToolPersonality(
766
778
  name="joe",
@@ -768,7 +780,7 @@ personalities = [
768
780
  description="Erlang creator",
769
781
  philosophy="Let it crash.",
770
782
  tools=ESSENTIAL_TOOLS + ["process", "watch", "critic"],
771
- environment={"ERL_VERSION": "OTP-26"}
783
+ environment={"ERL_VERSION": "OTP-26"},
772
784
  ),
773
785
  ToolPersonality(
774
786
  name="jose",
@@ -776,7 +788,7 @@ personalities = [
776
788
  description="Elixir creator",
777
789
  philosophy="Productive. Reliable. Fast.",
778
790
  tools=ESSENTIAL_TOOLS + ["watch", "process", "todo"],
779
- environment={"ELIXIR_VERSION": "1.15"}
791
+ environment={"ELIXIR_VERSION": "1.15"},
780
792
  ),
781
793
  ToolPersonality(
782
794
  name="sebastian",
@@ -784,7 +796,7 @@ personalities = [
784
796
  description="Udacity founder & self-driving car pioneer",
785
797
  philosophy="Education should be accessible to all.",
786
798
  tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch"],
787
- environment={"ROS_VERSION": "noetic"}
799
+ environment={"ROS_VERSION": "noetic"},
788
800
  ),
789
801
  ToolPersonality(
790
802
  name="palmer",
@@ -792,7 +804,7 @@ personalities = [
792
804
  description="Oculus founder",
793
805
  philosophy="VR is the final medium.",
794
806
  tools=ESSENTIAL_TOOLS + ["watch", "process"] + BUILD_TOOLS,
795
- environment={"UNITY_VERSION": "2023.1"}
807
+ environment={"UNITY_VERSION": "2023.1"},
796
808
  ),
797
809
  ToolPersonality(
798
810
  name="dylan",
@@ -800,7 +812,7 @@ personalities = [
800
812
  description="Figma co-founder",
801
813
  philosophy="Design tools should be collaborative.",
802
814
  tools=ESSENTIAL_TOOLS + ["watch", "todo", "rules"],
803
- environment={"FIGMA_API": "enabled"}
815
+ environment={"FIGMA_API": "enabled"},
804
816
  ),
805
817
  ToolPersonality(
806
818
  name="guillermo",
@@ -808,7 +820,7 @@ personalities = [
808
820
  description="Vercel founder & Next.js creator",
809
821
  philosophy="Make the Web. Faster.",
810
822
  tools=ESSENTIAL_TOOLS + ["npx", "watch", "rules"] + BUILD_TOOLS,
811
- environment={"NEXT_VERSION": "14"}
823
+ environment={"NEXT_VERSION": "14"},
812
824
  ),
813
825
  ToolPersonality(
814
826
  name="tom",
@@ -816,19 +828,35 @@ personalities = [
816
828
  description="GitHub co-founder & TOML creator",
817
829
  philosophy="Optimize for happiness.",
818
830
  tools=ESSENTIAL_TOOLS + ["git_search", "todo", "rules"],
819
- environment={"GITHUB_ACTIONS": "true"}
831
+ environment={"GITHUB_ACTIONS": "true"},
820
832
  ),
821
-
822
833
  # 91-100: Special Configurations
823
834
  ToolPersonality(
824
835
  name="fullstack",
825
836
  programmer="Full Stack Developer",
826
837
  description="Every tool for every job",
827
838
  philosophy="Jack of all trades, master of... well, all trades.",
828
- tools=list(set(ESSENTIAL_TOOLS + AI_TOOLS + SEARCH_TOOLS + DATABASE_TOOLS +
829
- BUILD_TOOLS + UNIX_TOOLS + VECTOR_TOOLS + ["todo", "rules", "watch",
830
- "jupyter", "neovim_edit", "mcp", "consensus"])),
831
- environment={"ALL_TOOLS": "enabled"}
839
+ tools=list(
840
+ set(
841
+ ESSENTIAL_TOOLS
842
+ + AI_TOOLS
843
+ + SEARCH_TOOLS
844
+ + DATABASE_TOOLS
845
+ + BUILD_TOOLS
846
+ + UNIX_TOOLS
847
+ + VECTOR_TOOLS
848
+ + [
849
+ "todo",
850
+ "rules",
851
+ "watch",
852
+ "jupyter",
853
+ "neovim_edit",
854
+ "mcp",
855
+ "consensus",
856
+ ]
857
+ )
858
+ ),
859
+ environment={"ALL_TOOLS": "enabled"},
832
860
  ),
833
861
  ToolPersonality(
834
862
  name="minimal",
@@ -836,15 +864,18 @@ personalities = [
836
864
  description="Just the essentials",
837
865
  philosophy="Less is more.",
838
866
  tools=ESSENTIAL_TOOLS,
839
- environment={"MINIMAL_MODE": "true"}
867
+ environment={"MINIMAL_MODE": "true"},
840
868
  ),
841
869
  ToolPersonality(
842
870
  name="data_scientist",
843
871
  programmer="Data Scientist",
844
872
  description="Analyze all the things",
845
873
  philosophy="In God we trust. All others must bring data.",
846
- tools=ESSENTIAL_TOOLS + ["jupyter", "sql_query", "stats"] + VECTOR_TOOLS + AI_TOOLS,
847
- environment={"JUPYTER_THEME": "dark"}
874
+ tools=ESSENTIAL_TOOLS
875
+ + ["jupyter", "sql_query", "stats"]
876
+ + VECTOR_TOOLS
877
+ + AI_TOOLS,
878
+ environment={"JUPYTER_THEME": "dark"},
848
879
  ),
849
880
  ToolPersonality(
850
881
  name="devops",
@@ -852,7 +883,7 @@ personalities = [
852
883
  description="Automate everything",
853
884
  philosophy="You build it, you run it.",
854
885
  tools=ESSENTIAL_TOOLS + BUILD_TOOLS + ["process", "watch", "todo"] + UNIX_TOOLS,
855
- environment={"CI_CD": "enabled"}
886
+ environment={"CI_CD": "enabled"},
856
887
  ),
857
888
  ToolPersonality(
858
889
  name="security",
@@ -860,7 +891,7 @@ personalities = [
860
891
  description="Break it to secure it",
861
892
  philosophy="The only secure system is one that's powered off.",
862
893
  tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"] + UNIX_TOOLS,
863
- environment={"SECURITY_MODE": "paranoid"}
894
+ environment={"SECURITY_MODE": "paranoid"},
864
895
  ),
865
896
  ToolPersonality(
866
897
  name="academic",
@@ -868,15 +899,18 @@ personalities = [
868
899
  description="Publish or perish",
869
900
  philosophy="Standing on the shoulders of giants.",
870
901
  tools=ESSENTIAL_TOOLS + ["jupyter", "todo", "critic"] + AI_TOOLS + SEARCH_TOOLS,
871
- environment={"LATEX_ENGINE": "xelatex"}
902
+ environment={"LATEX_ENGINE": "xelatex"},
872
903
  ),
873
904
  ToolPersonality(
874
905
  name="startup",
875
906
  programmer="Startup Founder",
876
907
  description="Move fast and fix things",
877
908
  philosophy="Done is better than perfect.",
878
- tools=ESSENTIAL_TOOLS + ["todo", "agent", "consensus"] + BUILD_TOOLS + DATABASE_TOOLS,
879
- environment={"STARTUP_MODE": "hustle"}
909
+ tools=ESSENTIAL_TOOLS
910
+ + ["todo", "agent", "consensus"]
911
+ + BUILD_TOOLS
912
+ + DATABASE_TOOLS,
913
+ environment={"STARTUP_MODE": "hustle"},
880
914
  ),
881
915
  ToolPersonality(
882
916
  name="enterprise",
@@ -884,7 +918,7 @@ personalities = [
884
918
  description="Process and compliance",
885
919
  philosophy="Nobody ever got fired for buying IBM.",
886
920
  tools=ESSENTIAL_TOOLS + ["todo", "critic", "rules", "stats"] + DATABASE_TOOLS,
887
- environment={"COMPLIANCE": "SOC2"}
921
+ environment={"COMPLIANCE": "SOC2"},
888
922
  ),
889
923
  ToolPersonality(
890
924
  name="creative",
@@ -892,19 +926,32 @@ personalities = [
892
926
  description="Code as art",
893
927
  philosophy="Programming is the art of the possible.",
894
928
  tools=ESSENTIAL_TOOLS + ["watch", "jupyter", "todo"] + AI_TOOLS,
895
- environment={"P5_MODE": "global"}
929
+ environment={"P5_MODE": "global"},
896
930
  ),
897
931
  ToolPersonality(
898
932
  name="hanzo",
899
933
  programmer="Hanzo AI Default",
900
934
  description="Balanced productivity and quality",
901
935
  philosophy="The Zen of Model Context Protocol.",
902
- tools=ESSENTIAL_TOOLS + ["agent", "consensus", "critic", "todo", "rules", "symbols",
903
- "search", "git_search", "watch", "jupyter"] + BUILD_TOOLS,
904
- environment={"HANZO_MODE": "zen"}
905
- )
936
+ tools=ESSENTIAL_TOOLS
937
+ + [
938
+ "agent",
939
+ "consensus",
940
+ "critic",
941
+ "todo",
942
+ "rules",
943
+ "symbols",
944
+ "search",
945
+ "git_search",
946
+ "watch",
947
+ "jupyter",
948
+ ]
949
+ + BUILD_TOOLS,
950
+ environment={"HANZO_MODE": "zen"},
951
+ ),
906
952
  ]
907
953
 
954
+
908
955
  # Register all personalities
909
956
  def register_default_personalities():
910
957
  """Register all default tool personalities."""
@@ -916,21 +963,22 @@ def register_default_personalities():
916
963
  def ensure_agent_enabled(personality: ToolPersonality) -> ToolPersonality:
917
964
  """Ensure agent tool is enabled if API keys are present."""
918
965
  api_keys_present = any(
919
- os.environ.get(key) for key in [
966
+ os.environ.get(key)
967
+ for key in [
920
968
  "OPENAI_API_KEY",
921
- "ANTHROPIC_API_KEY",
969
+ "ANTHROPIC_API_KEY",
922
970
  "GOOGLE_API_KEY",
923
971
  "HANZO_API_KEY",
924
972
  "GROQ_API_KEY",
925
973
  "TOGETHER_API_KEY",
926
974
  "MISTRAL_API_KEY",
927
- "PERPLEXITY_API_KEY"
975
+ "PERPLEXITY_API_KEY",
928
976
  ]
929
977
  )
930
-
978
+
931
979
  if api_keys_present and "agent" not in personality.tools:
932
980
  personality.tools.append("agent")
933
981
  if "consensus" not in personality.tools:
934
982
  personality.tools.append("consensus")
935
-
983
+
936
984
  return personality