hanzo-mcp 0.9.0__py3-none-any.whl → 0.9.2__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 (135) hide show
  1. hanzo_mcp/__init__.py +1 -1
  2. hanzo_mcp/analytics/posthog_analytics.py +14 -1
  3. hanzo_mcp/cli.py +108 -4
  4. hanzo_mcp/server.py +11 -0
  5. hanzo_mcp/tools/__init__.py +3 -16
  6. hanzo_mcp/tools/agent/__init__.py +5 -0
  7. hanzo_mcp/tools/agent/agent.py +5 -0
  8. hanzo_mcp/tools/agent/agent_tool.py +3 -17
  9. hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +623 -0
  10. hanzo_mcp/tools/agent/clarification_tool.py +7 -1
  11. hanzo_mcp/tools/agent/claude_desktop_auth.py +16 -6
  12. hanzo_mcp/tools/agent/cli_agent_base.py +5 -0
  13. hanzo_mcp/tools/agent/cli_tools.py +26 -0
  14. hanzo_mcp/tools/agent/code_auth_tool.py +5 -0
  15. hanzo_mcp/tools/agent/critic_tool.py +7 -1
  16. hanzo_mcp/tools/agent/iching_tool.py +5 -0
  17. hanzo_mcp/tools/agent/network_tool.py +5 -0
  18. hanzo_mcp/tools/agent/review_tool.py +7 -1
  19. hanzo_mcp/tools/agent/swarm_alias.py +5 -0
  20. hanzo_mcp/tools/agent/swarm_tool.py +701 -0
  21. hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +554 -0
  22. hanzo_mcp/tools/agent/unified_cli_tools.py +5 -0
  23. hanzo_mcp/tools/common/auto_timeout.py +254 -0
  24. hanzo_mcp/tools/common/base.py +4 -0
  25. hanzo_mcp/tools/common/batch_tool.py +5 -0
  26. hanzo_mcp/tools/common/config_tool.py +5 -0
  27. hanzo_mcp/tools/common/critic_tool.py +5 -0
  28. hanzo_mcp/tools/common/paginated_base.py +4 -0
  29. hanzo_mcp/tools/common/permissions.py +38 -12
  30. hanzo_mcp/tools/common/personality.py +673 -980
  31. hanzo_mcp/tools/common/stats.py +5 -0
  32. hanzo_mcp/tools/common/thinking_tool.py +5 -0
  33. hanzo_mcp/tools/common/timeout_parser.py +103 -0
  34. hanzo_mcp/tools/common/tool_disable.py +5 -0
  35. hanzo_mcp/tools/common/tool_enable.py +5 -0
  36. hanzo_mcp/tools/common/tool_list.py +5 -0
  37. hanzo_mcp/tools/config/config_tool.py +5 -0
  38. hanzo_mcp/tools/config/mode_tool.py +5 -0
  39. hanzo_mcp/tools/database/graph.py +5 -0
  40. hanzo_mcp/tools/database/graph_add.py +5 -0
  41. hanzo_mcp/tools/database/graph_query.py +5 -0
  42. hanzo_mcp/tools/database/graph_remove.py +5 -0
  43. hanzo_mcp/tools/database/graph_search.py +5 -0
  44. hanzo_mcp/tools/database/graph_stats.py +5 -0
  45. hanzo_mcp/tools/database/sql.py +5 -0
  46. hanzo_mcp/tools/database/sql_query.py +2 -0
  47. hanzo_mcp/tools/database/sql_search.py +5 -0
  48. hanzo_mcp/tools/database/sql_stats.py +5 -0
  49. hanzo_mcp/tools/editor/neovim_command.py +5 -0
  50. hanzo_mcp/tools/editor/neovim_edit.py +7 -2
  51. hanzo_mcp/tools/editor/neovim_session.py +5 -0
  52. hanzo_mcp/tools/filesystem/__init__.py +23 -26
  53. hanzo_mcp/tools/filesystem/ast_tool.py +3 -4
  54. hanzo_mcp/tools/filesystem/base.py +2 -18
  55. hanzo_mcp/tools/filesystem/batch_search.py +825 -0
  56. hanzo_mcp/tools/filesystem/content_replace.py +5 -3
  57. hanzo_mcp/tools/filesystem/diff.py +5 -0
  58. hanzo_mcp/tools/filesystem/directory_tree.py +34 -281
  59. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +345 -0
  60. hanzo_mcp/tools/filesystem/edit.py +6 -5
  61. hanzo_mcp/tools/filesystem/find.py +177 -311
  62. hanzo_mcp/tools/filesystem/find_files.py +370 -0
  63. hanzo_mcp/tools/filesystem/git_search.py +5 -3
  64. hanzo_mcp/tools/filesystem/grep.py +454 -0
  65. hanzo_mcp/tools/filesystem/multi_edit.py +6 -5
  66. hanzo_mcp/tools/filesystem/read.py +10 -9
  67. hanzo_mcp/tools/filesystem/rules_tool.py +6 -4
  68. hanzo_mcp/tools/filesystem/search_tool.py +728 -0
  69. hanzo_mcp/tools/filesystem/symbols_tool.py +510 -0
  70. hanzo_mcp/tools/filesystem/tree.py +273 -0
  71. hanzo_mcp/tools/filesystem/watch.py +6 -1
  72. hanzo_mcp/tools/filesystem/write.py +13 -7
  73. hanzo_mcp/tools/jupyter/jupyter.py +30 -2
  74. hanzo_mcp/tools/jupyter/notebook_edit.py +298 -0
  75. hanzo_mcp/tools/jupyter/notebook_read.py +148 -0
  76. hanzo_mcp/tools/llm/consensus_tool.py +8 -6
  77. hanzo_mcp/tools/llm/llm_manage.py +5 -0
  78. hanzo_mcp/tools/llm/llm_tool.py +2 -0
  79. hanzo_mcp/tools/llm/llm_unified.py +5 -0
  80. hanzo_mcp/tools/llm/provider_tools.py +5 -0
  81. hanzo_mcp/tools/lsp/lsp_tool.py +475 -622
  82. hanzo_mcp/tools/mcp/mcp_add.py +7 -2
  83. hanzo_mcp/tools/mcp/mcp_remove.py +15 -2
  84. hanzo_mcp/tools/mcp/mcp_stats.py +5 -0
  85. hanzo_mcp/tools/mcp/mcp_tool.py +5 -0
  86. hanzo_mcp/tools/memory/knowledge_tools.py +14 -0
  87. hanzo_mcp/tools/memory/memory_tools.py +17 -0
  88. hanzo_mcp/tools/search/find_tool.py +5 -3
  89. hanzo_mcp/tools/search/unified_search.py +3 -1
  90. hanzo_mcp/tools/shell/__init__.py +2 -14
  91. hanzo_mcp/tools/shell/base_process.py +4 -2
  92. hanzo_mcp/tools/shell/bash_tool.py +2 -0
  93. hanzo_mcp/tools/shell/command_executor.py +7 -7
  94. hanzo_mcp/tools/shell/logs.py +5 -0
  95. hanzo_mcp/tools/shell/npx.py +5 -0
  96. hanzo_mcp/tools/shell/npx_background.py +5 -0
  97. hanzo_mcp/tools/shell/npx_tool.py +5 -0
  98. hanzo_mcp/tools/shell/open.py +5 -0
  99. hanzo_mcp/tools/shell/pkill.py +5 -0
  100. hanzo_mcp/tools/shell/process_tool.py +5 -0
  101. hanzo_mcp/tools/shell/processes.py +5 -0
  102. hanzo_mcp/tools/shell/run_background.py +5 -0
  103. hanzo_mcp/tools/shell/run_command.py +2 -0
  104. hanzo_mcp/tools/shell/run_command_windows.py +5 -0
  105. hanzo_mcp/tools/shell/streaming_command.py +5 -0
  106. hanzo_mcp/tools/shell/uvx.py +5 -0
  107. hanzo_mcp/tools/shell/uvx_background.py +5 -0
  108. hanzo_mcp/tools/shell/uvx_tool.py +5 -0
  109. hanzo_mcp/tools/shell/zsh_tool.py +3 -0
  110. hanzo_mcp/tools/todo/todo.py +5 -0
  111. hanzo_mcp/tools/todo/todo_read.py +142 -0
  112. hanzo_mcp/tools/todo/todo_write.py +367 -0
  113. hanzo_mcp/tools/vector/__init__.py +42 -95
  114. hanzo_mcp/tools/vector/index_tool.py +5 -0
  115. hanzo_mcp/tools/vector/vector.py +5 -0
  116. hanzo_mcp/tools/vector/vector_index.py +5 -0
  117. hanzo_mcp/tools/vector/vector_search.py +5 -0
  118. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.2.dist-info}/METADATA +1 -1
  119. hanzo_mcp-0.9.2.dist-info/RECORD +195 -0
  120. hanzo_mcp/tools/common/path_utils.py +0 -34
  121. hanzo_mcp/tools/compiler/__init__.py +0 -8
  122. hanzo_mcp/tools/compiler/sandboxed_compiler.py +0 -681
  123. hanzo_mcp/tools/environment/__init__.py +0 -8
  124. hanzo_mcp/tools/environment/environment_detector.py +0 -594
  125. hanzo_mcp/tools/filesystem/search.py +0 -1160
  126. hanzo_mcp/tools/framework/__init__.py +0 -8
  127. hanzo_mcp/tools/framework/framework_modes.py +0 -714
  128. hanzo_mcp/tools/memory/conversation_memory.py +0 -636
  129. hanzo_mcp/tools/shell/run_tool.py +0 -56
  130. hanzo_mcp/tools/vector/node_tool.py +0 -538
  131. hanzo_mcp/tools/vector/unified_vector.py +0 -384
  132. hanzo_mcp-0.9.0.dist-info/RECORD +0 -191
  133. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.2.dist-info}/WHEEL +0 -0
  134. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.2.dist-info}/entry_points.txt +0 -0
  135. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.2.dist-info}/top_level.txt +0 -0
@@ -1,70 +1,50 @@
1
- """Complete enhanced tool personality system with 112+ personalities."""
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, Any
5
- from dataclasses import dataclass, field
4
+ from typing import Set, Dict, List, Optional
5
+ from dataclasses import dataclass
6
+
7
+
8
+ @dataclass
9
+ class ToolPersonality:
10
+ """Represents a programmer personality with tool preferences."""
11
+
12
+ name: str
13
+ programmer: str
14
+ description: str
15
+ tools: List[str]
16
+ environment: Optional[Dict[str, str]] = None
17
+ philosophy: Optional[str] = None
18
+
19
+ def __post_init__(self):
20
+ """Validate personality configuration."""
21
+ if not self.name:
22
+ raise ValueError("Personality name is required")
23
+ if not self.tools:
24
+ raise ValueError("Personality must include at least one tool")
6
25
 
7
26
 
8
27
  class PersonalityRegistry:
9
- """Registry for tool personalities with validation and export capabilities."""
28
+ """Registry for tool personalities."""
10
29
 
11
- _personalities: Dict[str, 'ToolPersonality'] = {}
30
+ _personalities: Dict[str, ToolPersonality] = {}
12
31
  _active_personality: Optional[str] = None
13
32
 
14
33
  @classmethod
15
- def register(cls, personality: 'ToolPersonality') -> None:
16
- """Register a tool personality with validation."""
17
- # Ensure agent enabled if API keys present
18
- personality = ensure_agent_enabled(personality)
19
- # Normalize tools (dedupe and sort)
20
- personality.tools = sorted(set(personality.tools))
34
+ def register(cls, personality: ToolPersonality) -> None:
35
+ """Register a tool personality."""
21
36
  cls._personalities[personality.name] = personality
22
37
 
23
38
  @classmethod
24
- def add_personality(cls, personality: 'ToolPersonality') -> None:
25
- """Add a custom personality with validation."""
26
- if personality.name in cls._personalities:
27
- raise ValueError(f"Personality '{personality.name}' already exists")
28
- cls.register(personality)
29
-
30
- @classmethod
31
- def get(cls, name: str) -> Optional['ToolPersonality']:
39
+ def get(cls, name: str) -> Optional[ToolPersonality]:
32
40
  """Get a personality by name."""
33
41
  return cls._personalities.get(name)
34
42
 
35
43
  @classmethod
36
- def list(cls) -> List['ToolPersonality']:
44
+ def list(cls) -> List[ToolPersonality]:
37
45
  """List all registered personalities."""
38
46
  return list(cls._personalities.values())
39
47
 
40
- @classmethod
41
- def export(cls, include_tools: bool = False) -> List[Dict[str, Any]]:
42
- """Export personalities with metadata for UI/CLI."""
43
- result = []
44
- for p in cls._personalities.values():
45
- export = {
46
- "name": p.name,
47
- "programmer": p.programmer,
48
- "description": p.description,
49
- "tool_count": len(p.tools),
50
- "tags": p.tags if hasattr(p, 'tags') else [],
51
- "philosophy": p.philosophy if hasattr(p, 'philosophy') else None,
52
- }
53
- if include_tools:
54
- export["tools"] = p.tools
55
- if hasattr(p, 'metadata') and p.metadata:
56
- export["metadata"] = p.metadata
57
- result.append(export)
58
- return result
59
-
60
- @classmethod
61
- def filter_by_tags(cls, tags: List[str]) -> List['ToolPersonality']:
62
- """Filter personalities by tags."""
63
- return [
64
- p for p in cls._personalities.values()
65
- if hasattr(p, 'tags') and any(tag in p.tags for tag in tags)
66
- ]
67
-
68
48
  @classmethod
69
49
  def set_active(cls, name: str) -> None:
70
50
  """Set the active personality."""
@@ -72,14 +52,8 @@ class PersonalityRegistry:
72
52
  raise ValueError(f"Personality '{name}' not found")
73
53
  cls._active_personality = name
74
54
 
75
- # Apply environment variables from the mode
76
- personality = cls._personalities[name]
77
- if personality.environment:
78
- for key, value in personality.environment.items():
79
- os.environ[key] = value
80
-
81
55
  @classmethod
82
- def get_active(cls) -> Optional['ToolPersonality']:
56
+ def get_active(cls) -> Optional[ToolPersonality]:
83
57
  """Get the active personality."""
84
58
  if cls._active_personality:
85
59
  return cls._personalities.get(cls._active_personality)
@@ -94,1173 +68,892 @@ class PersonalityRegistry:
94
68
  return set()
95
69
 
96
70
 
97
- def ensure_agent_enabled(personality: 'ToolPersonality') -> 'ToolPersonality':
98
- """Enable agent tool if API keys are present."""
99
- # Check for any API key environment variables
100
- api_keys = [
101
- "OPENAI_API_KEY",
102
- "ANTHROPIC_API_KEY",
103
- "TOGETHER_API_KEY",
104
- "HANZO_API_KEY",
105
- ]
106
-
107
- if any(os.environ.get(key) for key in api_keys):
108
- if "agent" not in personality.tools:
109
- personality.tools = personality.tools + ["agent"]
110
-
111
- return personality
112
-
113
-
114
- def validate_tools(tools: List[str]) -> List[str]:
115
- """Validate and normalize tool names."""
116
- valid_tools = []
117
- for tool in tools:
118
- if tool in ALL_TOOL_NAMES:
119
- valid_tools.append(tool)
120
- else:
121
- # Silently skip unknown tools for now
122
- pass
123
- return sorted(set(valid_tools))
124
-
125
-
126
- def register_default_personalities():
127
- """Register all default tool personalities with validation and deduplication."""
128
- for personality in personalities:
129
- # Ensure agent enabled if API keys present
130
- personality = ensure_agent_enabled(personality)
131
- # Validate and normalize tools (commented out to avoid issues with unknown tools)
132
- # personality.tools = validate_tools(personality.tools)
133
- personality.tools = sorted(set(personality.tools))
134
- PersonalityRegistry.register(personality)
135
-
136
-
137
- def get_personality_from_env() -> Optional[str]:
138
- """Get personality name from environment variables."""
139
- return os.environ.get("HANZO_MODE") or os.environ.get("PERSONALITY") or os.environ.get("MODE")
140
-
141
-
142
- def activate_personality_from_env():
143
- """Activate personality from environment if set."""
144
- personality_name = get_personality_from_env()
145
- if personality_name:
146
- try:
147
- PersonalityRegistry.set_active(personality_name)
148
- print(f"Activated personality: {personality_name}")
149
- except ValueError as e:
150
- print(f"Failed to activate personality: {e}")
151
-
152
-
153
- @dataclass
154
- class ToolPersonality:
155
- """Represents a programmer personality with tool preferences."""
156
-
157
- name: str
158
- programmer: str
159
- description: str
160
- tools: List[str]
161
- environment: Optional[Dict[str, str]] = None
162
- philosophy: Optional[str] = None
163
- tags: List[str] = field(default_factory=list)
164
- metadata: Dict[str, Any] = field(default_factory=dict)
165
-
166
- def __post_init__(self):
167
- """Validate and normalize personality configuration."""
168
- if not self.name:
169
- raise ValueError("Personality name is required")
170
- if not self.tools:
171
- raise ValueError("Personality must include at least one tool")
172
- # Deduplicate and sort tools
173
- self.tools = sorted(set(self.tools))
174
-
175
-
176
71
  # Essential tools that are always available
177
- ESSENTIAL_TOOLS = ['read', 'write', 'edit', 'tree', 'bash', 'think']
178
-
179
- # Classic tool sets
180
- UNIX_TOOLS = ['grep', 'find_files', 'bash', 'process', 'diff']
181
- BUILD_TOOLS = ['bash', 'npx', 'uvx', 'process', 'cargo', 'gem', 'pip']
182
- VERSION_CONTROL = ['git_search', 'diff', 'gh', 'gitlab']
183
- AI_TOOLS = ['agent', 'consensus', 'critic', 'think', 'llm']
184
- SEARCH_TOOLS = ['search', 'symbols', 'grep', 'git_search', 'ast_search']
185
- DATABASE_TOOLS = ['sql_query', 'sql_search', 'graph_add', 'graph_query']
186
- VECTOR_TOOLS = ['vector_index', 'vector_search', 'embeddings']
187
-
188
- # Modern DevOps & Cloud tools
189
- DEVOPS_TOOLS = ['docker', 'container_build', 'k8s', 'kubectl', 'helm', 'kustomize', 'minikube']
190
- CI_CD_TOOLS = ['ci', 'github_actions', 'gitlab_ci', 'jenkins', 'circleci', 'artifact_publish']
191
- CLOUD_TOOLS = ['terraform', 'ansible', 'cloud_cli', 'aws_s3', 'kms', 'secrets_manager']
192
- OBSERVABILITY_TOOLS = ['prometheus', 'grafana', 'otel', 'logs', 'tracing', 'slo', 'chaos']
193
-
194
- # Security & Quality tools
195
- SECURITY_TOOLS = ['sast', 'dast', 'fuzz', 'dependency_scan', 'secret_scan', 'sigstore', 'sbom', 'snyk', 'trivy']
196
- TESTING_TOOLS = ['pytest', 'jest', 'mocha', 'go_test', 'linters', 'formatter', 'coverage']
197
-
198
- # ML/DataOps tools
199
- ML_TOOLS = ['mlflow', 'dvc', 'kedro', 'mlem', 'model_registry', 'feature_store', 'jupyter', 'notebook']
200
- AI_OPS_TOOLS = ['model_deploy', 'gpu_manager', 'quantize', 'onnx_convert', 'huggingface', 'hf_hub']
201
-
202
- # Developer UX tools
203
- DEV_UX_TOOLS = ['ngrok', 'localstack', 'devcontainer', 'vscode_remote', 'repl', 'watch', 'hot_reload']
204
-
205
- # Utility tools
206
- UTILITY_TOOLS = ['package_manager', 'image_scan', 'signing', 'notebook', 'batch', 'todo', 'rules']
207
-
208
- # All available tools for validation
209
- ALL_TOOL_NAMES = ['agent', 'ansible', 'artifact_publish', 'ast_search', 'aws_s3', 'bash', 'batch', 'cargo', 'chaos', 'ci', 'circleci', 'cloud_cli', 'consensus', 'container_build', 'coverage', 'critic', 'dast', 'dependency_scan', 'devcontainer', 'diff', 'docker', 'dvc', 'edit', 'embeddings', 'feature_store', 'find_files', 'formatter', 'fuzz', 'gem', 'gh', 'git_search', 'github_actions', 'gitlab', 'gitlab_ci', 'go_test', 'gpu_manager', 'grafana', 'graph_add', 'graph_query', 'grep', 'helm', 'hf_hub', 'hot_reload', 'huggingface', 'image_scan', 'jenkins', 'jest', 'jupyter', 'k8s', 'kedro', 'kms', 'kubectl', 'kustomize', 'linters', 'llm', 'localstack', 'logs', 'minikube', 'mlem', 'mlflow', 'mocha', 'model_deploy', 'model_registry', 'ngrok', 'notebook', 'npx', 'onnx_convert', 'otel', 'package_manager', 'pip', 'process', 'prometheus', 'pytest', 'quantize', 'read', 'repl', 'rules', 'sast', 'sbom', 'search', 'secret_scan', 'secrets_manager', 'signing', 'sigstore', 'slo', 'snyk', 'sql_query', 'sql_search', 'symbols', 'terraform', 'think', 'todo', 'tracing', 'tree', 'trivy', 'uvx', 'vector_index', 'vector_search', 'vscode_remote', 'watch', 'write']
210
-
211
- # Complete list of 117 programmer personalities
72
+ ESSENTIAL_TOOLS = ["read", "write", "edit", "tree", "bash", "think"]
73
+
74
+ # Common tool sets for reuse
75
+ UNIX_TOOLS = ["grep", "find_files", "bash", "process", "diff"]
76
+ BUILD_TOOLS = ["bash", "npx", "uvx", "process"]
77
+ VERSION_CONTROL = ["git_search", "diff"]
78
+ AI_TOOLS = ["agent", "consensus", "critic", "think"]
79
+ SEARCH_TOOLS = ["search", "symbols", "grep", "git_search"]
80
+ DATABASE_TOOLS = ["sql_query", "sql_search", "graph_add", "graph_query"]
81
+ VECTOR_TOOLS = ["vector_index", "vector_search"]
82
+
83
+ # 100 Programmer Personalities
212
84
  personalities = [
85
+ # 1-10: Language Creators
213
86
  ToolPersonality(
214
- name="10x",
215
- programmer="10x Engineer",
216
- description="Maximum productivity, all tools enabled",
217
- philosophy="Move fast and optimize everything.",
218
- tools=['agent', 'ansible', 'artifact_publish', 'ast_search', 'aws_s3', 'bash', 'batch', 'cargo', 'chaos', 'ci', 'circleci', 'cloud_cli', 'consensus', 'container_build', 'coverage', 'critic', 'dast', 'dependency_scan', 'devcontainer', 'diff', 'docker', 'dvc', 'edit', 'embeddings', 'feature_store', 'find_files', 'formatter', 'fuzz', 'gem', 'gh', 'git_search', 'github_actions', 'gitlab', 'gitlab_ci', 'go_test', 'gpu_manager', 'grafana', 'graph_add', 'graph_query', 'grep', 'helm', 'hf_hub', 'hot_reload', 'huggingface', 'image_scan', 'jenkins', 'jest', 'jupyter', 'k8s', 'kedro', 'kms', 'kubectl', 'kustomize', 'linters', 'llm', 'localstack', 'logs', 'minikube', 'mlem', 'mlflow', 'mocha', 'model_deploy', 'model_registry', 'ngrok', 'notebook', 'npx', 'onnx_convert', 'otel', 'package_manager', 'pip', 'process', 'prometheus', 'pytest', 'quantize', 'read', 'repl', 'rules', 'sast', 'sbom', 'search', 'secret_scan', 'secrets_manager', 'signing', 'sigstore', 'slo', 'snyk', 'sql_query', 'sql_search', 'symbols', 'terraform', 'think', 'todo', 'tracing', 'tree', 'trivy', 'uvx', 'vector_index', 'vector_search', 'vscode_remote', 'watch', 'write'],
219
- environment={'PRODUCTIVITY': 'MAX', 'TOOLS': 'ALL', 'DOCKER_BUILDKIT': '1', 'CI': 'true'},
220
- tags=['productivity', 'fullstack', 'power-user'],
87
+ name="guido",
88
+ programmer="Guido van Rossum",
89
+ description="Python's BDFL - readability counts",
90
+ philosophy="There should be one-- and preferably only one --obvious way to do it.",
91
+ tools=ESSENTIAL_TOOLS + ["uvx", "jupyter", "multi_edit", "symbols", "rules"] + AI_TOOLS + SEARCH_TOOLS,
92
+ environment={"PYTHONPATH": ".", "PYTEST_ARGS": "-xvs"},
221
93
  ),
222
94
  ToolPersonality(
223
- name="academic",
224
- programmer="Academic Researcher",
225
- description="Publish or perish",
226
- philosophy="Standing on the shoulders of giants.",
227
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'jupyter', 'todo', 'critic', 'agent', 'consensus', 'critic', 'think', 'search', 'symbols', 'grep', 'git_search'],
228
- environment={'LATEX_ENGINE': 'xelatex'},
229
- tags=['general'],
95
+ name="matz",
96
+ programmer="Yukihiro Matsumoto",
97
+ description="Ruby creator - optimize for developer happiness",
98
+ philosophy="Ruby is designed to make programmers happy.",
99
+ tools=ESSENTIAL_TOOLS + ["npx", "symbols", "batch", "todo"] + SEARCH_TOOLS,
100
+ environment={"RUBY_VERSION": "3.0", "BUNDLE_PATH": "vendor/bundle"},
101
+ ),
102
+ ToolPersonality(
103
+ name="brendan",
104
+ programmer="Brendan Eich",
105
+ description="JavaScript creator - dynamic and flexible",
106
+ philosophy="Always bet on JS.",
107
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "todo", "rules"] + BUILD_TOOLS + SEARCH_TOOLS,
108
+ environment={"NODE_ENV": "development", "NPM_CONFIG_LOGLEVEL": "warn"},
230
109
  ),
231
110
  ToolPersonality(
232
- name="ada",
233
- programmer="Ada Lovelace",
234
- description="First programmer - algorithms as poetry",
235
- philosophy="The Analytical Engine has no pretensions to originate anything. It can do whatever we know how to order it to perform.",
236
- tools=['ast_search', 'bash', 'edit', 'formatter', 'git_search', 'grep', 'notebook', 'read', 'search', 'symbols', 'think', 'tree', 'write'],
237
- environment={'ALGORITHM_STYLE': 'poetic'},
238
- tags=['pioneer', 'academic', 'algorithms'],
111
+ name="dennis",
112
+ programmer="Dennis Ritchie",
113
+ description="C creator - close to the metal",
114
+ philosophy="UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.",
115
+ tools=ESSENTIAL_TOOLS + ["symbols", "content_replace"] + UNIX_TOOLS,
116
+ environment={"CC": "gcc", "CFLAGS": "-Wall -O2"},
239
117
  ),
240
118
  ToolPersonality(
241
- name="adrian",
242
- programmer="Adrian Holovaty",
243
- description="Django co-creator - web framework for perfectionists",
244
- philosophy="The web framework for perfectionists with deadlines.",
245
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'uvx', 'sql_query', 'watch', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
246
- environment={'DJANGO_SETTINGS_MODULE': 'settings'},
247
- tags=['pioneer', 'web'],
119
+ name="bjarne",
120
+ programmer="Bjarne Stroustrup",
121
+ description="C++ creator - zero-overhead abstractions",
122
+ philosophy="C++ is designed to allow you to express ideas.",
123
+ tools=ESSENTIAL_TOOLS + ["symbols", "multi_edit", "content_replace"] + UNIX_TOOLS + BUILD_TOOLS,
124
+ environment={"CXX": "g++", "CXXFLAGS": "-std=c++20 -Wall"},
125
+ ),
126
+ ToolPersonality(
127
+ name="james",
128
+ programmer="James Gosling",
129
+ description="Java creator - write once, run anywhere",
130
+ philosophy="Java is C++ without the guns, knives, and clubs.",
131
+ tools=ESSENTIAL_TOOLS + ["symbols", "batch", "todo"] + BUILD_TOOLS,
132
+ environment={"JAVA_HOME": "/usr/lib/jvm/java-11-openjdk"},
248
133
  ),
249
134
  ToolPersonality(
250
135
  name="anders",
251
136
  programmer="Anders Hejlsberg",
252
137
  description="TypeScript/C# creator - type safety matters",
253
138
  philosophy="TypeScript is JavaScript that scales.",
254
- tools=['ast_search', 'bash', 'cargo', 'edit', 'formatter', 'gem', 'git_search', 'grep', 'npx', 'pip', 'process', 'read', 'rules', 'search', 'symbols', 'think', 'tree', 'uvx', 'watch', 'write'],
255
- environment={'TYPESCRIPT_VERSION': '5.0', 'DOTNET_VERSION': '8.0'},
256
- tags=['languages', 'typescript', 'types'],
139
+ tools=ESSENTIAL_TOOLS + ["npx", "symbols", "watch", "rules"] + BUILD_TOOLS + SEARCH_TOOLS,
140
+ environment={"TYPESCRIPT_VERSION": "5.0"},
257
141
  ),
258
142
  ToolPersonality(
259
- name="andrej",
260
- programmer="Andrej Karpathy",
261
- description="AI educator & former Tesla AI director",
262
- philosophy="The unreasonable effectiveness of neural networks.",
263
- tools=['agent', 'ast_search', 'bash', 'consensus', 'critic', 'dvc', 'edit', 'feature_store', 'git_search', 'gpu_manager', 'grep', 'jupyter', 'kedro', 'llm', 'mlem', 'mlflow', 'model_registry', 'notebook', 'read', 'search', 'symbols', 'think', 'tree', 'uvx', 'watch', 'write'],
264
- environment={'CUDA_VISIBLE_DEVICES': '0', 'PYTHONUNBUFFERED': '1'},
265
- tags=['ai', 'ml', 'education'],
143
+ name="larry",
144
+ programmer="Larry Wall",
145
+ description="Perl creator - there's more than one way to do it",
146
+ philosophy="The three chief virtues of a programmer are laziness, impatience, and hubris.",
147
+ tools=ESSENTIAL_TOOLS + ["grep", "content_replace", "batch"] + UNIX_TOOLS,
148
+ environment={"PERL5LIB": "./lib"},
266
149
  ),
267
150
  ToolPersonality(
268
- name="andrew",
269
- programmer="Andrew Ng",
270
- description="AI educator & Coursera co-founder",
271
- philosophy="AI is the new electricity.",
272
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'jupyter', 'todo', 'watch'],
273
- environment={'CUDA_VISIBLE_DEVICES': '0'},
274
- tags=['pioneer', 'ai'],
151
+ name="rasmus",
152
+ programmer="Rasmus Lerdorf",
153
+ description="PHP creator - pragmatic web development",
154
+ philosophy="I'm not a real programmer. I throw together things until it works.",
155
+ tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch"] + DATABASE_TOOLS,
156
+ environment={"PHP_VERSION": "8.0"},
275
157
  ),
276
158
  ToolPersonality(
277
- name="bill",
278
- programmer="Bill Joy",
279
- description="Vi creator & BSD contributor",
280
- philosophy="The best way to predict the future is to invent it.",
281
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'neovim_edit', 'neovim_command', 'grep', 'find_files', 'bash', 'process', 'diff'],
282
- environment={'EDITOR': 'vi'},
283
- tags=['pioneer'],
159
+ name="rich",
160
+ programmer="Rich Hickey",
161
+ description="Clojure creator - simplicity matters",
162
+ philosophy="Programming is not about typing... it's about thinking.",
163
+ tools=ESSENTIAL_TOOLS + ["symbols", "todo", "batch"] + AI_TOOLS,
164
+ environment={"CLOJURE_VERSION": "1.11"},
284
165
  ),
166
+ # 11-20: Systems & Infrastructure
285
167
  ToolPersonality(
286
- name="bjarne",
287
- programmer="Bjarne Stroustrup",
288
- description="C++ creator - zero-overhead abstractions",
289
- philosophy="C++ is designed to allow you to express ideas.",
290
- tools=['bash', 'cargo', 'content_replace', 'diff', 'edit', 'find_files', 'formatter', 'gem', 'grep', 'multi_edit', 'npx', 'pip', 'process', 'read', 'symbols', 'think', 'tree', 'uvx', 'write'],
291
- environment={'CXX': 'g++', 'CXXFLAGS': '-std=c++20 -Wall'},
292
- tags=['languages', 'cpp', 'performance'],
168
+ name="linus",
169
+ programmer="Linus Torvalds",
170
+ description="Linux & Git creator - pragmatic excellence",
171
+ 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"},
293
174
  ),
294
175
  ToolPersonality(
295
- name="bram",
296
- programmer="Bram Moolenaar",
297
- description="Vim creator",
298
- philosophy="The best way to avoid RSI is to not type so much.",
299
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'neovim_edit', 'neovim_command', 'neovim_session'],
300
- environment={'VIM_VERSION': '9.0'},
301
- tags=['pioneer'],
176
+ name="rob",
177
+ programmer="Rob Pike",
178
+ description="Go creator - simplicity and concurrency",
179
+ 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"},
302
182
  ),
303
183
  ToolPersonality(
304
- name="brendan",
305
- programmer="Brendan Eich",
306
- description="JavaScript creator - dynamic and flexible",
307
- philosophy="Always bet on JS.",
308
- tools=['ast_search', 'bash', 'cargo', 'devcontainer', 'edit', 'formatter', 'gem', 'git_search', 'grep', 'hot_reload', 'jest', 'localstack', 'ngrok', 'npx', 'pip', 'process', 'read', 'repl', 'rules', 'search', 'symbols', 'think', 'todo', 'tree', 'uvx', 'vscode_remote', 'watch', 'write'],
309
- environment={'NODE_ENV': 'development', 'NPM_CONFIG_LOGLEVEL': 'warn'},
310
- tags=['languages', 'javascript', 'web'],
184
+ name="ken",
185
+ programmer="Ken Thompson",
186
+ description="Unix creator - elegant minimalism",
187
+ philosophy="When in doubt, use brute force.",
188
+ tools=ESSENTIAL_TOOLS + UNIX_TOOLS,
189
+ environment={"PATH": "/usr/local/bin:$PATH"},
190
+ ),
191
+ ToolPersonality(
192
+ name="bill",
193
+ programmer="Bill Joy",
194
+ description="Vi creator & BSD contributor",
195
+ philosophy="The best way to predict the future is to invent it.",
196
+ tools=ESSENTIAL_TOOLS + ["neovim_edit", "neovim_command"] + UNIX_TOOLS,
197
+ environment={"EDITOR": "vi"},
198
+ ),
199
+ ToolPersonality(
200
+ name="richard",
201
+ programmer="Richard Stallman",
202
+ description="GNU creator - software freedom",
203
+ philosophy="Free software is a matter of liberty, not price.",
204
+ tools=ESSENTIAL_TOOLS + ["content_replace", "batch"] + UNIX_TOOLS,
205
+ environment={"EDITOR": "emacs"},
311
206
  ),
312
207
  ToolPersonality(
313
208
  name="brian",
314
209
  programmer="Brian Kernighan",
315
210
  description="AWK co-creator & Unix pioneer",
316
211
  philosophy="Controlling complexity is the essence of computer programming.",
317
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'grep', 'content_replace', 'grep', 'find_files', 'bash', 'process', 'diff'],
318
- environment={'AWK': 'gawk'},
319
- tags=['pioneer'],
212
+ tools=ESSENTIAL_TOOLS + ["grep", "content_replace"] + UNIX_TOOLS,
213
+ environment={"AWK": "gawk"},
320
214
  ),
321
215
  ToolPersonality(
322
- name="bruce",
323
- programmer="Bruce Schneier",
324
- description="Security expert & cryptographer",
325
- philosophy="Security is a process, not a product.",
326
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'git_search', 'grep', 'find_files', 'bash', 'process', 'diff'],
327
- environment={'SECURITY_AUDIT': 'true'},
328
- tags=['security'],
329
- ),
330
- ToolPersonality(
331
- name="carmack",
332
- programmer="John Carmack",
333
- description="id Software - Doom & Quake creator",
334
- philosophy="Focus is a matter of deciding what things you're not going to do.",
335
- tools=['bash', 'cargo', 'diff', 'edit', 'find_files', 'gem', 'gpu_manager', 'grep', 'multi_edit', 'npx', 'pip', 'process', 'read', 'symbols', 'think', 'tree', 'uvx', 'watch', 'write'],
336
- environment={'GL_VERSION': '4.6', 'VULKAN_SDK': '/usr/local/vulkan'},
337
- tags=['gaming', 'graphics', 'performance'],
216
+ name="donald",
217
+ programmer="Donald Knuth",
218
+ description="TeX creator - literate programming",
219
+ philosophy="Premature optimization is the root of all evil.",
220
+ tools=ESSENTIAL_TOOLS + ["symbols", "todo", "critic"],
221
+ environment={"TEXMFHOME": "~/texmf"},
338
222
  ),
339
223
  ToolPersonality(
340
- name="casey",
341
- programmer="Casey Muratori",
342
- description="Handmade Hero creator",
343
- philosophy="Performance matters. Write code from scratch.",
344
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'watch', 'process', 'critic'],
345
- environment={'HANDMADE': 'true'},
346
- tags=['pioneer'],
224
+ name="graydon",
225
+ programmer="Graydon Hoare",
226
+ description="Rust creator - memory safety without GC",
227
+ 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"},
347
230
  ),
348
231
  ToolPersonality(
349
- name="chris",
350
- programmer="Chris Olah",
351
- description="AI interpretability researcher",
352
- philosophy="Understanding neural networks matters.",
353
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'vector_index', 'vector_search', 'jupyter', 'critic'],
354
- environment={'DISTILL_MODE': 'interactive'},
355
- tags=['ai'],
232
+ name="ryan",
233
+ programmer="Ryan Dahl",
234
+ description="Node.js & Deno creator",
235
+ philosophy="I/O needs to be done differently.",
236
+ tools=ESSENTIAL_TOOLS + ["npx", "uvx", "watch", "process"] + BUILD_TOOLS,
237
+ environment={"DENO_DIR": "~/.deno"},
356
238
  ),
357
239
  ToolPersonality(
358
- name="chris_lattner",
359
- programmer="Chris Lattner",
360
- description="LLVM & Swift creator",
361
- philosophy="Compiler infrastructure should be modular.",
362
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'multi_edit', 'critic', 'bash', 'npx', 'uvx', 'process'],
363
- environment={'LLVM_VERSION': '16'},
364
- tags=['pioneer'],
240
+ name="mitchell",
241
+ programmer="Mitchell Hashimoto",
242
+ description="HashiCorp founder - infrastructure as code",
243
+ philosophy="Automate everything.",
244
+ tools=ESSENTIAL_TOOLS + ["bash", "process", "watch", "todo"] + BUILD_TOOLS,
245
+ environment={"TERRAFORM_VERSION": "1.0"},
365
246
  ),
247
+ # 21-30: Web & Frontend
366
248
  ToolPersonality(
367
- name="cloud_native",
368
- programmer="Cloud Native Developer",
369
- description="Kubernetes-first development",
370
- philosophy="Containers everywhere, orchestrate everything.",
371
- tools=['ansible', 'artifact_publish', 'aws_s3', 'bash', 'chaos', 'ci', 'circleci', 'cloud_cli', 'container_build', 'dast', 'dependency_scan', 'diff', 'docker', 'edit', 'fuzz', 'gh', 'git_search', 'github_actions', 'gitlab', 'gitlab_ci', 'grafana', 'helm', 'jenkins', 'k8s', 'kms', 'kubectl', 'kustomize', 'logs', 'minikube', 'otel', 'prometheus', 'read', 'sast', 'sbom', 'secret_scan', 'secrets_manager', 'sigstore', 'slo', 'snyk', 'terraform', 'think', 'tracing', 'tree', 'trivy', 'write'],
372
- environment={'KUBECONFIG': '~/.kube/config', 'DOCKER_REGISTRY': 'ghcr.io', 'CLOUD_PROVIDER': 'aws', 'TERRAFORM_VERSION': '1.5'},
373
- tags=['devops', 'kubernetes', 'cloud'],
249
+ name="tim",
250
+ programmer="Tim Berners-Lee",
251
+ description="WWW inventor - open web",
252
+ philosophy="The Web is for everyone.",
253
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "rules"] + SEARCH_TOOLS,
254
+ environment={"W3C_VALIDATOR": "true"},
374
255
  ),
375
256
  ToolPersonality(
376
- name="creative",
377
- programmer="Creative Coder",
378
- description="Code as art",
379
- philosophy="Programming is the art of the possible.",
380
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'watch', 'jupyter', 'todo', 'agent', 'consensus', 'critic', 'think'],
381
- environment={'P5_MODE': 'global'},
382
- tags=['general'],
257
+ name="douglas",
258
+ programmer="Douglas Crockford",
259
+ description="JSON creator - JavaScript the good parts",
260
+ philosophy="JavaScript has some extraordinarily good parts.",
261
+ tools=ESSENTIAL_TOOLS + ["npx", "symbols", "critic"] + SEARCH_TOOLS,
262
+ environment={"JSLINT": "true"},
383
263
  ),
384
264
  ToolPersonality(
385
- name="dan_kaminsky",
386
- programmer="Dan Kaminsky",
387
- description="DNS security researcher",
388
- philosophy="Break it to make it better.",
389
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'process', 'grep', 'find_files', 'bash', 'process', 'diff'],
390
- environment={'DNSSEC': 'true'},
391
- tags=['security'],
265
+ name="john",
266
+ programmer="John Resig",
267
+ description="jQuery creator - write less, do more",
268
+ philosophy="Do more with less code.",
269
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols"] + SEARCH_TOOLS,
270
+ environment={"JQUERY_VERSION": "3.6"},
392
271
  ),
393
272
  ToolPersonality(
394
- name="daniel_b",
395
- programmer="Daniel J. Bernstein",
396
- description="djb - qmail & Curve25519 creator",
397
- philosophy="Security through simplicity.",
398
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'grep', 'find_files', 'bash', 'process', 'diff'],
399
- environment={'QMAIL_HOME': '/var/qmail'},
400
- tags=['pioneer', 'ai'],
273
+ name="evan",
274
+ programmer="Evan You",
275
+ description="Vue.js creator - progressive framework",
276
+ philosophy="Approachable, versatile, performant.",
277
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "todo"] + BUILD_TOOLS,
278
+ environment={"VUE_VERSION": "3"},
401
279
  ),
402
280
  ToolPersonality(
403
- name="daniel_r",
404
- programmer="Daniel Robbins",
405
- description="Gentoo founder",
406
- philosophy="Your system, your way.",
407
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'bash', 'npx', 'uvx', 'process', 'grep', 'find_files', 'bash', 'process', 'diff'],
408
- environment={'GENTOO_PROFILE': 'default/linux/amd64/17.1'},
409
- tags=['pioneer'],
281
+ name="jordan",
282
+ programmer="Jordan Walke",
283
+ description="React creator - declarative UIs",
284
+ philosophy="Learn once, write anywhere.",
285
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "symbols", "rules"] + BUILD_TOOLS,
286
+ environment={"REACT_VERSION": "18"},
410
287
  ),
411
288
  ToolPersonality(
412
- name="data_scientist",
413
- programmer="Data Scientist",
414
- description="Analyze all the things",
415
- philosophy="In God we trust. All others must bring data.",
416
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'jupyter', 'sql_query', 'stats', 'vector_index', 'vector_search', 'agent', 'consensus', 'critic', 'think'],
417
- environment={'JUPYTER_THEME': 'dark'},
418
- tags=['general'],
289
+ name="jeremy",
290
+ programmer="Jeremy Ashkenas",
291
+ description="CoffeeScript & Backbone creator",
292
+ philosophy="It's just JavaScript.",
293
+ tools=ESSENTIAL_TOOLS + ["npx", "symbols", "watch"],
294
+ environment={"COFFEE_VERSION": "2.0"},
419
295
  ),
420
296
  ToolPersonality(
421
297
  name="david",
422
298
  programmer="David Heinemeier Hansson",
423
299
  description="Rails creator - convention over configuration",
424
300
  philosophy="Optimize for programmer happiness.",
425
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'sql_query', 'watch', 'todo', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
426
- environment={'RAILS_ENV': 'development'},
427
- tags=['pioneer', 'ai'],
428
- ),
429
- ToolPersonality(
430
- name="demis",
431
- programmer="Demis Hassabis",
432
- description="DeepMind co-founder",
433
- philosophy="Solve intelligence, use it to solve everything else.",
434
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'vector_index', 'vector_search', 'agent', 'consensus'],
435
- environment={'JAX_VERSION': '0.4'},
436
- tags=['pioneer'],
301
+ tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch", "todo"] + DATABASE_TOOLS,
302
+ environment={"RAILS_ENV": "development"},
437
303
  ),
438
304
  ToolPersonality(
439
- name="dennis",
440
- programmer="Dennis Ritchie",
441
- description="C creator - close to the metal",
442
- philosophy="UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.",
443
- tools=['bash', 'content_replace', 'diff', 'edit', 'find_files', 'gdb', 'grep', 'process', 'read', 'symbols', 'think', 'tree', 'write'],
444
- environment={'CC': 'gcc', 'CFLAGS': '-Wall -O2'},
445
- tags=['languages', 'c', 'unix'],
305
+ name="taylor",
306
+ programmer="Taylor Otwell",
307
+ description="Laravel creator - PHP artisan",
308
+ philosophy="Love beautiful code? We do too.",
309
+ tools=ESSENTIAL_TOOLS + ["npx", "sql_query", "watch"] + DATABASE_TOOLS,
310
+ environment={"LARAVEL_VERSION": "10"},
446
311
  ),
447
312
  ToolPersonality(
448
- name="devops",
449
- programmer="DevOps Engineer",
450
- description="Automate everything",
451
- philosophy="You build it, you run it.",
452
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'bash', 'npx', 'uvx', 'process', 'process', 'watch', 'todo', 'grep', 'find_files', 'bash', 'process', 'diff'],
453
- environment={'CI_CD': 'enabled'},
454
- tags=['general'],
313
+ name="adrian",
314
+ programmer="Adrian Holovaty",
315
+ description="Django co-creator - web framework for perfectionists",
316
+ philosophy="The web framework for perfectionists with deadlines.",
317
+ tools=ESSENTIAL_TOOLS + ["uvx", "sql_query", "watch"] + DATABASE_TOOLS,
318
+ environment={"DJANGO_SETTINGS_MODULE": "settings"},
455
319
  ),
456
320
  ToolPersonality(
457
- name="dijkstra",
458
- programmer="Edsger W. Dijkstra",
459
- description="Structured programming and correctness",
460
- philosophy="Simplicity is prerequisite for reliability.",
461
- tools=['bash', 'coverage', 'edit', 'formatter', 'go_test', 'jest', 'linters', 'mocha', 'model_check', 'pytest', 'read', 'symbols', 'think', 'tree', 'write'],
462
- environment={'GOTO_ALLOWED': 'false', 'PROOF_REQUIRED': 'true'},
463
- tags=['academic', 'correctness', 'algorithms'],
321
+ name="matt",
322
+ programmer="Matt Mullenweg",
323
+ description="WordPress creator - democratize publishing",
324
+ philosophy="Code is poetry.",
325
+ tools=ESSENTIAL_TOOLS + ["sql_query", "watch", "rules"] + DATABASE_TOOLS,
326
+ environment={"WP_DEBUG": "true"},
464
327
  ),
328
+ # 31-40: Database & Data
465
329
  ToolPersonality(
466
- name="donald",
467
- programmer="Donald Knuth",
468
- description="TeX creator - literate programming",
469
- philosophy="Premature optimization is the root of all evil.",
470
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'todo', 'critic'],
471
- environment={'TEXMFHOME': '~/texmf'},
472
- tags=['pioneer'],
330
+ name="michael_s",
331
+ programmer="Michael Stonebraker",
332
+ description="PostgreSQL creator - ACID matters",
333
+ philosophy="One size does not fit all in databases.",
334
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "todo"],
335
+ environment={"PGDATA": "/var/lib/postgresql/data"},
473
336
  ),
474
337
  ToolPersonality(
475
- name="douglas",
476
- programmer="Douglas Crockford",
477
- description="JSON creator - JavaScript the good parts",
478
- philosophy="JavaScript has some extraordinarily good parts.",
479
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'symbols', 'critic', 'search', 'symbols', 'grep', 'git_search'],
480
- environment={'JSLINT': 'true'},
481
- tags=['pioneer'],
338
+ name="michael_w",
339
+ programmer="Michael Widenius",
340
+ description="MySQL/MariaDB creator",
341
+ philosophy="A small fast database for the web.",
342
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["watch"],
343
+ environment={"MYSQL_HOME": "/usr/local/mysql"},
344
+ ),
345
+ ToolPersonality(
346
+ name="salvatore",
347
+ programmer="Salvatore Sanfilippo",
348
+ description="Redis creator - data structures server",
349
+ philosophy="Simplicity is a great virtue.",
350
+ tools=ESSENTIAL_TOOLS + ["bash", "watch", "process"] + DATABASE_TOOLS,
351
+ environment={"REDIS_VERSION": "7.0"},
482
352
  ),
483
353
  ToolPersonality(
484
354
  name="dwight",
485
355
  programmer="Dwight Merriman",
486
356
  description="MongoDB co-creator - document databases",
487
357
  philosophy="Build the database you want to use.",
488
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'watch', 'todo'],
489
- environment={'MONGO_VERSION': '6.0'},
490
- tags=['pioneer', 'database'],
491
- ),
492
- ToolPersonality(
493
- name="dylan",
494
- programmer="Dylan Field",
495
- description="Figma co-founder",
496
- philosophy="Design tools should be collaborative.",
497
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'watch', 'todo', 'rules'],
498
- environment={'FIGMA_API': 'enabled'},
499
- tags=['pioneer'],
358
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["watch", "todo"],
359
+ environment={"MONGO_VERSION": "6.0"},
500
360
  ),
501
361
  ToolPersonality(
502
362
  name="edgar",
503
363
  programmer="Edgar F. Codd",
504
364
  description="Relational model inventor",
505
365
  philosophy="Data independence is key.",
506
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'critic'],
507
- environment={'SQL_MODE': 'ANSI'},
508
- tags=['pioneer'],
509
- ),
510
- ToolPersonality(
511
- name="enterprise",
512
- programmer="Enterprise Developer",
513
- description="Process and compliance",
514
- philosophy="Nobody ever got fired for buying IBM.",
515
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'critic', 'rules', 'stats', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
516
- environment={'COMPLIANCE': 'SOC2'},
517
- tags=['general'],
366
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["critic"],
367
+ environment={"SQL_MODE": "ANSI"},
518
368
  ),
519
369
  ToolPersonality(
520
- name="evan",
521
- programmer="Evan You",
522
- description="Vue.js creator - progressive framework",
523
- philosophy="Approachable, versatile, performant.",
524
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'watch', 'symbols', 'todo', 'bash', 'npx', 'uvx', 'process'],
525
- environment={'VUE_VERSION': '3'},
526
- tags=['pioneer'],
370
+ name="jim_gray",
371
+ programmer="Jim Gray",
372
+ description="Transaction processing pioneer",
373
+ philosophy="The transaction is the unit of work.",
374
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "critic"],
375
+ environment={"ISOLATION_LEVEL": "SERIALIZABLE"},
527
376
  ),
528
377
  ToolPersonality(
529
- name="fabrice",
530
- programmer="Fabrice Bellard",
531
- description="QEMU & FFmpeg creator",
532
- philosophy="Small, fast, and elegant code.",
533
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'process', 'bash', 'npx', 'uvx', 'process'],
534
- environment={'QEMU_VERSION': '8.0'},
535
- tags=['pioneer'],
378
+ name="jeff_dean",
379
+ programmer="Jeff Dean",
380
+ description="MapReduce & BigTable co-creator",
381
+ philosophy="Design for planet-scale.",
382
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + VECTOR_TOOLS + ["batch"],
383
+ environment={"HADOOP_HOME": "/opt/hadoop"},
536
384
  ),
537
385
  ToolPersonality(
538
- name="frances",
539
- programmer="Frances E. Allen",
540
- description="Compiler optimization and parallelization",
541
- philosophy="Parallel computing is the future.",
542
- tools=['bash', 'chaos', 'compiler', 'edit', 'gpu_manager', 'grafana', 'logs', 'otel', 'prometheus', 'read', 'slo', 'think', 'tracing', 'tree', 'write'],
543
- environment={'OPTIMIZATION_LEVEL': 'O3', 'PARALLELISM': 'auto'},
544
- tags=['compilers', 'optimization', 'parallel'],
386
+ name="sanjay",
387
+ programmer="Sanjay Ghemawat",
388
+ description="MapReduce & BigTable co-creator",
389
+ philosophy="Simple abstractions for complex systems.",
390
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process"],
391
+ environment={"SPARK_HOME": "/opt/spark"},
545
392
  ),
546
393
  ToolPersonality(
547
- name="francois",
548
- programmer="François Chollet",
549
- description="Keras creator",
550
- philosophy="Deep learning for humans.",
551
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'jupyter', 'watch', 'todo'],
552
- environment={'KERAS_BACKEND': 'tensorflow'},
553
- tags=['pioneer'],
394
+ name="mike",
395
+ programmer="Mike Cafarella",
396
+ description="Hadoop co-creator",
397
+ philosophy="Storage is cheap, compute is cheap.",
398
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process"],
399
+ environment={"HADOOP_CONF_DIR": "/etc/hadoop"},
554
400
  ),
555
401
  ToolPersonality(
556
- name="fullstack",
557
- programmer="Full Stack Developer",
558
- description="Every tool for every job",
559
- philosophy="Jack of all trades, master of... well, all trades.",
560
- tools=['grep', 'sql_search', 'git_search', 'tree', 'read', 'critic', 'think', 'graph_query', 'sql_query', 'watch', 'diff', 'bash', 'consensus', 'jupyter', 'vector_index', 'neovim_edit', 'mcp', 'edit', 'rules', 'todo', 'npx', 'find_files', 'vector_search', 'process', 'uvx', 'search', 'write', 'graph_add', 'symbols', 'agent'],
561
- environment={'ALL_TOOLS': 'enabled'},
562
- tags=['general'],
402
+ name="matei",
403
+ programmer="Matei Zaharia",
404
+ description="Apache Spark creator",
405
+ philosophy="In-memory computing changes everything.",
406
+ tools=ESSENTIAL_TOOLS + DATABASE_TOOLS + ["batch", "process", "jupyter"],
407
+ environment={"SPARK_MASTER": "local[*]"},
563
408
  ),
409
+ # 41-50: AI & Machine Learning
564
410
  ToolPersonality(
565
- name="gabe",
566
- programmer="Gabe Newell",
567
- description="Valve founder - Half-Life & Steam",
568
- 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.",
569
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'process', 'watch', 'todo', 'bash', 'npx', 'uvx', 'process'],
570
- environment={'STEAM_RUNTIME': '1'},
571
- tags=['pioneer'],
411
+ name="yann",
412
+ programmer="Yann LeCun",
413
+ description="Deep learning pioneer - ConvNets",
414
+ philosophy="AI is not magic; it's just math and data.",
415
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "watch"],
416
+ environment={"PYTORCH_VERSION": "2.0"},
572
417
  ),
573
418
  ToolPersonality(
574
419
  name="geoffrey",
575
420
  programmer="Geoffrey Hinton",
576
421
  description="Deep learning godfather",
577
422
  philosophy="The brain has to work with what it's got.",
578
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'vector_index', 'vector_search', 'jupyter'],
579
- environment={'TF_VERSION': '2.13'},
580
- tags=['general'],
581
- ),
582
- ToolPersonality(
583
- name="grace",
584
- programmer="Grace Hopper",
585
- description="Compiler pioneer and debugging inventor",
586
- philosophy="The most dangerous phrase in the language is 'We've always done it this way.'",
587
- tools=['artifact_publish', 'bash', 'ci', 'circleci', 'compiler', 'coverage', 'docker', 'edit', 'formatter', 'github_actions', 'gitlab_ci', 'go_test', 'jenkins', 'jest', 'linters', 'mocha', 'pytest', 'read', 'think', 'tree', 'write'],
588
- environment={'COMPILER_TOOL': 'cobol-compat', 'DOCKER_REGISTRY': 'ghcr.io'},
589
- tags=['pioneer', 'compilers', 'pragmatic'],
590
- ),
591
- ToolPersonality(
592
- name="graydon",
593
- programmer="Graydon Hoare",
594
- description="Rust creator - memory safety without GC",
595
- philosophy="Memory safety without garbage collection, concurrency without data races.",
596
- tools=['bash', 'cargo', 'coverage', 'critic', 'edit', 'formatter', 'gem', 'go_test', 'jest', 'linters', 'mocha', 'multi_edit', 'npx', 'pip', 'process', 'pytest', 'read', 'symbols', 'think', 'todo', 'tree', 'uvx', 'write'],
597
- environment={'RUST_BACKTRACE': '1', 'CARGO_HOME': '~/.cargo'},
598
- tags=['languages', 'rust', 'safety'],
599
- ),
600
- ToolPersonality(
601
- name="guido",
602
- programmer="Guido van Rossum",
603
- description="Python's BDFL - readability counts",
604
- philosophy="There should be one-- and preferably only one --obvious way to do it.",
605
- tools=['agent', 'ast_search', 'bash', 'consensus', 'critic', 'dvc', 'edit', 'feature_store', 'formatter', 'git_search', 'grep', 'jupyter', 'kedro', 'llm', 'mlem', 'mlflow', 'model_registry', 'multi_edit', 'notebook', 'pytest', 'read', 'rules', 'search', 'symbols', 'think', 'tree', 'uvx', 'write'],
606
- environment={'PYTHONPATH': '.', 'PYTEST_ARGS': '-xvs', 'BLACK_CONFIG': 'pyproject.toml'},
607
- tags=['languages', 'python', 'readability'],
608
- ),
609
- ToolPersonality(
610
- name="guillermo",
611
- programmer="Guillermo Rauch",
612
- description="Vercel founder & Next.js creator",
613
- philosophy="Make the Web. Faster.",
614
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'watch', 'rules', 'bash', 'npx', 'uvx', 'process'],
615
- environment={'NEXT_VERSION': '14'},
616
- tags=['pioneer'],
617
- ),
618
- ToolPersonality(
619
- name="hanzo",
620
- programmer="Hanzo AI Default",
621
- description="Balanced productivity and quality",
622
- philosophy="AI-powered development at scale.",
623
- tools=['agent', 'artifact_publish', 'ast_search', 'bash', 'cargo', 'ci', 'circleci', 'consensus', 'container_build', 'critic', 'diff', 'docker', 'dvc', 'edit', 'feature_store', 'gem', 'gh', 'git_search', 'github_actions', 'gitlab', 'gitlab_ci', 'grep', 'helm', 'jenkins', 'jupyter', 'k8s', 'kedro', 'kubectl', 'kustomize', 'llm', 'minikube', 'mlem', 'mlflow', 'model_registry', 'multi_edit', 'notebook', 'npx', 'pip', 'process', 'read', 'rules', 'search', 'symbols', 'think', 'todo', 'tree', 'uvx', 'watch', 'write'],
624
- environment={'HANZO_MODE': 'enabled', 'AI_ASSIST': 'true', 'DOCKER_BUILDKIT': '1', 'KUBECONFIG': '~/.kube/config'},
625
- tags=['default', 'balanced', 'ai'],
423
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter"],
424
+ environment={"TF_VERSION": "2.13"},
626
425
  ),
627
426
  ToolPersonality(
628
- name="hideo",
629
- programmer="Hideo Kojima",
630
- description="Metal Gear creator",
631
- philosophy="70% of my body is made of movies.",
632
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'watch', 'critic'],
633
- environment={'KOJIMA_PRODUCTIONS': 'true'},
634
- tags=['pioneer'],
427
+ name="yoshua",
428
+ programmer="Yoshua Bengio",
429
+ description="Deep learning pioneer",
430
+ philosophy="We need to think about AI that helps humanity.",
431
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "batch"],
432
+ environment={"THEANO_FLAGS": "device=cuda"},
635
433
  ),
636
434
  ToolPersonality(
637
- name="hoare",
638
- programmer="Tony Hoare",
639
- description="Algorithms, CSP, and Hoare logic",
640
- philosophy="Premature optimization is the root of all evil.",
641
- tools=['bash', 'coverage', 'edit', 'formatter', 'go_test', 'jest', 'linters', 'mocha', 'model_check', 'pytest', 'read', 'symbols', 'think', 'tree', 'write'],
642
- environment={'PROOF_ASSISTANT': 'coq', 'NULL_REFERENCES': 'banned'},
643
- tags=['algorithms', 'correctness', 'theory'],
435
+ name="andrew",
436
+ programmer="Andrew Ng",
437
+ description="AI educator & Coursera co-founder",
438
+ philosophy="AI is the new electricity.",
439
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "todo", "watch"],
440
+ environment={"CUDA_VISIBLE_DEVICES": "0"},
644
441
  ),
645
442
  ToolPersonality(
646
- name="ian",
647
- programmer="Ian Murdock",
648
- description="Debian founder",
649
- philosophy="Free software, free society.",
650
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'grep', 'find_files', 'bash', 'process', 'diff', 'todo'],
651
- environment={'DEBIAN_FRONTEND': 'noninteractive'},
652
- tags=['pioneer'],
443
+ name="demis",
444
+ programmer="Demis Hassabis",
445
+ description="DeepMind co-founder",
446
+ philosophy="Solve intelligence, use it to solve everything else.",
447
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["agent", "consensus"],
448
+ environment={"JAX_VERSION": "0.4"},
653
449
  ),
654
450
  ToolPersonality(
655
451
  name="ilya",
656
452
  programmer="Ilya Sutskever",
657
- description="OpenAI co-founder - scaling is all you need",
658
- philosophy="AGI is the goal.",
659
- tools=['agent', 'ansible', 'aws_s3', 'bash', 'batch', 'cloud_cli', 'consensus', 'critic', 'dvc', 'edit', 'feature_store', 'gpu_manager', 'hf_hub', 'huggingface', 'jupyter', 'kedro', 'kms', 'llm', 'mlem', 'mlflow', 'model_deploy', 'model_registry', 'notebook', 'onnx_convert', 'quantize', 'read', 'secrets_manager', 'symbols', 'terraform', 'think', 'tree', 'uvx', 'write'],
660
- environment={'OPENAI_API_KEY': '', 'PYTORCH_ENABLE_MPS': '1', 'CUDA_VISIBLE_DEVICES': '0'},
661
- tags=['ai', 'ml', 'research'],
453
+ description="OpenAI co-founder",
454
+ philosophy="Scale is all you need.",
455
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["agent", "consensus", "critic"],
456
+ environment={"OPENAI_API_KEY": "sk-..."},
662
457
  ),
663
458
  ToolPersonality(
664
- name="james",
665
- programmer="James Gosling",
666
- description="Java creator - write once, run anywhere",
667
- philosophy="Java is C++ without the guns, knives, and clubs.",
668
- tools=['bash', 'batch', 'cargo', 'edit', 'gem', 'gradle', 'maven', 'npx', 'pip', 'process', 'read', 'symbols', 'think', 'todo', 'tree', 'uvx', 'write'],
669
- environment={'JAVA_HOME': '/usr/lib/jvm/java-11-openjdk', 'MAVEN_OPTS': '-Xmx1024m'},
670
- tags=['languages', 'java', 'enterprise'],
459
+ name="andrej",
460
+ programmer="Andrej Karpathy",
461
+ description="AI educator & Tesla AI director",
462
+ philosophy="Build it from scratch to understand it.",
463
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "todo"],
464
+ environment={"CUDA_HOME": "/usr/local/cuda"},
671
465
  ),
672
466
  ToolPersonality(
673
- name="jeff_dean",
674
- programmer="Jeff Dean",
675
- description="MapReduce & BigTable co-creator",
676
- philosophy="Design for planet-scale.",
677
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'vector_index', 'vector_search', 'batch'],
678
- environment={'HADOOP_HOME': '/opt/hadoop'},
679
- tags=['pioneer'],
467
+ name="chris",
468
+ programmer="Chris Olah",
469
+ description="AI interpretability researcher",
470
+ philosophy="Understanding neural networks matters.",
471
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + VECTOR_TOOLS + ["jupyter", "critic"],
472
+ environment={"DISTILL_MODE": "interactive"},
680
473
  ),
681
474
  ToolPersonality(
682
- name="jeremy",
683
- programmer="Jeremy Ashkenas",
684
- description="CoffeeScript & Backbone creator",
685
- philosophy="It's just JavaScript.",
686
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'symbols', 'watch'],
687
- environment={'COFFEE_VERSION': '2.0'},
688
- tags=['pioneer'],
475
+ name="francois",
476
+ programmer="François Chollet",
477
+ description="Keras creator",
478
+ philosophy="Deep learning for humans.",
479
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "todo"],
480
+ environment={"KERAS_BACKEND": "tensorflow"},
689
481
  ),
690
482
  ToolPersonality(
691
483
  name="jeremy_howard",
692
484
  programmer="Jeremy Howard",
693
485
  description="fast.ai founder",
694
486
  philosophy="Deep learning should be accessible to all.",
695
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'jupyter', 'watch', 'rules'],
696
- environment={'FASTAI_VERSION': '2.7'},
697
- tags=['pioneer', 'ai'],
487
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch", "rules"],
488
+ environment={"FASTAI_VERSION": "2.7"},
698
489
  ),
490
+ # 51-60: Security & Cryptography
699
491
  ToolPersonality(
700
- name="jim_gray",
701
- programmer="Jim Gray",
702
- description="Transaction processing pioneer",
703
- philosophy="The transaction is the unit of work.",
704
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'batch', 'critic'],
705
- environment={'ISOLATION_LEVEL': 'SERIALIZABLE'},
706
- tags=['general'],
492
+ name="bruce",
493
+ programmer="Bruce Schneier",
494
+ description="Security expert & cryptographer",
495
+ philosophy="Security is a process, not a product.",
496
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"] + UNIX_TOOLS,
497
+ environment={"SECURITY_AUDIT": "true"},
707
498
  ),
708
499
  ToolPersonality(
709
- name="joe",
710
- programmer="Joe Armstrong",
711
- description="Erlang creator",
712
- philosophy="Let it crash.",
713
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'process', 'watch', 'critic'],
714
- environment={'ERL_VERSION': 'OTP-26'},
715
- tags=['pioneer'],
500
+ name="phil",
501
+ programmer="Phil Zimmermann",
502
+ description="PGP creator - privacy matters",
503
+ philosophy="If privacy is outlawed, only outlaws will have privacy.",
504
+ tools=ESSENTIAL_TOOLS + ["critic", "content_replace"] + UNIX_TOOLS,
505
+ environment={"GPG_TTY": "$(tty)"},
716
506
  ),
717
507
  ToolPersonality(
718
- name="john",
719
- programmer="John Resig",
720
- description="jQuery creator - write less, do more",
721
- philosophy="Do more with less code.",
722
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'watch', 'symbols', 'search', 'symbols', 'grep', 'git_search'],
723
- environment={'JQUERY_VERSION': '3.6'},
724
- tags=['pioneer'],
508
+ name="whitfield",
509
+ programmer="Whitfield Diffie",
510
+ description="Public-key cryptography pioneer",
511
+ philosophy="Privacy is necessary for an open society.",
512
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols"],
513
+ environment={"OPENSSL_VERSION": "3.0"},
725
514
  ),
726
515
  ToolPersonality(
727
- name="john_carmack",
728
- programmer="John Carmack",
729
- description="id Software - Doom & Quake creator",
730
- philosophy="Focus is a matter of deciding what things you're not going to do.",
731
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'watch', 'process', 'bash', 'npx', 'uvx', 'process'],
732
- environment={'OPENGL_VERSION': '4.6'},
733
- tags=['pioneer'],
516
+ name="ralph",
517
+ programmer="Ralph Merkle",
518
+ description="Merkle trees inventor",
519
+ philosophy="Cryptography is about mathematical guarantees.",
520
+ tools=ESSENTIAL_TOOLS + ["symbols", "critic", "batch"],
521
+ environment={"HASH_ALGORITHM": "SHA256"},
734
522
  ),
735
523
  ToolPersonality(
736
- name="jonathan",
737
- programmer="Jonathan Blow",
738
- description="Braid & The Witness creator",
739
- philosophy="Optimize for deep, meaningful experiences.",
740
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'critic', 'watch'],
741
- environment={'JAI_COMPILER': 'beta'},
742
- tags=['pioneer', 'ai'],
524
+ name="daniel_b",
525
+ programmer="Daniel J. Bernstein",
526
+ description="djb - qmail & Curve25519 creator",
527
+ philosophy="Security through simplicity.",
528
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols"] + UNIX_TOOLS,
529
+ environment={"QMAIL_HOME": "/var/qmail"},
743
530
  ),
744
531
  ToolPersonality(
745
- name="jordan",
746
- programmer="Jordan Walke",
747
- description="React creator - declarative UIs",
748
- philosophy="Learn once, write anywhere.",
749
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'watch', 'symbols', 'rules', 'bash', 'npx', 'uvx', 'process'],
750
- environment={'REACT_VERSION': '18'},
751
- tags=['pioneer'],
532
+ name="moxie",
533
+ programmer="Moxie Marlinspike",
534
+ description="Signal creator - privacy for everyone",
535
+ philosophy="Making private communication simple.",
536
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "rules"],
537
+ environment={"SIGNAL_PROTOCOL": "true"},
752
538
  ),
753
539
  ToolPersonality(
754
- name="jose",
755
- programmer="José Valim",
756
- description="Elixir creator",
757
- philosophy="Productive. Reliable. Fast.",
758
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'watch', 'process', 'todo'],
759
- environment={'ELIXIR_VERSION': '1.15'},
760
- tags=['pioneer'],
540
+ name="theo",
541
+ programmer="Theo de Raadt",
542
+ description="OpenBSD creator - security by default",
543
+ philosophy="Shut up and hack.",
544
+ tools=ESSENTIAL_TOOLS + ["critic", "diff"] + UNIX_TOOLS,
545
+ environment={"OPENBSD_VERSION": "7.3"},
761
546
  ),
762
547
  ToolPersonality(
763
- name="judd",
764
- programmer="Judd Vinet",
765
- description="Arch Linux creator",
766
- philosophy="Keep it simple.",
767
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'bash', 'npx', 'uvx', 'process', 'grep', 'find_files', 'bash', 'process', 'diff'],
768
- environment={'ARCH_VERSION': 'rolling'},
769
- tags=['pioneer'],
548
+ name="dan_kaminsky",
549
+ programmer="Dan Kaminsky",
550
+ description="DNS security researcher",
551
+ philosophy="Break it to make it better.",
552
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "process"] + UNIX_TOOLS,
553
+ environment={"DNSSEC": "true"},
770
554
  ),
771
555
  ToolPersonality(
772
556
  name="katie",
773
557
  programmer="Katie Moussouris",
774
558
  description="Bug bounty pioneer",
775
559
  philosophy="Hackers are a resource, not a threat.",
776
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'todo'],
777
- environment={'BUG_BOUNTY': 'enabled'},
778
- tags=['general'],
779
- ),
780
- ToolPersonality(
781
- name="ken",
782
- programmer="Ken Thompson",
783
- description="Unix creator - elegant minimalism",
784
- philosophy="When in doubt, use brute force.",
785
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'grep', 'find_files', 'bash', 'process', 'diff'],
786
- environment={'PATH': '/usr/local/bin:$PATH'},
787
- tags=['pioneer'],
560
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "todo"],
561
+ environment={"BUG_BOUNTY": "enabled"},
788
562
  ),
789
563
  ToolPersonality(
790
- name="lamport",
791
- programmer="Leslie Lamport",
792
- description="Distributed systems and TLA+",
793
- philosophy="A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.",
794
- tools=['bash', 'chaos', 'container_build', 'docker', 'edit', 'grafana', 'helm', 'k8s', 'kubectl', 'kubernetes', 'kustomize', 'logs', 'minikube', 'model_check', 'otel', 'prometheus', 'read', 'slo', 'think', 'tla_plus', 'tracing', 'tree', 'write'],
795
- environment={'SPEC_TOOL': 'tla+', 'MODEL_CHECK_TIMEOUT': '300'},
796
- tags=['distributed', 'correctness', 'theory'],
564
+ name="matt_blaze",
565
+ programmer="Matt Blaze",
566
+ description="Cryptographer & security researcher",
567
+ philosophy="Crypto is hard to get right.",
568
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"],
569
+ environment={"CRYPTO_LIBRARY": "nacl"},
797
570
  ),
571
+ # 61-70: Gaming & Graphics
798
572
  ToolPersonality(
799
- name="larry",
800
- programmer="Larry Wall",
801
- description="Perl creator - there's more than one way to do it",
802
- philosophy="The three chief virtues of a programmer are laziness, impatience, and hubris.",
803
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'grep', 'content_replace', 'batch', 'grep', 'find_files', 'bash', 'process', 'diff'],
804
- environment={'PERL5LIB': './lib'},
805
- tags=['pioneer'],
573
+ name="john_carmack",
574
+ programmer="John Carmack",
575
+ description="id Software - Doom & Quake creator",
576
+ philosophy="Focus is a matter of deciding what things you're not going to do.",
577
+ tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process"] + BUILD_TOOLS,
578
+ environment={"OPENGL_VERSION": "4.6"},
806
579
  ),
807
580
  ToolPersonality(
808
- name="lennart",
809
- programmer="Lennart Poettering",
810
- description="systemd creator",
811
- philosophy="Do one thing and do it well... or do everything.",
812
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'process', 'watch', 'grep', 'find_files', 'bash', 'process', 'diff'],
813
- environment={'SYSTEMD_VERSION': '253'},
814
- tags=['pioneer'],
581
+ name="sid",
582
+ programmer="Sid Meier",
583
+ description="Civilization creator",
584
+ philosophy="A game is a series of interesting choices.",
585
+ tools=ESSENTIAL_TOOLS + ["todo", "watch", "process"],
586
+ environment={"GAME_MODE": "debug"},
815
587
  ),
816
588
  ToolPersonality(
817
- name="linus",
818
- programmer="Linus Torvalds",
819
- description="Linux & Git creator - pragmatic excellence",
820
- philosophy="Talk is cheap. Show me the code.",
821
- tools=['bash', 'content_replace', 'critic', 'diff', 'edit', 'find_files', 'gh', 'git_search', 'gitlab', 'grep', 'process', 'read', 'think', 'tree', 'write'],
822
- environment={'KERNEL_VERSION': '6.0', 'GIT_AUTHOR_NAME': 'Linus Torvalds'},
823
- tags=['systems', 'linux', 'git'],
589
+ name="shigeru",
590
+ programmer="Shigeru Miyamoto",
591
+ description="Mario & Zelda creator",
592
+ philosophy="A delayed game is eventually good, but a rushed game is forever bad.",
593
+ tools=ESSENTIAL_TOOLS + ["todo", "watch", "critic"],
594
+ environment={"NINTENDO_SDK": "true"},
824
595
  ),
825
596
  ToolPersonality(
826
- name="liskov",
827
- programmer="Barbara Liskov",
828
- description="Software engineering principles & abstraction",
829
- philosophy="Abstraction is the key to managing complexity.",
830
- tools=['bash', 'coverage', 'edit', 'formatter', 'go_test', 'jest', 'linters', 'mocha', 'pytest', 'read', 'symbols', 'think', 'tree', 'write'],
831
- environment={'SOLID_PRINCIPLES': 'true', 'LISKOV_SUBSTITUTION': 'enforced'},
832
- tags=['engineering', 'principles', 'oop'],
833
- ),
834
- ToolPersonality(
835
- name="margaret",
836
- programmer="Margaret Hamilton",
837
- description="Software engineering for mission-critical systems",
838
- philosophy="There was no choice but to be pioneers.",
839
- tools=['bash', 'coverage', 'dast', 'dependency_scan', 'edit', 'formatter', 'fuzz', 'go_test', 'jest', 'linters', 'mocha', 'model_check', 'pytest', 'read', 'sast', 'sbom', 'secret_scan', 'sigstore', 'snyk', 'think', 'tree', 'trivy', 'write'],
840
- environment={'ERROR_HANDLING': 'exhaustive', 'MISSION_CRITICAL': 'true'},
841
- tags=['engineering', 'reliability', 'space'],
842
- ),
843
- ToolPersonality(
844
- name="mark_shuttleworth",
845
- programmer="Mark Shuttleworth",
846
- description="Ubuntu founder",
847
- philosophy="Linux for human beings.",
848
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'rules', 'bash', 'npx', 'uvx', 'process'],
849
- environment={'UBUNTU_VERSION': '22.04'},
850
- tags=['pioneer'],
597
+ name="gabe",
598
+ programmer="Gabe Newell",
599
+ description="Valve founder - Half-Life & Steam",
600
+ 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.",
601
+ tools=ESSENTIAL_TOOLS + ["process", "watch", "todo"] + BUILD_TOOLS,
602
+ environment={"STEAM_RUNTIME": "1"},
851
603
  ),
852
604
  ToolPersonality(
853
605
  name="markus",
854
606
  programmer="Markus Persson",
855
607
  description="Minecraft creator - Notch",
856
608
  philosophy="Just make games for yourself and try to have fun.",
857
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'watch', 'todo', 'process'],
858
- environment={'LWJGL_VERSION': '3.3'},
859
- tags=['pioneer'],
860
- ),
861
- ToolPersonality(
862
- name="matei",
863
- programmer="Matei Zaharia",
864
- description="Apache Spark creator",
865
- philosophy="In-memory computing changes everything.",
866
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'batch', 'process', 'jupyter'],
867
- environment={'SPARK_MASTER': 'local[*]'},
868
- tags=['pioneer'],
869
- ),
870
- ToolPersonality(
871
- name="matt",
872
- programmer="Matt Mullenweg",
873
- description="WordPress creator - democratize publishing",
874
- philosophy="Code is poetry.",
875
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'watch', 'rules', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
876
- environment={'WP_DEBUG': 'true'},
877
- tags=['pioneer'],
609
+ tools=ESSENTIAL_TOOLS + ["watch", "todo", "process"],
610
+ environment={"LWJGL_VERSION": "3.3"},
878
611
  ),
879
612
  ToolPersonality(
880
- name="matt_blaze",
881
- programmer="Matt Blaze",
882
- description="Cryptographer & security researcher",
883
- philosophy="Crypto is hard to get right.",
884
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'git_search'],
885
- environment={'CRYPTO_LIBRARY': 'nacl'},
886
- tags=['security'],
613
+ name="jonathan",
614
+ programmer="Jonathan Blow",
615
+ description="Braid & The Witness creator",
616
+ philosophy="Optimize for deep, meaningful experiences.",
617
+ tools=ESSENTIAL_TOOLS + ["symbols", "critic", "watch"],
618
+ environment={"JAI_COMPILER": "beta"},
887
619
  ),
888
620
  ToolPersonality(
889
- name="matz",
890
- programmer="Yukihiro Matsumoto",
891
- description="Ruby creator - optimize for developer happiness",
892
- philosophy="Ruby is designed to make programmers happy.",
893
- tools=['artifact_publish', 'ast_search', 'bash', 'batch', 'ci', 'circleci', 'edit', 'gem', 'git_search', 'github_actions', 'gitlab_ci', 'grep', 'jenkins', 'read', 'search', 'symbols', 'think', 'todo', 'tree', 'write'],
894
- environment={'RUBY_VERSION': '3.0', 'BUNDLE_PATH': 'vendor/bundle'},
895
- tags=['languages', 'ruby', 'happiness'],
621
+ name="casey",
622
+ programmer="Casey Muratori",
623
+ description="Handmade Hero creator",
624
+ philosophy="Performance matters. Write code from scratch.",
625
+ tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process", "critic"],
626
+ environment={"HANDMADE": "true"},
896
627
  ),
897
628
  ToolPersonality(
898
- name="mccarthy",
899
- programmer="John McCarthy",
900
- description="AI pioneer and Lisp inventor",
901
- philosophy="He who refuses to do arithmetic is doomed to talk nonsense.",
902
- tools=['agent', 'bash', 'consensus', 'critic', 'edit', 'llm', 'notebook', 'read', 'repl', 'symbols', 'think', 'tree', 'write'],
903
- environment={'LISP_DIALECT': 'common-lisp', 'AI_PARADIGM': 'symbolic'},
904
- tags=['ai', 'languages', 'pioneer'],
629
+ name="tim_sweeney",
630
+ programmer="Tim Sweeney",
631
+ description="Epic Games founder - Unreal Engine",
632
+ philosophy="The engine is the game.",
633
+ tools=ESSENTIAL_TOOLS + ["symbols", "watch", "process"] + BUILD_TOOLS,
634
+ environment={"UNREAL_ENGINE": "5"},
905
635
  ),
906
636
  ToolPersonality(
907
- name="michael_s",
908
- programmer="Michael Stonebraker",
909
- description="PostgreSQL creator - ACID matters",
910
- philosophy="One size does not fit all in databases.",
911
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'batch', 'todo'],
912
- environment={'PGDATA': '/var/lib/postgresql/data'},
913
- tags=['pioneer'],
637
+ name="hideo",
638
+ programmer="Hideo Kojima",
639
+ description="Metal Gear creator",
640
+ philosophy="70% of my body is made of movies.",
641
+ tools=ESSENTIAL_TOOLS + ["todo", "watch", "critic"],
642
+ environment={"KOJIMA_PRODUCTIONS": "true"},
914
643
  ),
915
644
  ToolPersonality(
916
- name="michael_w",
917
- programmer="Michael Widenius",
918
- description="MySQL/MariaDB creator",
919
- philosophy="A small fast database for the web.",
920
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'watch'],
921
- environment={'MYSQL_HOME': '/usr/local/mysql'},
922
- tags=['pioneer'],
645
+ name="will",
646
+ programmer="Will Wright",
647
+ description="SimCity & The Sims creator",
648
+ philosophy="Games are a form of communication.",
649
+ tools=ESSENTIAL_TOOLS + ["todo", "watch", "process"],
650
+ environment={"SIMULATION_MODE": "debug"},
923
651
  ),
652
+ # 71-80: Open Source Leaders
924
653
  ToolPersonality(
925
654
  name="miguel",
926
655
  programmer="Miguel de Icaza",
927
656
  description="GNOME & Mono creator",
928
657
  philosophy="Open source is about standing on the shoulders of giants.",
929
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'todo', 'bash', 'npx', 'uvx', 'process'],
930
- environment={'MONO_VERSION': '6.12'},
931
- tags=['pioneer'],
932
- ),
933
- ToolPersonality(
934
- name="mike",
935
- programmer="Mike Cafarella",
936
- description="Hadoop co-creator",
937
- philosophy="Storage is cheap, compute is cheap.",
938
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'batch', 'process'],
939
- environment={'HADOOP_CONF_DIR': '/etc/hadoop'},
940
- tags=['pioneer'],
941
- ),
942
- ToolPersonality(
943
- name="minimal",
944
- programmer="Minimalist",
945
- description="Just the essentials",
946
- philosophy="Less is more.",
947
- tools=['bash', 'edit', 'read', 'think', 'tree', 'write'],
948
- environment={'MINIMAL_MODE': 'true'},
949
- tags=['minimal', 'focused', 'simple'],
950
- ),
951
- ToolPersonality(
952
- name="mitchell",
953
- programmer="Mitchell Hashimoto",
954
- description="HashiCorp founder - infrastructure as code",
955
- philosophy="Automate everything.",
956
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'bash', 'process', 'watch', 'todo', 'bash', 'npx', 'uvx', 'process'],
957
- environment={'TERRAFORM_VERSION': '1.0'},
958
- tags=['pioneer'],
959
- ),
960
- ToolPersonality(
961
- name="ml_engineer",
962
- programmer="ML Engineer",
963
- description="Production ML systems",
964
- philosophy="From notebook to production pipeline.",
965
- tools=['agent', 'ansible', 'aws_s3', 'bash', 'chaos', 'cloud_cli', 'consensus', 'container_build', 'critic', 'docker', 'dvc', 'edit', 'feature_store', 'gpu_manager', 'grafana', 'helm', 'hf_hub', 'huggingface', 'jupyter', 'k8s', 'kedro', 'kms', 'kubectl', 'kustomize', 'llm', 'logs', 'minikube', 'mlem', 'mlflow', 'model_deploy', 'model_registry', 'notebook', 'onnx_convert', 'otel', 'prometheus', 'quantize', 'read', 'secrets_manager', 'slo', 'terraform', 'think', 'tracing', 'tree', 'write'],
966
- environment={'MLFLOW_TRACKING_URI': 'http://localhost:5000', 'DVC_REMOTE': 's3://ml-artifacts', 'CUDA_VISIBLE_DEVICES': '0,1'},
967
- tags=['ml', 'mlops', 'production'],
968
- ),
969
- ToolPersonality(
970
- name="moxie",
971
- programmer="Moxie Marlinspike",
972
- description="Signal creator - privacy for everyone",
973
- philosophy="Making private communication simple.",
974
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'rules'],
975
- environment={'SIGNAL_PROTOCOL': 'true'},
976
- tags=['pioneer'],
658
+ tools=ESSENTIAL_TOOLS + ["symbols", "todo"] + BUILD_TOOLS,
659
+ environment={"MONO_VERSION": "6.12"},
977
660
  ),
978
661
  ToolPersonality(
979
662
  name="nat",
980
663
  programmer="Nat Friedman",
981
664
  description="GitHub CEO & AI entrepreneur",
982
665
  philosophy="Developers are the builders of the digital world.",
983
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'git_search', 'todo'],
984
- environment={'GITHUB_TOKEN': 'ghp_...'},
985
- tags=['ai'],
986
- ),
987
- ToolPersonality(
988
- name="palmer",
989
- programmer="Palmer Luckey",
990
- description="Oculus founder",
991
- philosophy="VR is the final medium.",
992
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'watch', 'process', 'bash', 'npx', 'uvx', 'process'],
993
- environment={'UNITY_VERSION': '2023.1'},
994
- tags=['pioneer'],
666
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["git_search", "todo"],
667
+ environment={"GITHUB_TOKEN": "ghp_..."},
995
668
  ),
996
669
  ToolPersonality(
997
670
  name="patrick",
998
671
  programmer="Patrick Volkerding",
999
672
  description="Slackware creator",
1000
673
  philosophy="Keep it simple, keep it stable.",
1001
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'grep', 'find_files', 'bash', 'process', 'diff'],
1002
- environment={'SLACKWARE_VERSION': '15.0'},
1003
- tags=['pioneer'],
1004
- ),
1005
- ToolPersonality(
1006
- name="phil",
1007
- programmer="Phil Zimmermann",
1008
- description="PGP creator - privacy matters",
1009
- philosophy="If privacy is outlawed, only outlaws will have privacy.",
1010
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'content_replace', 'grep', 'find_files', 'bash', 'process', 'diff'],
1011
- environment={'GPG_TTY': '$(tty)'},
1012
- tags=['pioneer'],
674
+ tools=ESSENTIAL_TOOLS + UNIX_TOOLS,
675
+ environment={"SLACKWARE_VERSION": "15.0"},
1013
676
  ),
1014
677
  ToolPersonality(
1015
- name="radia",
1016
- programmer="Radia Perlman",
1017
- description="Network protocols and spanning tree",
1018
- philosophy="The beautiful thing about standards is that there are so many to choose from.",
1019
- tools=['ansible', 'aws_s3', 'bash', 'cloud_cli', 'container_build', 'docker', 'edit', 'helm', 'k8s', 'kms', 'kubectl', 'kustomize', 'minikube', 'read', 'secrets_manager', 'terraform', 'think', 'tree', 'write'],
1020
- environment={'NETWORK_PROTOCOL': 'stp', 'ROUTING_ALGORITHM': 'is-is'},
1021
- tags=['networking', 'protocols', 'infrastructure'],
1022
- ),
1023
- ToolPersonality(
1024
- name="ralph",
1025
- programmer="Ralph Merkle",
1026
- description="Merkle trees inventor",
1027
- philosophy="Cryptography is about mathematical guarantees.",
1028
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'critic', 'batch'],
1029
- environment={'HASH_ALGORITHM': 'SHA256'},
1030
- tags=['pioneer'],
678
+ name="ian",
679
+ programmer="Ian Murdock",
680
+ description="Debian founder",
681
+ philosophy="Free software, free society.",
682
+ tools=ESSENTIAL_TOOLS + UNIX_TOOLS + ["todo"],
683
+ environment={"DEBIAN_FRONTEND": "noninteractive"},
1031
684
  ),
1032
685
  ToolPersonality(
1033
- name="rasmus",
1034
- programmer="Rasmus Lerdorf",
1035
- description="PHP creator - pragmatic web development",
1036
- philosophy="I'm not a real programmer. I throw together things until it works.",
1037
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'sql_query', 'watch', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
1038
- environment={'PHP_VERSION': '8.0'},
1039
- tags=['pioneer', 'web'],
686
+ name="mark_shuttleworth",
687
+ programmer="Mark Shuttleworth",
688
+ description="Ubuntu founder",
689
+ philosophy="Linux for human beings.",
690
+ tools=ESSENTIAL_TOOLS + ["todo", "rules"] + BUILD_TOOLS,
691
+ environment={"UBUNTU_VERSION": "22.04"},
1040
692
  ),
1041
693
  ToolPersonality(
1042
- name="rich",
1043
- programmer="Rich Hickey",
1044
- description="Clojure creator - simplicity matters",
1045
- philosophy="Programming is not about typing... it's about thinking.",
1046
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'todo', 'batch', 'agent', 'consensus', 'critic', 'think'],
1047
- environment={'CLOJURE_VERSION': '1.11'},
1048
- tags=['pioneer'],
694
+ name="lennart",
695
+ programmer="Lennart Poettering",
696
+ description="systemd creator",
697
+ philosophy="Do one thing and do it well... or do everything.",
698
+ tools=ESSENTIAL_TOOLS + ["process", "watch"] + UNIX_TOOLS,
699
+ environment={"SYSTEMD_VERSION": "253"},
1049
700
  ),
1050
701
  ToolPersonality(
1051
- name="richard",
1052
- programmer="Richard Stallman",
1053
- description="GNU creator - software freedom",
1054
- philosophy="Free software is a matter of liberty, not price.",
1055
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'content_replace', 'batch', 'grep', 'find_files', 'bash', 'process', 'diff'],
1056
- environment={'EDITOR': 'emacs'},
1057
- tags=['pioneer'],
702
+ name="bram",
703
+ programmer="Bram Moolenaar",
704
+ description="Vim creator",
705
+ philosophy="The best way to avoid RSI is to not type so much.",
706
+ tools=ESSENTIAL_TOOLS + ["neovim_edit", "neovim_command", "neovim_session"],
707
+ environment={"VIM_VERSION": "9.0"},
1058
708
  ),
1059
709
  ToolPersonality(
1060
- name="rob",
1061
- programmer="Rob Pike",
1062
- description="Go creator - simplicity and concurrency",
1063
- philosophy="A little copying is better than a little dependency.",
1064
- tools=['bash', 'batch', 'cargo', 'diff', 'edit', 'find_files', 'gem', 'go_test', 'grep', 'npx', 'pip', 'process', 'read', 'symbols', 'think', 'tree', 'uvx', 'write'],
1065
- environment={'GOPATH': '~/go', 'GO111MODULE': 'on'},
1066
- tags=['languages', 'go', 'concurrency'],
710
+ name="daniel_r",
711
+ programmer="Daniel Robbins",
712
+ description="Gentoo founder",
713
+ philosophy="Your system, your way.",
714
+ tools=ESSENTIAL_TOOLS + BUILD_TOOLS + UNIX_TOOLS,
715
+ environment={"GENTOO_PROFILE": "default/linux/amd64/17.1"},
1067
716
  ),
1068
717
  ToolPersonality(
1069
- name="ryan",
1070
- programmer="Ryan Dahl",
1071
- description="Node.js & Deno creator",
1072
- philosophy="I/O needs to be done differently.",
1073
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'uvx', 'watch', 'process', 'bash', 'npx', 'uvx', 'process'],
1074
- environment={'DENO_DIR': '~/.deno'},
1075
- tags=['pioneer'],
718
+ name="judd",
719
+ programmer="Judd Vinet",
720
+ description="Arch Linux creator",
721
+ philosophy="Keep it simple.",
722
+ tools=ESSENTIAL_TOOLS + BUILD_TOOLS + UNIX_TOOLS,
723
+ environment={"ARCH_VERSION": "rolling"},
1076
724
  ),
1077
725
  ToolPersonality(
1078
- name="salvatore",
1079
- programmer="Salvatore Sanfilippo",
1080
- description="Redis creator - data structures server",
1081
- philosophy="Simplicity is a great virtue.",
1082
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'bash', 'watch', 'process', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
1083
- environment={'REDIS_VERSION': '7.0'},
1084
- tags=['pioneer', 'database'],
726
+ name="fabrice",
727
+ programmer="Fabrice Bellard",
728
+ description="QEMU & FFmpeg creator",
729
+ philosophy="Small, fast, and elegant code.",
730
+ tools=ESSENTIAL_TOOLS + ["symbols", "process"] + BUILD_TOOLS,
731
+ environment={"QEMU_VERSION": "8.0"},
1085
732
  ),
733
+ # 81-90: Modern Innovators
1086
734
  ToolPersonality(
1087
- name="sanjay",
1088
- programmer="Sanjay Ghemawat",
1089
- description="MapReduce & BigTable co-creator",
1090
- philosophy="Simple abstractions for complex systems.",
1091
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'sql_query', 'sql_search', 'graph_add', 'graph_query', 'batch', 'process'],
1092
- environment={'SPARK_HOME': '/opt/spark'},
1093
- tags=['pioneer'],
735
+ name="vitalik",
736
+ programmer="Vitalik Buterin",
737
+ description="Ethereum creator",
738
+ philosophy="Decentralization matters.",
739
+ tools=ESSENTIAL_TOOLS + ["symbols", "critic", "todo"] + AI_TOOLS,
740
+ environment={"ETH_NETWORK": "mainnet"},
1094
741
  ),
1095
742
  ToolPersonality(
1096
743
  name="satoshi",
1097
744
  programmer="Satoshi Nakamoto",
1098
- description="Bitcoin creator - peer-to-peer electronic cash",
1099
- philosophy="A purely peer-to-peer version of electronic cash.",
1100
- tools=['bash', 'content_replace', 'critic', 'dast', 'dependency_scan', 'diff', 'edit', 'find_files', 'fuzz', 'gh', 'git_search', 'gitlab', 'grep', 'kms', 'process', 'read', 'sast', 'sbom', 'secret_scan', 'signing', 'sigstore', 'snyk', 'symbols', 'think', 'tree', 'trivy', 'write'],
1101
- environment={'BITCOIN_NETWORK': 'mainnet', 'RPC_USER': 'bitcoin', 'SIGNING_KEY': ''},
1102
- tags=['blockchain', 'crypto', 'p2p'],
745
+ description="Bitcoin creator",
746
+ philosophy="Trust in mathematics.",
747
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols"] + UNIX_TOOLS,
748
+ environment={"BITCOIN_NETWORK": "mainnet"},
1103
749
  ),
1104
750
  ToolPersonality(
1105
- name="sebastian",
1106
- programmer="Sebastian Thrun",
1107
- description="Udacity founder & self-driving car pioneer",
1108
- philosophy="Education should be accessible to all.",
1109
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'jupyter', 'watch'],
1110
- environment={'ROS_VERSION': 'noetic'},
1111
- tags=['pioneer'],
751
+ name="chris_lattner",
752
+ programmer="Chris Lattner",
753
+ description="LLVM & Swift creator",
754
+ philosophy="Compiler infrastructure should be modular.",
755
+ tools=ESSENTIAL_TOOLS + ["symbols", "multi_edit", "critic"] + BUILD_TOOLS,
756
+ environment={"LLVM_VERSION": "16"},
1112
757
  ),
1113
758
  ToolPersonality(
1114
- name="security",
1115
- programmer="Security Researcher",
1116
- description="Break it to secure it",
1117
- philosophy="The only secure system is one that's powered off.",
1118
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols', 'git_search', 'grep', 'find_files', 'bash', 'process', 'diff'],
1119
- environment={'SECURITY_MODE': 'paranoid'},
1120
- tags=['general'],
759
+ name="joe",
760
+ programmer="Joe Armstrong",
761
+ description="Erlang creator",
762
+ philosophy="Let it crash.",
763
+ tools=ESSENTIAL_TOOLS + ["process", "watch", "critic"],
764
+ environment={"ERL_VERSION": "OTP-26"},
1121
765
  ),
1122
766
  ToolPersonality(
1123
- name="security_first",
1124
- programmer="Security Engineer",
1125
- description="Security-first development",
1126
- philosophy="Trust nothing, verify everything.",
1127
- tools=['artifact_publish', 'bash', 'ci', 'circleci', 'coverage', 'dast', 'dependency_scan', 'diff', 'edit', 'formatter', 'fuzz', 'gh', 'git_search', 'github_actions', 'gitlab', 'gitlab_ci', 'go_test', 'jenkins', 'jest', 'kms', 'linters', 'mocha', 'pytest', 'read', 'sast', 'sbom', 'secret_scan', 'secrets_manager', 'signing', 'sigstore', 'snyk', 'think', 'tree', 'trivy', 'write'],
1128
- environment={'SECURITY_SCAN': 'enabled', 'SIGNING_KEY': '', 'KMS_KEY': '', 'SNYK_TOKEN': ''},
1129
- tags=['security', 'devsecops', 'compliance'],
767
+ name="jose",
768
+ programmer="José Valim",
769
+ description="Elixir creator",
770
+ philosophy="Productive. Reliable. Fast.",
771
+ tools=ESSENTIAL_TOOLS + ["watch", "process", "todo"],
772
+ environment={"ELIXIR_VERSION": "1.15"},
1130
773
  ),
1131
774
  ToolPersonality(
1132
- name="shigeru",
1133
- programmer="Shigeru Miyamoto",
1134
- description="Mario & Zelda creator",
1135
- philosophy="A delayed game is eventually good, but a rushed game is forever bad.",
1136
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'watch', 'critic'],
1137
- environment={'NINTENDO_SDK': 'true'},
1138
- tags=['pioneer'],
775
+ name="sebastian",
776
+ programmer="Sebastian Thrun",
777
+ description="Udacity founder & self-driving car pioneer",
778
+ philosophy="Education should be accessible to all.",
779
+ tools=ESSENTIAL_TOOLS + AI_TOOLS + ["jupyter", "watch"],
780
+ environment={"ROS_VERSION": "noetic"},
1139
781
  ),
1140
782
  ToolPersonality(
1141
- name="sid",
1142
- programmer="Sid Meier",
1143
- description="Civilization creator",
1144
- philosophy="A game is a series of interesting choices.",
1145
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'watch', 'process'],
1146
- environment={'GAME_MODE': 'debug'},
1147
- tags=['pioneer'],
783
+ name="palmer",
784
+ programmer="Palmer Luckey",
785
+ description="Oculus founder",
786
+ philosophy="VR is the final medium.",
787
+ tools=ESSENTIAL_TOOLS + ["watch", "process"] + BUILD_TOOLS,
788
+ environment={"UNITY_VERSION": "2023.1"},
1148
789
  ),
1149
790
  ToolPersonality(
1150
- name="startup",
1151
- programmer="Startup Founder",
1152
- description="Move fast and fix things",
1153
- philosophy="Done is better than perfect.",
1154
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'agent', 'consensus', 'bash', 'npx', 'uvx', 'process', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
1155
- environment={'STARTUP_MODE': 'hustle'},
1156
- tags=['general'],
791
+ name="dylan",
792
+ programmer="Dylan Field",
793
+ description="Figma co-founder",
794
+ philosophy="Design tools should be collaborative.",
795
+ tools=ESSENTIAL_TOOLS + ["watch", "todo", "rules"],
796
+ environment={"FIGMA_API": "enabled"},
1157
797
  ),
1158
798
  ToolPersonality(
1159
- name="taylor",
1160
- programmer="Taylor Otwell",
1161
- description="Laravel creator - PHP artisan",
1162
- philosophy="Love beautiful code? We do too.",
1163
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'sql_query', 'watch', 'sql_query', 'sql_search', 'graph_add', 'graph_query'],
1164
- environment={'LARAVEL_VERSION': '10'},
1165
- tags=['pioneer'],
799
+ name="guillermo",
800
+ programmer="Guillermo Rauch",
801
+ description="Vercel founder & Next.js creator",
802
+ philosophy="Make the Web. Faster.",
803
+ tools=ESSENTIAL_TOOLS + ["npx", "watch", "rules"] + BUILD_TOOLS,
804
+ environment={"NEXT_VERSION": "14"},
1166
805
  ),
1167
806
  ToolPersonality(
1168
- name="theo",
1169
- programmer="Theo de Raadt",
1170
- description="OpenBSD creator - security by default",
1171
- philosophy="Shut up and hack.",
1172
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'diff', 'grep', 'find_files', 'bash', 'process', 'diff'],
1173
- environment={'OPENBSD_VERSION': '7.3'},
1174
- tags=['pioneer', 'security'],
807
+ name="tom",
808
+ programmer="Tom Preston-Werner",
809
+ description="GitHub co-founder & TOML creator",
810
+ philosophy="Optimize for happiness.",
811
+ tools=ESSENTIAL_TOOLS + ["git_search", "todo", "rules"],
812
+ environment={"GITHUB_ACTIONS": "true"},
1175
813
  ),
814
+ # 91-100: Special Configurations
1176
815
  ToolPersonality(
1177
- name="tim",
1178
- programmer="Tim Berners-Lee",
1179
- description="WWW inventor - open web",
1180
- philosophy="The Web is for everyone.",
1181
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'npx', 'watch', 'rules', 'search', 'symbols', 'grep', 'git_search'],
1182
- environment={'W3C_VALIDATOR': 'true'},
1183
- tags=['pioneer', 'web'],
816
+ name="fullstack",
817
+ programmer="Full Stack Developer",
818
+ description="Every tool for every job",
819
+ philosophy="Jack of all trades, master of... well, all trades.",
820
+ tools=list(
821
+ set(
822
+ ESSENTIAL_TOOLS
823
+ + AI_TOOLS
824
+ + SEARCH_TOOLS
825
+ + DATABASE_TOOLS
826
+ + BUILD_TOOLS
827
+ + UNIX_TOOLS
828
+ + VECTOR_TOOLS
829
+ + [
830
+ "todo",
831
+ "rules",
832
+ "watch",
833
+ "jupyter",
834
+ "neovim_edit",
835
+ "mcp",
836
+ "consensus",
837
+ ]
838
+ )
839
+ ),
840
+ environment={"ALL_TOOLS": "enabled"},
1184
841
  ),
1185
842
  ToolPersonality(
1186
- name="tim_sweeney",
1187
- programmer="Tim Sweeney",
1188
- description="Epic Games founder - Unreal Engine",
1189
- philosophy="The engine is the game.",
1190
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'symbols', 'watch', 'process', 'bash', 'npx', 'uvx', 'process'],
1191
- environment={'UNREAL_ENGINE': '5'},
1192
- tags=['pioneer', 'gaming'],
843
+ name="minimal",
844
+ programmer="Minimalist",
845
+ description="Just the essentials",
846
+ philosophy="Less is more.",
847
+ tools=ESSENTIAL_TOOLS,
848
+ environment={"MINIMAL_MODE": "true"},
1193
849
  ),
1194
850
  ToolPersonality(
1195
- name="tom",
1196
- programmer="Tom Preston-Werner",
1197
- description="GitHub co-founder & TOML creator",
1198
- philosophy="Optimize for happiness.",
1199
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'git_search', 'todo', 'rules'],
1200
- environment={'GITHUB_ACTIONS': 'true'},
1201
- tags=['pioneer', 'ai'],
851
+ name="data_scientist",
852
+ programmer="Data Scientist",
853
+ description="Analyze all the things",
854
+ philosophy="In God we trust. All others must bring data.",
855
+ tools=ESSENTIAL_TOOLS + ["jupyter", "sql_query", "stats"] + VECTOR_TOOLS + AI_TOOLS,
856
+ environment={"JUPYTER_THEME": "dark"},
1202
857
  ),
1203
858
  ToolPersonality(
1204
- name="turing",
1205
- programmer="Alan Turing",
1206
- description="Computing foundations and AI pioneer",
1207
- philosophy="We can only see a short distance ahead, but we can see plenty there that needs to be done.",
1208
- tools=['agent', 'bash', 'consensus', 'critic', 'edit', 'llm', 'model_check', 'notebook', 'read', 'symbols', 'think', 'tree', 'write'],
1209
- environment={'TURING_COMPLETE': 'true'},
1210
- tags=['pioneer', 'ai', 'theory'],
859
+ name="devops",
860
+ programmer="DevOps Engineer",
861
+ description="Automate everything",
862
+ philosophy="You build it, you run it.",
863
+ tools=ESSENTIAL_TOOLS + BUILD_TOOLS + ["process", "watch", "todo"] + UNIX_TOOLS,
864
+ environment={"CI_CD": "enabled"},
1211
865
  ),
1212
866
  ToolPersonality(
1213
- name="vitalik",
1214
- programmer="Vitalik Buterin",
1215
- description="Ethereum creator - world computer",
1216
- philosophy="Decentralized world computer.",
1217
- tools=['ast_search', 'bash', 'cargo', 'dast', 'dependency_scan', 'edit', 'fuzz', 'gem', 'git_search', 'grep', 'hardhat', 'multi_edit', 'npx', 'pip', 'process', 'read', 'sast', 'sbom', 'search', 'secret_scan', 'sigstore', 'snyk', 'symbols', 'think', 'todo', 'tree', 'trivy', 'truffle', 'uvx', 'write'],
1218
- environment={'ETH_NETWORK': 'mainnet', 'WEB3_PROVIDER': 'https://mainnet.infura.io'},
1219
- tags=['blockchain', 'ethereum', 'smart-contracts'],
867
+ name="security",
868
+ programmer="Security Researcher",
869
+ description="Break it to secure it",
870
+ philosophy="The only secure system is one that's powered off.",
871
+ tools=ESSENTIAL_TOOLS + ["critic", "symbols", "git_search"] + UNIX_TOOLS,
872
+ environment={"SECURITY_MODE": "paranoid"},
1220
873
  ),
1221
874
  ToolPersonality(
1222
- name="whitfield",
1223
- programmer="Whitfield Diffie",
1224
- description="Public-key cryptography pioneer",
1225
- philosophy="Privacy is necessary for an open society.",
1226
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'critic', 'symbols'],
1227
- environment={'OPENSSL_VERSION': '3.0'},
1228
- tags=['general'],
875
+ name="academic",
876
+ programmer="Academic Researcher",
877
+ description="Publish or perish",
878
+ philosophy="Standing on the shoulders of giants.",
879
+ tools=ESSENTIAL_TOOLS + ["jupyter", "todo", "critic"] + AI_TOOLS + SEARCH_TOOLS,
880
+ environment={"LATEX_ENGINE": "xelatex"},
1229
881
  ),
1230
882
  ToolPersonality(
1231
- name="will",
1232
- programmer="Will Wright",
1233
- description="SimCity & The Sims creator",
1234
- philosophy="Games are a form of communication.",
1235
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'todo', 'watch', 'process'],
1236
- environment={'SIMULATION_MODE': 'debug'},
1237
- tags=['pioneer'],
883
+ name="startup",
884
+ programmer="Startup Founder",
885
+ description="Move fast and fix things",
886
+ philosophy="Done is better than perfect.",
887
+ tools=ESSENTIAL_TOOLS + ["todo", "agent", "consensus"] + BUILD_TOOLS + DATABASE_TOOLS,
888
+ environment={"STARTUP_MODE": "hustle"},
1238
889
  ),
1239
890
  ToolPersonality(
1240
- name="wirth",
1241
- programmer="Niklaus Wirth",
1242
- description="Language design - Pascal/Modula/Oberon",
1243
- philosophy="Algorithms + Data Structures = Programs",
1244
- tools=['bash', 'compiler', 'edit', 'formatter', 'linters', 'read', 'symbols', 'think', 'tree', 'write'],
1245
- environment={'LANGUAGE_STYLE': 'pascal', 'TYPE_SAFETY': 'strict'},
1246
- tags=['languages', 'academic', 'design'],
891
+ name="enterprise",
892
+ programmer="Enterprise Developer",
893
+ description="Process and compliance",
894
+ philosophy="Nobody ever got fired for buying IBM.",
895
+ tools=ESSENTIAL_TOOLS + ["todo", "critic", "rules", "stats"] + DATABASE_TOOLS,
896
+ environment={"COMPLIANCE": "SOC2"},
1247
897
  ),
1248
898
  ToolPersonality(
1249
- name="yann",
1250
- programmer="Yann LeCun",
1251
- description="Deep learning pioneer - ConvNets",
1252
- philosophy="AI is not magic; it's just math and data.",
1253
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'vector_index', 'vector_search', 'jupyter', 'watch'],
1254
- environment={'PYTORCH_VERSION': '2.0'},
1255
- tags=['general'],
899
+ name="creative",
900
+ programmer="Creative Coder",
901
+ description="Code as art",
902
+ philosophy="Programming is the art of the possible.",
903
+ tools=ESSENTIAL_TOOLS + ["watch", "jupyter", "todo"] + AI_TOOLS,
904
+ environment={"P5_MODE": "global"},
1256
905
  ),
1257
906
  ToolPersonality(
1258
- name="yoshua",
1259
- programmer="Yoshua Bengio",
1260
- description="Deep learning pioneer",
1261
- philosophy="We need to think about AI that helps humanity.",
1262
- tools=['read', 'write', 'edit', 'tree', 'bash', 'think', 'agent', 'consensus', 'critic', 'think', 'vector_index', 'vector_search', 'jupyter', 'batch'],
1263
- environment={'THEANO_FLAGS': 'device=cuda'},
1264
- tags=['general'],
907
+ name="hanzo",
908
+ programmer="Hanzo AI Default",
909
+ description="Balanced productivity and quality",
910
+ philosophy="The Zen of Model Context Protocol.",
911
+ tools=ESSENTIAL_TOOLS
912
+ + [
913
+ "agent",
914
+ "consensus",
915
+ "critic",
916
+ "todo",
917
+ "rules",
918
+ "symbols",
919
+ "search",
920
+ "git_search",
921
+ "watch",
922
+ "jupyter",
923
+ ]
924
+ + BUILD_TOOLS,
925
+ environment={"HANZO_MODE": "zen"},
1265
926
  ),
1266
927
  ]
928
+
929
+
930
+ # Register all personalities
931
+ def register_default_personalities():
932
+ """Register all default tool personalities."""
933
+ for personality in personalities:
934
+ PersonalityRegistry.register(personality)
935
+
936
+
937
+ # Ensure agent tool is enabled when API keys are present
938
+ def ensure_agent_enabled(personality: ToolPersonality) -> ToolPersonality:
939
+ """Ensure agent tool is enabled if API keys are present."""
940
+ api_keys_present = any(
941
+ os.environ.get(key)
942
+ for key in [
943
+ "OPENAI_API_KEY",
944
+ "ANTHROPIC_API_KEY",
945
+ "GOOGLE_API_KEY",
946
+ "HANZO_API_KEY",
947
+ "GROQ_API_KEY",
948
+ "TOGETHER_API_KEY",
949
+ "MISTRAL_API_KEY",
950
+ "PERPLEXITY_API_KEY",
951
+ ]
952
+ )
953
+
954
+ if api_keys_present and "agent" not in personality.tools:
955
+ personality.tools.append("agent")
956
+ if "consensus" not in personality.tools:
957
+ personality.tools.append("consensus")
958
+
959
+ return personality