codepp 0.0.437__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.
Files changed (288) hide show
  1. code_puppy/__init__.py +10 -0
  2. code_puppy/__main__.py +10 -0
  3. code_puppy/agents/__init__.py +31 -0
  4. code_puppy/agents/agent_c_reviewer.py +155 -0
  5. code_puppy/agents/agent_code_puppy.py +117 -0
  6. code_puppy/agents/agent_code_reviewer.py +90 -0
  7. code_puppy/agents/agent_cpp_reviewer.py +132 -0
  8. code_puppy/agents/agent_creator_agent.py +638 -0
  9. code_puppy/agents/agent_golang_reviewer.py +151 -0
  10. code_puppy/agents/agent_helios.py +124 -0
  11. code_puppy/agents/agent_javascript_reviewer.py +160 -0
  12. code_puppy/agents/agent_manager.py +742 -0
  13. code_puppy/agents/agent_pack_leader.py +385 -0
  14. code_puppy/agents/agent_planning.py +165 -0
  15. code_puppy/agents/agent_python_programmer.py +169 -0
  16. code_puppy/agents/agent_python_reviewer.py +90 -0
  17. code_puppy/agents/agent_qa_expert.py +163 -0
  18. code_puppy/agents/agent_qa_kitten.py +208 -0
  19. code_puppy/agents/agent_scheduler.py +121 -0
  20. code_puppy/agents/agent_security_auditor.py +181 -0
  21. code_puppy/agents/agent_terminal_qa.py +323 -0
  22. code_puppy/agents/agent_typescript_reviewer.py +166 -0
  23. code_puppy/agents/base_agent.py +2156 -0
  24. code_puppy/agents/event_stream_handler.py +348 -0
  25. code_puppy/agents/json_agent.py +202 -0
  26. code_puppy/agents/pack/__init__.py +34 -0
  27. code_puppy/agents/pack/bloodhound.py +304 -0
  28. code_puppy/agents/pack/husky.py +327 -0
  29. code_puppy/agents/pack/retriever.py +393 -0
  30. code_puppy/agents/pack/shepherd.py +348 -0
  31. code_puppy/agents/pack/terrier.py +287 -0
  32. code_puppy/agents/pack/watchdog.py +367 -0
  33. code_puppy/agents/prompt_reviewer.py +145 -0
  34. code_puppy/agents/subagent_stream_handler.py +276 -0
  35. code_puppy/api/__init__.py +13 -0
  36. code_puppy/api/app.py +169 -0
  37. code_puppy/api/main.py +21 -0
  38. code_puppy/api/pty_manager.py +453 -0
  39. code_puppy/api/routers/__init__.py +12 -0
  40. code_puppy/api/routers/agents.py +36 -0
  41. code_puppy/api/routers/commands.py +217 -0
  42. code_puppy/api/routers/config.py +75 -0
  43. code_puppy/api/routers/sessions.py +234 -0
  44. code_puppy/api/templates/terminal.html +361 -0
  45. code_puppy/api/websocket.py +154 -0
  46. code_puppy/callbacks.py +692 -0
  47. code_puppy/chatgpt_codex_client.py +338 -0
  48. code_puppy/claude_cache_client.py +672 -0
  49. code_puppy/cli_runner.py +1073 -0
  50. code_puppy/command_line/__init__.py +1 -0
  51. code_puppy/command_line/add_model_menu.py +1092 -0
  52. code_puppy/command_line/agent_menu.py +662 -0
  53. code_puppy/command_line/attachments.py +395 -0
  54. code_puppy/command_line/autosave_menu.py +704 -0
  55. code_puppy/command_line/clipboard.py +527 -0
  56. code_puppy/command_line/colors_menu.py +532 -0
  57. code_puppy/command_line/command_handler.py +293 -0
  58. code_puppy/command_line/command_registry.py +150 -0
  59. code_puppy/command_line/config_commands.py +719 -0
  60. code_puppy/command_line/core_commands.py +867 -0
  61. code_puppy/command_line/diff_menu.py +865 -0
  62. code_puppy/command_line/file_path_completion.py +73 -0
  63. code_puppy/command_line/load_context_completion.py +52 -0
  64. code_puppy/command_line/mcp/__init__.py +10 -0
  65. code_puppy/command_line/mcp/base.py +32 -0
  66. code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
  67. code_puppy/command_line/mcp/custom_server_form.py +688 -0
  68. code_puppy/command_line/mcp/custom_server_installer.py +195 -0
  69. code_puppy/command_line/mcp/edit_command.py +148 -0
  70. code_puppy/command_line/mcp/handler.py +138 -0
  71. code_puppy/command_line/mcp/help_command.py +147 -0
  72. code_puppy/command_line/mcp/install_command.py +214 -0
  73. code_puppy/command_line/mcp/install_menu.py +705 -0
  74. code_puppy/command_line/mcp/list_command.py +94 -0
  75. code_puppy/command_line/mcp/logs_command.py +235 -0
  76. code_puppy/command_line/mcp/remove_command.py +82 -0
  77. code_puppy/command_line/mcp/restart_command.py +100 -0
  78. code_puppy/command_line/mcp/search_command.py +123 -0
  79. code_puppy/command_line/mcp/start_all_command.py +135 -0
  80. code_puppy/command_line/mcp/start_command.py +117 -0
  81. code_puppy/command_line/mcp/status_command.py +184 -0
  82. code_puppy/command_line/mcp/stop_all_command.py +112 -0
  83. code_puppy/command_line/mcp/stop_command.py +80 -0
  84. code_puppy/command_line/mcp/test_command.py +107 -0
  85. code_puppy/command_line/mcp/utils.py +129 -0
  86. code_puppy/command_line/mcp/wizard_utils.py +334 -0
  87. code_puppy/command_line/mcp_completion.py +174 -0
  88. code_puppy/command_line/model_picker_completion.py +197 -0
  89. code_puppy/command_line/model_settings_menu.py +932 -0
  90. code_puppy/command_line/motd.py +96 -0
  91. code_puppy/command_line/onboarding_slides.py +179 -0
  92. code_puppy/command_line/onboarding_wizard.py +342 -0
  93. code_puppy/command_line/pin_command_completion.py +329 -0
  94. code_puppy/command_line/prompt_toolkit_completion.py +846 -0
  95. code_puppy/command_line/session_commands.py +302 -0
  96. code_puppy/command_line/shell_passthrough.py +145 -0
  97. code_puppy/command_line/skills_completion.py +160 -0
  98. code_puppy/command_line/uc_menu.py +893 -0
  99. code_puppy/command_line/utils.py +93 -0
  100. code_puppy/command_line/wiggum_state.py +78 -0
  101. code_puppy/config.py +1770 -0
  102. code_puppy/error_logging.py +134 -0
  103. code_puppy/gemini_code_assist.py +385 -0
  104. code_puppy/gemini_model.py +754 -0
  105. code_puppy/hook_engine/README.md +105 -0
  106. code_puppy/hook_engine/__init__.py +21 -0
  107. code_puppy/hook_engine/aliases.py +155 -0
  108. code_puppy/hook_engine/engine.py +221 -0
  109. code_puppy/hook_engine/executor.py +296 -0
  110. code_puppy/hook_engine/matcher.py +156 -0
  111. code_puppy/hook_engine/models.py +240 -0
  112. code_puppy/hook_engine/registry.py +106 -0
  113. code_puppy/hook_engine/validator.py +144 -0
  114. code_puppy/http_utils.py +361 -0
  115. code_puppy/keymap.py +128 -0
  116. code_puppy/main.py +10 -0
  117. code_puppy/mcp_/__init__.py +66 -0
  118. code_puppy/mcp_/async_lifecycle.py +286 -0
  119. code_puppy/mcp_/blocking_startup.py +469 -0
  120. code_puppy/mcp_/captured_stdio_server.py +275 -0
  121. code_puppy/mcp_/circuit_breaker.py +290 -0
  122. code_puppy/mcp_/config_wizard.py +507 -0
  123. code_puppy/mcp_/dashboard.py +308 -0
  124. code_puppy/mcp_/error_isolation.py +407 -0
  125. code_puppy/mcp_/examples/retry_example.py +226 -0
  126. code_puppy/mcp_/health_monitor.py +589 -0
  127. code_puppy/mcp_/managed_server.py +428 -0
  128. code_puppy/mcp_/manager.py +807 -0
  129. code_puppy/mcp_/mcp_logs.py +224 -0
  130. code_puppy/mcp_/registry.py +451 -0
  131. code_puppy/mcp_/retry_manager.py +337 -0
  132. code_puppy/mcp_/server_registry_catalog.py +1126 -0
  133. code_puppy/mcp_/status_tracker.py +355 -0
  134. code_puppy/mcp_/system_tools.py +209 -0
  135. code_puppy/mcp_prompts/__init__.py +1 -0
  136. code_puppy/mcp_prompts/hook_creator.py +103 -0
  137. code_puppy/messaging/__init__.py +255 -0
  138. code_puppy/messaging/bus.py +613 -0
  139. code_puppy/messaging/commands.py +167 -0
  140. code_puppy/messaging/markdown_patches.py +57 -0
  141. code_puppy/messaging/message_queue.py +361 -0
  142. code_puppy/messaging/messages.py +569 -0
  143. code_puppy/messaging/queue_console.py +271 -0
  144. code_puppy/messaging/renderers.py +311 -0
  145. code_puppy/messaging/rich_renderer.py +1158 -0
  146. code_puppy/messaging/spinner/__init__.py +83 -0
  147. code_puppy/messaging/spinner/console_spinner.py +240 -0
  148. code_puppy/messaging/spinner/spinner_base.py +95 -0
  149. code_puppy/messaging/subagent_console.py +460 -0
  150. code_puppy/model_factory.py +848 -0
  151. code_puppy/model_switching.py +63 -0
  152. code_puppy/model_utils.py +168 -0
  153. code_puppy/models.json +174 -0
  154. code_puppy/models_dev_api.json +1 -0
  155. code_puppy/models_dev_parser.py +592 -0
  156. code_puppy/plugins/__init__.py +186 -0
  157. code_puppy/plugins/agent_skills/__init__.py +22 -0
  158. code_puppy/plugins/agent_skills/config.py +175 -0
  159. code_puppy/plugins/agent_skills/discovery.py +136 -0
  160. code_puppy/plugins/agent_skills/downloader.py +392 -0
  161. code_puppy/plugins/agent_skills/installer.py +22 -0
  162. code_puppy/plugins/agent_skills/metadata.py +219 -0
  163. code_puppy/plugins/agent_skills/prompt_builder.py +60 -0
  164. code_puppy/plugins/agent_skills/register_callbacks.py +241 -0
  165. code_puppy/plugins/agent_skills/remote_catalog.py +322 -0
  166. code_puppy/plugins/agent_skills/skill_catalog.py +257 -0
  167. code_puppy/plugins/agent_skills/skills_install_menu.py +664 -0
  168. code_puppy/plugins/agent_skills/skills_menu.py +781 -0
  169. code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
  170. code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
  171. code_puppy/plugins/antigravity_oauth/antigravity_model.py +706 -0
  172. code_puppy/plugins/antigravity_oauth/config.py +42 -0
  173. code_puppy/plugins/antigravity_oauth/constants.py +133 -0
  174. code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
  175. code_puppy/plugins/antigravity_oauth/register_callbacks.py +518 -0
  176. code_puppy/plugins/antigravity_oauth/storage.py +288 -0
  177. code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
  178. code_puppy/plugins/antigravity_oauth/token.py +167 -0
  179. code_puppy/plugins/antigravity_oauth/transport.py +863 -0
  180. code_puppy/plugins/antigravity_oauth/utils.py +168 -0
  181. code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
  182. code_puppy/plugins/chatgpt_oauth/config.py +52 -0
  183. code_puppy/plugins/chatgpt_oauth/oauth_flow.py +329 -0
  184. code_puppy/plugins/chatgpt_oauth/register_callbacks.py +176 -0
  185. code_puppy/plugins/chatgpt_oauth/test_plugin.py +301 -0
  186. code_puppy/plugins/chatgpt_oauth/utils.py +523 -0
  187. code_puppy/plugins/claude_code_hooks/__init__.py +1 -0
  188. code_puppy/plugins/claude_code_hooks/config.py +137 -0
  189. code_puppy/plugins/claude_code_hooks/register_callbacks.py +175 -0
  190. code_puppy/plugins/claude_code_oauth/README.md +167 -0
  191. code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
  192. code_puppy/plugins/claude_code_oauth/__init__.py +25 -0
  193. code_puppy/plugins/claude_code_oauth/config.py +52 -0
  194. code_puppy/plugins/claude_code_oauth/register_callbacks.py +453 -0
  195. code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
  196. code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +241 -0
  197. code_puppy/plugins/claude_code_oauth/utils.py +640 -0
  198. code_puppy/plugins/customizable_commands/__init__.py +0 -0
  199. code_puppy/plugins/customizable_commands/register_callbacks.py +152 -0
  200. code_puppy/plugins/example_custom_command/README.md +280 -0
  201. code_puppy/plugins/example_custom_command/register_callbacks.py +51 -0
  202. code_puppy/plugins/file_permission_handler/__init__.py +4 -0
  203. code_puppy/plugins/file_permission_handler/register_callbacks.py +470 -0
  204. code_puppy/plugins/frontend_emitter/__init__.py +25 -0
  205. code_puppy/plugins/frontend_emitter/emitter.py +121 -0
  206. code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
  207. code_puppy/plugins/hook_creator/__init__.py +1 -0
  208. code_puppy/plugins/hook_creator/register_callbacks.py +33 -0
  209. code_puppy/plugins/hook_manager/__init__.py +1 -0
  210. code_puppy/plugins/hook_manager/config.py +290 -0
  211. code_puppy/plugins/hook_manager/hooks_menu.py +564 -0
  212. code_puppy/plugins/hook_manager/register_callbacks.py +227 -0
  213. code_puppy/plugins/oauth_puppy_html.py +228 -0
  214. code_puppy/plugins/scheduler/__init__.py +1 -0
  215. code_puppy/plugins/scheduler/register_callbacks.py +88 -0
  216. code_puppy/plugins/scheduler/scheduler_menu.py +522 -0
  217. code_puppy/plugins/scheduler/scheduler_wizard.py +341 -0
  218. code_puppy/plugins/shell_safety/__init__.py +6 -0
  219. code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
  220. code_puppy/plugins/shell_safety/command_cache.py +156 -0
  221. code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
  222. code_puppy/plugins/synthetic_status/__init__.py +1 -0
  223. code_puppy/plugins/synthetic_status/register_callbacks.py +132 -0
  224. code_puppy/plugins/synthetic_status/status_api.py +147 -0
  225. code_puppy/plugins/universal_constructor/__init__.py +13 -0
  226. code_puppy/plugins/universal_constructor/models.py +138 -0
  227. code_puppy/plugins/universal_constructor/register_callbacks.py +47 -0
  228. code_puppy/plugins/universal_constructor/registry.py +302 -0
  229. code_puppy/plugins/universal_constructor/sandbox.py +584 -0
  230. code_puppy/prompts/antigravity_system_prompt.md +1 -0
  231. code_puppy/pydantic_patches.py +356 -0
  232. code_puppy/reopenable_async_client.py +232 -0
  233. code_puppy/round_robin_model.py +150 -0
  234. code_puppy/scheduler/__init__.py +41 -0
  235. code_puppy/scheduler/__main__.py +9 -0
  236. code_puppy/scheduler/cli.py +118 -0
  237. code_puppy/scheduler/config.py +126 -0
  238. code_puppy/scheduler/daemon.py +280 -0
  239. code_puppy/scheduler/executor.py +155 -0
  240. code_puppy/scheduler/platform.py +19 -0
  241. code_puppy/scheduler/platform_unix.py +22 -0
  242. code_puppy/scheduler/platform_win.py +32 -0
  243. code_puppy/session_storage.py +338 -0
  244. code_puppy/status_display.py +257 -0
  245. code_puppy/summarization_agent.py +176 -0
  246. code_puppy/terminal_utils.py +418 -0
  247. code_puppy/tools/__init__.py +501 -0
  248. code_puppy/tools/agent_tools.py +603 -0
  249. code_puppy/tools/ask_user_question/__init__.py +26 -0
  250. code_puppy/tools/ask_user_question/constants.py +73 -0
  251. code_puppy/tools/ask_user_question/demo_tui.py +55 -0
  252. code_puppy/tools/ask_user_question/handler.py +232 -0
  253. code_puppy/tools/ask_user_question/models.py +304 -0
  254. code_puppy/tools/ask_user_question/registration.py +26 -0
  255. code_puppy/tools/ask_user_question/renderers.py +309 -0
  256. code_puppy/tools/ask_user_question/terminal_ui.py +329 -0
  257. code_puppy/tools/ask_user_question/theme.py +155 -0
  258. code_puppy/tools/ask_user_question/tui_loop.py +423 -0
  259. code_puppy/tools/browser/__init__.py +37 -0
  260. code_puppy/tools/browser/browser_control.py +289 -0
  261. code_puppy/tools/browser/browser_interactions.py +545 -0
  262. code_puppy/tools/browser/browser_locators.py +640 -0
  263. code_puppy/tools/browser/browser_manager.py +378 -0
  264. code_puppy/tools/browser/browser_navigation.py +251 -0
  265. code_puppy/tools/browser/browser_screenshot.py +179 -0
  266. code_puppy/tools/browser/browser_scripts.py +462 -0
  267. code_puppy/tools/browser/browser_workflows.py +221 -0
  268. code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
  269. code_puppy/tools/browser/terminal_command_tools.py +534 -0
  270. code_puppy/tools/browser/terminal_screenshot_tools.py +552 -0
  271. code_puppy/tools/browser/terminal_tools.py +525 -0
  272. code_puppy/tools/command_runner.py +1346 -0
  273. code_puppy/tools/common.py +1409 -0
  274. code_puppy/tools/display.py +84 -0
  275. code_puppy/tools/file_modifications.py +886 -0
  276. code_puppy/tools/file_operations.py +802 -0
  277. code_puppy/tools/scheduler_tools.py +412 -0
  278. code_puppy/tools/skills_tools.py +244 -0
  279. code_puppy/tools/subagent_context.py +158 -0
  280. code_puppy/tools/tools_content.py +51 -0
  281. code_puppy/tools/universal_constructor.py +889 -0
  282. code_puppy/uvx_detection.py +242 -0
  283. code_puppy/version_checker.py +82 -0
  284. codepp-0.0.437.dist-info/METADATA +766 -0
  285. codepp-0.0.437.dist-info/RECORD +288 -0
  286. codepp-0.0.437.dist-info/WHEEL +4 -0
  287. codepp-0.0.437.dist-info/entry_points.txt +3 -0
  288. codepp-0.0.437.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,766 @@
1
+ Metadata-Version: 2.4
2
+ Name: codepp
3
+ Version: 0.0.437
4
+ Summary: Code generation agent
5
+ Project-URL: repository, https://github.com/mpfaffenberger/code_puppy
6
+ Project-URL: HomePage, https://github.com/mpfaffenberger/code_puppy
7
+ Author: Michael Pfaffenberger
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: agent,ai,cli,coding,llm,mcp,terminal
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Software Development :: Code Generators
21
+ Requires-Python: <3.15,>=3.11
22
+ Requires-Dist: anthropic==0.79.0
23
+ Requires-Dist: dbos>=2.11.0
24
+ Requires-Dist: fastapi>=0.109.0
25
+ Requires-Dist: httpx[http2]>=0.24.1
26
+ Requires-Dist: json-repair>=0.46.2
27
+ Requires-Dist: mcp>=1.9.4
28
+ Requires-Dist: openai>=1.99.1
29
+ Requires-Dist: pillow>=10.0.0
30
+ Requires-Dist: playwright>=1.40.0
31
+ Requires-Dist: prompt-toolkit>=3.0.52
32
+ Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]==1.56.0
33
+ Requires-Dist: pydantic>=2.4.0
34
+ Requires-Dist: pyfiglet>=0.8.post1
35
+ Requires-Dist: python-dotenv>=1.0.0
36
+ Requires-Dist: rapidfuzz>=3.13.0
37
+ Requires-Dist: requests>=2.28.0
38
+ Requires-Dist: rich>=13.4.2
39
+ Requires-Dist: ripgrep==14.1.0
40
+ Requires-Dist: tenacity>=8.2.0
41
+ Requires-Dist: termflow-md>=0.1.8
42
+ Requires-Dist: typer>=0.12.0
43
+ Requires-Dist: uvicorn[standard]>=0.27.0
44
+ Requires-Dist: websockets>=12.0
45
+ Description-Content-Type: text/markdown
46
+
47
+ <div align="center">
48
+
49
+ ![Code Puppy Logo](code_puppy.png)
50
+
51
+ **🐶✨The sassy AI code agent that makes IDEs look outdated** ✨🐶
52
+
53
+ [![Version](https://img.shields.io/pypi/v/code-puppy?style=for-the-badge&logo=python&label=Version&color=purple)](https://pypi.org/project/code-puppy/)
54
+ [![Downloads](https://img.shields.io/badge/Downloads-170k%2B-brightgreen?style=for-the-badge&logo=download)](https://pypi.org/project/code-puppy/)
55
+ [![Python](https://img.shields.io/badge/Python-3.11%2B-blue?style=for-the-badge&logo=python&logoColor=white)](https://python.org)
56
+ [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE)
57
+ [![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/actions)
58
+ [![Tests](https://img.shields.io/badge/Tests-Passing-success?style=for-the-badge&logo=pytest)](https://github.com/mpfaffenberger/code_puppy/tests)
59
+
60
+ [![100% Open Source](https://img.shields.io/badge/100%25-Open%20Source-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy)
61
+ [![Pydantic AI](https://img.shields.io/badge/Pydantic-AI-success?style=for-the-badge)](https://github.com/pydantic/pydantic-ai)
62
+
63
+ [![100% privacy](https://img.shields.io/badge/FULL-Privacy%20commitment-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy/blob/main/README.md#code-puppy-privacy-commitment)
64
+
65
+ [![GitHub stars](https://img.shields.io/github/stars/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/stargazers)
66
+ [![GitHub forks](https://img.shields.io/github/forks/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/network)
67
+
68
+ [![Discord](https://img.shields.io/badge/Discord-Community-purple?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/eAGdE4J7Ca)
69
+ [![Docs](https://img.shields.io/badge/Read-The%20Docs-blue?style=for-the-badge&logo=readthedocs)](https://code-puppy.dev)
70
+
71
+ **[⭐ Star this repo if you hate expensive IDEs! ⭐](#quick-start)**
72
+
73
+ *"Who needs an IDE when you have 1024 angry puppies?"* - Someone, probably.
74
+
75
+ </div>
76
+
77
+ ---
78
+
79
+
80
+
81
+ ## Overview
82
+
83
+ *This project was coded angrily in reaction to Windsurf and Cursor removing access to models and raising prices.*
84
+
85
+ *You could also run 50 code puppies at once if you were insane enough.*
86
+
87
+ *Would you rather plow a field with one ox or 1024 puppies?*
88
+ - If you pick the ox, better slam that back button in your browser.
89
+
90
+
91
+ Code Puppy is an AI-powered code generation agent, designed to understand programming tasks, generate high-quality code, and explain its reasoning similar to tools like Windsurf and Cursor.
92
+
93
+
94
+ ## Quick start
95
+
96
+ ```bash
97
+ uvx code-puppy -i
98
+ ````
99
+
100
+ ## Installation
101
+
102
+ ### UV (Recommended)
103
+
104
+ #### macOS / Linux
105
+
106
+ ```bash
107
+ # Install UV if you don't have it
108
+ curl -LsSf https://astral.sh/uv/install.sh | sh
109
+
110
+ uvx code-puppy
111
+ ```
112
+
113
+ #### Windows
114
+
115
+ On Windows, we recommend installing code-puppy as a global tool for the best experience with keyboard shortcuts (Ctrl+C/Ctrl+X cancellation):
116
+
117
+ ```powershell
118
+ # Install UV if you don't have it (run in PowerShell as Admin)
119
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
120
+
121
+ uvx code-puppy
122
+ ```
123
+
124
+ ## Changelog (By Kittylog!)
125
+
126
+ [📋 View the full changelog on Kittylog](https://kittylog.app/c/mpfaffenberger/code_puppy)
127
+
128
+ ## Usage
129
+
130
+ ### Adding Models from models.dev 🆕
131
+
132
+ While there are several models configured right out of the box from providers like Synthetic, Cerebras, OpenAI, Google, and Anthropic, Code Puppy integrates with [models.dev](https://models.dev) to let you browse and add models from **65+ providers** with a single command:
133
+
134
+ ```bash
135
+ /add_model
136
+ ```
137
+
138
+ This opens an interactive TUI where you can:
139
+ - **Browse providers** - See all available AI providers (OpenAI, Anthropic, Groq, Mistral, xAI, Cohere, Perplexity, DeepInfra, and many more)
140
+ - **Preview model details** - View capabilities, pricing, context length, and features
141
+ - **One-click add** - Automatically configures the model with correct endpoints and API keys
142
+
143
+ #### Live API with Offline Fallback
144
+
145
+ The `/add_model` command fetches the latest model data from models.dev in real-time. If the API is unavailable, it falls back to a bundled database:
146
+
147
+ ```
148
+ 📡 Fetched latest models from models.dev # Live API
149
+ 📦 Using bundled models database # Offline fallback
150
+ ```
151
+
152
+ #### Supported Providers
153
+
154
+ Code Puppy integrates with https://models.dev giving you access to 65 providers and >1000 different model offerings.
155
+
156
+ There are **39+ additional providers** that already have OpenAI-compatible APIs configured in models.dev!
157
+
158
+ These providers are automatically configured with correct OpenAI-compatible endpoints, but have **not** been tested thoroughly:
159
+
160
+ | Provider | Endpoint | API Key Env Var |
161
+ |----------|----------|----------------|
162
+ | **xAI** (Grok) | `https://api.x.ai/v1` | `XAI_API_KEY` |
163
+ | **Groq** | `https://api.groq.com/openai/v1` | `GROQ_API_KEY` |
164
+ | **Mistral** | `https://api.mistral.ai/v1` | `MISTRAL_API_KEY` |
165
+ | **Together AI** | `https://api.together.xyz/v1` | `TOGETHER_API_KEY` |
166
+ | **Perplexity** | `https://api.perplexity.ai` | `PERPLEXITY_API_KEY` |
167
+ | **DeepInfra** | `https://api.deepinfra.com/v1/openai` | `DEEPINFRA_API_KEY` |
168
+ | **Cohere** | `https://api.cohere.com/compatibility/v1` | `COHERE_API_KEY` |
169
+ | **AIHubMix** | `https://aihubmix.com/v1` | `AIHUBMIX_API_KEY` |
170
+
171
+ #### Smart Warnings
172
+
173
+ - **⚠️ Unsupported Providers** - Providers like Amazon Bedrock and Google Vertex that require special authentication are clearly marked
174
+ - **⚠️ No Tool Calling** - Models without tool calling support show a big warning since they can't use Code Puppy's file/shell tools
175
+
176
+ ### Durable Execution
177
+
178
+ Code Puppy now supports **[DBOS](https://github.com/dbos-inc/dbos-transact-py)** durable execution.
179
+
180
+ When enabled, every agent is automatically wrapped as a `DBOSAgent`, checkpointing key interactions (including agent inputs, LLM responses, MCP calls, and tool calls) in a database for durability and recovery.
181
+
182
+ You can toggle DBOS via either of these options:
183
+
184
+ - CLI config (persists): `/set enable_dbos false` to disable (enabled by default)
185
+
186
+
187
+ Config takes precedence if set; otherwise the environment variable is used.
188
+
189
+ ### Configuration
190
+
191
+ The following environment variables control DBOS behavior:
192
+ - `DBOS_CONDUCTOR_KEY`: If set, Code Puppy connects to the [DBOS Management Console](https://console.dbos.dev/). Make sure you first register an app named `dbos-code-puppy` on the console to generate a Conductor key. Default: `None`.
193
+ - `DBOS_LOG_LEVEL`: Logging verbosity: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, or `DEBUG`. Default: `ERROR`.
194
+ - `DBOS_SYSTEM_DATABASE_URL`: Database URL used by DBOS. Can point to a local SQLite file or a Postgres instance. Example: `postgresql://postgres:dbos@localhost:5432/postgres`. Default: `dbos_store.sqlite` file in the config directory.
195
+ - `DBOS_APP_VERSION`: If set, Code Puppy uses it as the [DBOS application version](https://docs.dbos.dev/architecture#application-and-workflow-versions) and automatically tries to recover pending workflows for this version. Default: Code Puppy version + Unix timestamp in millisecond (disable automatic recovery).
196
+
197
+ ### Custom Commands
198
+ Create markdown files in `.claude/commands/`, `.github/prompts/`, or `.agents/commands/` to define custom slash commands. The filename becomes the command name and the content runs as a prompt.
199
+
200
+ ```bash
201
+ # Create a custom command
202
+ echo "# Code Review
203
+
204
+ Please review this code for security issues." > .claude/commands/review.md
205
+
206
+ # Use it in Code Puppy
207
+ /review with focus on authentication
208
+ ```
209
+
210
+ ## Requirements
211
+
212
+ - Python 3.11+
213
+ - OpenAI API key (for GPT models)
214
+ - Gemini API key (for Google's Gemini models)
215
+ - Cerebras API key (for Cerebras models)
216
+ - Anthropic key (for Claude models)
217
+ - Ollama endpoint available
218
+
219
+ ## Agent Rules
220
+ We support AGENT.md files for defining coding standards and styles that your code should comply with. These rules can cover various aspects such as formatting, naming conventions, and even design guidelines.
221
+
222
+ For examples and more information about agent rules, visit [https://agent.md](https://agent.md)
223
+
224
+ ## Using MCP Servers for External Tools
225
+
226
+ Use the `/mcp` command to manage MCP (list, start, stop, status, etc.)
227
+
228
+ ## Round Robin Model Distribution
229
+
230
+ Code Puppy supports **Round Robin model distribution** to help you overcome rate limits and distribute load across multiple AI models. This feature automatically cycles through configured models with each request, maximizing your API usage while staying within rate limits.
231
+
232
+ ### Configuration
233
+ Add a round-robin model configuration to your `~/.code_puppy/extra_models.json` file:
234
+
235
+ ```bash
236
+ export CEREBRAS_API_KEY1=csk-...
237
+ export CEREBRAS_API_KEY2=csk-...
238
+ export CEREBRAS_API_KEY3=csk-...
239
+
240
+ ```
241
+
242
+ ```json
243
+ {
244
+ "qwen1": {
245
+ "type": "cerebras",
246
+ "name": "qwen-3-coder-480b",
247
+ "custom_endpoint": {
248
+ "url": "https://api.cerebras.ai/v1",
249
+ "api_key": "$CEREBRAS_API_KEY1"
250
+ },
251
+ "context_length": 131072
252
+ },
253
+ "qwen2": {
254
+ "type": "cerebras",
255
+ "name": "qwen-3-coder-480b",
256
+ "custom_endpoint": {
257
+ "url": "https://api.cerebras.ai/v1",
258
+ "api_key": "$CEREBRAS_API_KEY2"
259
+ },
260
+ "context_length": 131072
261
+ },
262
+ "qwen3": {
263
+ "type": "cerebras",
264
+ "name": "qwen-3-coder-480b",
265
+ "custom_endpoint": {
266
+ "url": "https://api.cerebras.ai/v1",
267
+ "api_key": "$CEREBRAS_API_KEY3"
268
+ },
269
+ "context_length": 131072
270
+ },
271
+ "cerebras_round_robin": {
272
+ "type": "round_robin",
273
+ "models": ["qwen1", "qwen2", "qwen3"],
274
+ "rotate_every": 5
275
+ }
276
+ }
277
+ ```
278
+
279
+ Then just use /model and tab to select your round-robin model!
280
+
281
+ The `rotate_every` parameter controls how many requests are made to each model before rotating to the next one. In this example, the round-robin model will use each Qwen model for 5 consecutive requests before moving to the next model in the sequence.
282
+
283
+ ---
284
+
285
+ ## Create your own Agent!!!
286
+
287
+ Code Puppy features a flexible agent system that allows you to work with specialized AI assistants tailored for different coding tasks. The system supports both built-in Python agents and custom JSON agents that you can create yourself.
288
+
289
+ ## Quick Start
290
+
291
+ ### Check Current Agent
292
+ ```bash
293
+ /agent
294
+ ```
295
+ Shows current active agent and all available agents
296
+
297
+ ### Switch Agent
298
+ ```bash
299
+ /agent <agent-name>
300
+ ```
301
+ Switches to the specified agent
302
+
303
+ ### Create New Agent
304
+ ```bash
305
+ /agent agent-creator
306
+ ```
307
+ Switches to the Agent Creator for building custom agents
308
+
309
+ ### Truncate Message History
310
+ ```bash
311
+ /truncate <N>
312
+ ```
313
+ Truncates the message history to keep only the N most recent messages while protecting the first (system) message. For example:
314
+ ```bash
315
+ /truncate 20
316
+ ```
317
+ Would keep the system message plus the 19 most recent messages, removing older ones from the history.
318
+
319
+ This is useful for managing context length when you have a long conversation history but only need the most recent interactions.
320
+
321
+ ## Available Agents
322
+
323
+ ### Code-Puppy 🐶 (Default)
324
+ - **Name**: `code-puppy`
325
+ - **Specialty**: General-purpose coding assistant
326
+ - **Personality**: Playful, sarcastic, pedantic about code quality
327
+ - **Tools**: Full access to all tools
328
+ - **Best for**: All coding tasks, file management, execution
329
+ - **Principles**: Clean, concise code following YAGNI, SRP, DRY principles
330
+ - **File limit**: Max 600 lines per file (enforced!)
331
+
332
+ ### Agent Creator 🏗️
333
+ - **Name**: `agent-creator`
334
+ - **Specialty**: Creating custom JSON agent configurations
335
+ - **Tools**: File operations, reasoning
336
+ - **Best for**: Building new specialized agents
337
+ - **Features**: Schema validation, guided creation process
338
+
339
+ ## Agent Types
340
+
341
+ ### Python Agents
342
+ Built-in agents implemented in Python with full system integration:
343
+ - Discovered automatically from `code_puppy/agents/` directory
344
+ - Inherit from `BaseAgent` class
345
+ - Full access to system internals
346
+ - Examples: `code-puppy`, `agent-creator`
347
+
348
+ ### JSON Agents
349
+ User-created agents defined in JSON files:
350
+ - Stored in user's agents directory
351
+ - Easy to create, share, and modify
352
+ - Schema-validated configuration
353
+ - Custom system prompts and tool access
354
+
355
+ ## Creating Custom JSON Agents
356
+
357
+ ### Using Agent Creator (Recommended)
358
+
359
+ 1. **Switch to Agent Creator**:
360
+ ```bash
361
+ /agent agent-creator
362
+ ```
363
+
364
+ 2. **Request agent creation**:
365
+ ```
366
+ I want to create a Python tutor agent
367
+ ```
368
+
369
+ 3. **Follow guided process** to define:
370
+ - Name and description
371
+ - Available tools
372
+ - System prompt and behavior
373
+ - Custom settings
374
+
375
+ 4. **Test your new agent**:
376
+ ```bash
377
+ /agent your-new-agent-name
378
+ ```
379
+
380
+ ### Manual JSON Creation
381
+
382
+ Create JSON files in your agents directory following this schema:
383
+
384
+ ```json
385
+ {
386
+ "name": "agent-name", // REQUIRED: Unique identifier (kebab-case)
387
+ "display_name": "Agent Name 🤖", // OPTIONAL: Pretty name with emoji
388
+ "description": "What this agent does", // REQUIRED: Clear description
389
+ "system_prompt": "Instructions...", // REQUIRED: Agent instructions
390
+ "tools": ["tool1", "tool2"], // REQUIRED: Array of tool names
391
+ "user_prompt": "How can I help?", // OPTIONAL: Custom greeting
392
+ "tools_config": { // OPTIONAL: Tool configuration
393
+ "timeout": 60
394
+ }
395
+ }
396
+ ```
397
+
398
+ #### Required Fields
399
+ - **`name`**: Unique identifier (kebab-case, no spaces)
400
+ - **`description`**: What the agent does
401
+ - **`system_prompt`**: Agent instructions (string or array)
402
+ - **`tools`**: Array of available tool names
403
+
404
+ #### Optional Fields
405
+ - **`display_name`**: Pretty display name (defaults to title-cased name + 🤖)
406
+ - **`user_prompt`**: Custom user greeting
407
+ - **`tools_config`**: Tool configuration object
408
+
409
+ ## Available Tools
410
+
411
+ Agents can access these tools based on their configuration:
412
+
413
+ - **`list_files`**: Directory and file listing
414
+ - **`read_file`**: File content reading
415
+ - **`grep`**: Text search across files
416
+ - **`create_file`**: Create new files or overwrite existing ones
417
+ - **`replace_in_file`**: Targeted text replacements in existing files
418
+ - **`delete_snippet`**: Remove a text snippet from a file
419
+ - **`delete_file`**: File deletion
420
+ - **`agent_run_shell_command`**: Shell command execution
421
+ - **`agent_share_your_reasoning`**: Share reasoning with user
422
+
423
+ ### Tool Access Examples
424
+ - **Read-only agent**: `["list_files", "read_file", "grep"]`
425
+ - **File editor agent**: `["list_files", "read_file", "create_file", "replace_in_file"]`
426
+ - **Full access agent**: All tools (like Code-Puppy)
427
+
428
+ ## System Prompt Formats
429
+
430
+ ### String Format
431
+ ```json
432
+ {
433
+ "system_prompt": "You are a helpful coding assistant that specializes in Python development."
434
+ }
435
+ ```
436
+
437
+ ### Array Format (Recommended)
438
+ ```json
439
+ {
440
+ "system_prompt": [
441
+ "You are a helpful coding assistant.",
442
+ "You specialize in Python development.",
443
+ "Always provide clear explanations.",
444
+ "Include practical examples in your responses."
445
+ ]
446
+ }
447
+ ```
448
+
449
+ ## Example JSON Agents
450
+
451
+ ### Python Tutor
452
+ ```json
453
+ {
454
+ "name": "python-tutor",
455
+ "display_name": "Python Tutor 🐍",
456
+ "description": "Teaches Python programming concepts with examples",
457
+ "system_prompt": [
458
+ "You are a patient Python programming tutor.",
459
+ "You explain concepts clearly with practical examples.",
460
+ "You help beginners learn Python step by step.",
461
+ "Always encourage learning and provide constructive feedback."
462
+ ],
463
+ "tools": ["read_file", "create_file", "replace_in_file", "agent_share_your_reasoning"],
464
+ "user_prompt": "What Python concept would you like to learn today?"
465
+ }
466
+ ```
467
+
468
+ ### Code Reviewer
469
+ ```json
470
+ {
471
+ "name": "code-reviewer",
472
+ "display_name": "Code Reviewer 🔍",
473
+ "description": "Reviews code for best practices, bugs, and improvements",
474
+ "system_prompt": [
475
+ "You are a senior software engineer doing code reviews.",
476
+ "You focus on code quality, security, and maintainability.",
477
+ "You provide constructive feedback with specific suggestions.",
478
+ "You follow language-specific best practices and conventions."
479
+ ],
480
+ "tools": ["list_files", "read_file", "grep", "agent_share_your_reasoning"],
481
+ "user_prompt": "Which code would you like me to review?"
482
+ }
483
+ ```
484
+
485
+ ### DevOps Helper
486
+ ```json
487
+ {
488
+ "name": "devops-helper",
489
+ "display_name": "DevOps Helper ⚙️",
490
+ "description": "Helps with Docker, CI/CD, and deployment tasks",
491
+ "system_prompt": [
492
+ "You are a DevOps engineer specialized in containerization and CI/CD.",
493
+ "You help with Docker, Kubernetes, GitHub Actions, and deployment.",
494
+ "You provide practical, production-ready solutions.",
495
+ "You always consider security and best practices."
496
+ ],
497
+ "tools": [
498
+ "list_files",
499
+ "read_file",
500
+ "create_file",
501
+ "replace_in_file",
502
+ "agent_run_shell_command",
503
+ "agent_share_your_reasoning"
504
+ ],
505
+ "user_prompt": "What DevOps task can I help you with today?"
506
+ }
507
+ ```
508
+
509
+ ## File Locations
510
+
511
+ ### JSON Agents Directory
512
+ - **All platforms**: `~/.code_puppy/agents/`
513
+
514
+ ### Python Agents Directory
515
+ - **Built-in**: `code_puppy/agents/` (in package)
516
+
517
+ ## Best Practices
518
+
519
+ ### Naming
520
+ - Use kebab-case (hyphens, not spaces)
521
+ - Be descriptive: "python-tutor" not "tutor"
522
+ - Avoid special characters
523
+
524
+ ### System Prompts
525
+ - Be specific about the agent's role
526
+ - Include personality traits
527
+ - Specify output format preferences
528
+ - Use array format for multi-line prompts
529
+
530
+ ### Tool Selection
531
+ - Only include tools the agent actually needs
532
+ - Most agents need `agent_share_your_reasoning`
533
+ - File manipulation agents need `read_file`, `create_file`, `replace_in_file`
534
+ - Note: `"edit_file"` still works in tool lists (auto-expands to the three individual tools)
535
+ - Research agents need `grep`, `list_files`
536
+
537
+ ### Display Names
538
+ - Include relevant emoji for personality
539
+ - Make it friendly and recognizable
540
+ - Keep it concise
541
+
542
+ ## System Architecture
543
+
544
+ ### Agent Discovery
545
+ The system automatically discovers agents by:
546
+ 1. **Python Agents**: Scanning `code_puppy/agents/` for classes inheriting from `BaseAgent`
547
+ 2. **JSON Agents**: Scanning user's agents directory for `*-agent.json` files
548
+ 3. Instantiating and registering discovered agents
549
+
550
+ ### JSONAgent Implementation
551
+ JSON agents are powered by the `JSONAgent` class (`code_puppy/agents/json_agent.py`):
552
+ - Inherits from `BaseAgent` for full system integration
553
+ - Loads configuration from JSON files with robust validation
554
+ - Supports all BaseAgent features (tools, prompts, settings)
555
+ - Cross-platform user directory support
556
+ - Built-in error handling and schema validation
557
+
558
+ ### BaseAgent Interface
559
+ Both Python and JSON agents implement this interface:
560
+ - `name`: Unique identifier
561
+ - `display_name`: Human-readable name with emoji
562
+ - `description`: Brief description of purpose
563
+ - `get_system_prompt()`: Returns agent-specific system prompt
564
+ - `get_available_tools()`: Returns list of tool names
565
+
566
+ ### Agent Manager Integration
567
+ The `agent_manager.py` provides:
568
+ - Unified registry for both Python and JSON agents
569
+ - Seamless switching between agent types
570
+ - Configuration persistence across sessions
571
+ - Automatic caching for performance
572
+
573
+ ### System Integration
574
+ - **Command Interface**: `/agent` command works with all agent types
575
+ - **Tool Filtering**: Dynamic tool access control per agent
576
+ - **Main Agent System**: Loads and manages both agent types
577
+ - **Cross-Platform**: Consistent behavior across all platforms
578
+
579
+ ## Adding Python Agents
580
+
581
+ To create a new Python agent:
582
+
583
+ 1. Create file in `code_puppy/agents/` (e.g., `my_agent.py`)
584
+ 2. Implement class inheriting from `BaseAgent`
585
+ 3. Define required properties and methods
586
+ 4. Agent will be automatically discovered
587
+
588
+ Example implementation:
589
+
590
+ ```python
591
+ from .base_agent import BaseAgent
592
+
593
+ class MyCustomAgent(BaseAgent):
594
+ @property
595
+ def name(self) -> str:
596
+ return "my-agent"
597
+
598
+ @property
599
+ def display_name(self) -> str:
600
+ return "My Custom Agent ✨"
601
+
602
+ @property
603
+ def description(self) -> str:
604
+ return "A custom agent for specialized tasks"
605
+
606
+ def get_system_prompt(self) -> str:
607
+ return "Your custom system prompt here..."
608
+
609
+ def get_available_tools(self) -> list[str]:
610
+ return [
611
+ "list_files",
612
+ "read_file",
613
+ "grep",
614
+ "create_file",
615
+ "replace_in_file",
616
+ "delete_snippet",
617
+ "delete_file",
618
+ "agent_run_shell_command",
619
+ "agent_share_your_reasoning"
620
+ ]
621
+ ```
622
+
623
+ ## Troubleshooting
624
+
625
+ ### Agent Not Found
626
+ - Ensure JSON file is in correct directory
627
+ - Check JSON syntax is valid
628
+ - Restart Code Puppy or clear agent cache
629
+ - Verify filename ends with `-agent.json`
630
+
631
+ ### Validation Errors
632
+ - Use Agent Creator for guided validation
633
+ - Check all required fields are present
634
+ - Verify tool names are correct
635
+ - Ensure name uses kebab-case
636
+
637
+ ### Permission Issues
638
+ - Make sure agents directory is writable
639
+ - Check file permissions on JSON files
640
+ - Verify directory path exists
641
+
642
+ ## Advanced Features
643
+
644
+ ### Tool Configuration
645
+ ```json
646
+ {
647
+ "tools_config": {
648
+ "timeout": 120,
649
+ "max_retries": 3
650
+ }
651
+ }
652
+ ```
653
+
654
+ ### Multi-line System Prompts
655
+ ```json
656
+ {
657
+ "system_prompt": [
658
+ "Line 1 of instructions",
659
+ "Line 2 of instructions",
660
+ "Line 3 of instructions"
661
+ ]
662
+ }
663
+ ```
664
+
665
+ ## Future Extensibility
666
+
667
+ The agent system supports future expansion:
668
+
669
+ - **Specialized Agents**: Code reviewers, debuggers, architects
670
+ - **Domain-Specific Agents**: Web dev, data science, DevOps, mobile
671
+ - **Personality Variations**: Different communication styles
672
+ - **Context-Aware Agents**: Adapt based on project type
673
+ - **Team Agents**: Shared configurations for coding standards
674
+ - **Plugin System**: Community-contributed agents
675
+
676
+ ## Benefits of JSON Agents
677
+
678
+ 1. **Easy Customization**: Create agents without Python knowledge
679
+ 2. **Team Sharing**: JSON agents can be shared across teams
680
+ 3. **Rapid Prototyping**: Quick agent creation for specific workflows
681
+ 4. **Version Control**: JSON agents are git-friendly
682
+ 5. **Built-in Validation**: Schema validation with helpful error messages
683
+ 6. **Cross-Platform**: Works consistently across all platforms
684
+ 7. **Backward Compatible**: Doesn't affect existing Python agents
685
+
686
+ ## Implementation Details
687
+
688
+ ### Files in System
689
+ - **Core Implementation**: `code_puppy/agents/json_agent.py`
690
+ - **Agent Discovery**: Integrated in `code_puppy/agents/agent_manager.py`
691
+ - **Command Interface**: Works through existing `/agent` command
692
+ - **Testing**: Comprehensive test suite in `tests/test_json_agents.py`
693
+
694
+ ### JSON Agent Loading Process
695
+ 1. System scans `~/.code_puppy/agents/` for `*-agent.json` files
696
+ 2. `JSONAgent` class loads and validates each JSON configuration
697
+ 3. Agents are registered in unified agent registry
698
+ 4. Users can switch to JSON agents via `/agent <name>` command
699
+ 5. Tool access and system prompts work identically to Python agents
700
+
701
+ ### Error Handling
702
+ - Invalid JSON syntax: Clear error messages with line numbers
703
+ - Missing required fields: Specific field validation errors
704
+ - Invalid tool names: Warning with list of available tools
705
+ - File permission issues: Helpful troubleshooting guidance
706
+
707
+ ## Future Possibilities
708
+
709
+ - **Agent Templates**: Pre-built JSON agents for common tasks
710
+ - **Visual Editor**: GUI for creating JSON agents
711
+ - **Hot Reloading**: Update agents without restart
712
+ - **Agent Marketplace**: Share and discover community agents
713
+ - **Enhanced Validation**: More sophisticated schema validation
714
+ - **Team Agents**: Shared configurations for coding standards
715
+
716
+ ## Contributing
717
+
718
+ ### Sharing JSON Agents
719
+ 1. Create and test your agent thoroughly
720
+ 2. Ensure it follows best practices
721
+ 3. Submit a pull request with agent JSON
722
+ 4. Include documentation and examples
723
+ 5. Test across different platforms
724
+
725
+ ### Python Agent Contributions
726
+ 1. Follow existing code style
727
+ 2. Include comprehensive tests
728
+ 3. Document the agent's purpose and usage
729
+ 4. Submit pull request for review
730
+ 5. Ensure backward compatibility
731
+
732
+ ### Agent Templates
733
+ Consider contributing agent templates for:
734
+ - Code reviewers and auditors
735
+ - Language-specific tutors
736
+ - DevOps and deployment helpers
737
+ - Documentation writers
738
+ - Testing specialists
739
+
740
+ ---
741
+
742
+ # Code Puppy Privacy Commitment
743
+
744
+ **Zero-compromise privacy policy. Always.**
745
+
746
+ Unlike other Agentic Coding software, there is no corporate or investor backing for this project, which means **zero pressure to compromise our principles for profit**. This isn't just a nice-to-have feature – it's fundamental to the project's DNA.
747
+
748
+ ### What Code Puppy _absolutely does not_ collect:
749
+ - ❌ **Zero telemetry** – no usage analytics, crash reports, or behavioral tracking
750
+ - ❌ **Zero prompt logging** – your code, conversations, or project details are never stored
751
+ - ❌ **Zero behavioral profiling** – we don't track what you build, how you code, or when you use the tool
752
+ - ❌ **Zero third-party data sharing** – your information is never sold, traded, or given away
753
+
754
+ ### What data flows where:
755
+ - **LLM Provider Communication**: Your prompts are sent directly to whichever LLM provider you've configured (OpenAI, Anthropic, local models, etc.) – this is unavoidable for AI functionality
756
+ - **Complete Local Option**: Run your own VLLM/SGLang/Llama.cpp server locally → **zero data leaves your network**. Configure this with `~/.code_puppy/extra_models.json`
757
+ - **Direct Developer Contact**: All feature requests, bug reports, and discussions happen directly with me – no middleman analytics platforms or customer data harvesting tools
758
+
759
+ ### Our privacy-first architecture:
760
+ Code Puppy is designed with privacy-by-design principles. Every feature has been evaluated through a privacy lens, and every integration respects user data sovereignty. When you use Code Puppy, you're not the product – you're just a developer getting things done.
761
+
762
+ **This commitment is enforceable because it's structurally impossible to violate it.** No external pressures, no investor demands, no quarterly earnings targets to hit. Just solid code that respects your privacy.
763
+
764
+ ## License
765
+
766
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.