code-muse 0.0.1__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 (394) hide show
  1. code_muse/__init__.py +26 -0
  2. code_muse/__main__.py +10 -0
  3. code_muse/agents/__init__.py +31 -0
  4. code_muse/agents/_builder.py +214 -0
  5. code_muse/agents/_compaction.py +506 -0
  6. code_muse/agents/_diagnostics.py +171 -0
  7. code_muse/agents/_history.py +382 -0
  8. code_muse/agents/_key_listeners.py +148 -0
  9. code_muse/agents/_non_streaming_render.py +148 -0
  10. code_muse/agents/_runtime.py +596 -0
  11. code_muse/agents/agent_creator_agent.py +603 -0
  12. code_muse/agents/agent_helios.py +47 -0
  13. code_muse/agents/agent_manager.py +740 -0
  14. code_muse/agents/agent_muse.py +78 -0
  15. code_muse/agents/agent_planning.py +44 -0
  16. code_muse/agents/agent_qa_melpomene.py +207 -0
  17. code_muse/agents/base_agent.py +194 -0
  18. code_muse/agents/event_stream_handler.py +361 -0
  19. code_muse/agents/json_agent.py +201 -0
  20. code_muse/agents/prompt_v3.py +521 -0
  21. code_muse/agents/subagent_stream_handler.py +273 -0
  22. code_muse/callbacks.py +941 -0
  23. code_muse/chatgpt_codex_client.py +333 -0
  24. code_muse/claude_cache_client.py +853 -0
  25. code_muse/cli_runner/__init__.py +319 -0
  26. code_muse/cli_runner/args.py +63 -0
  27. code_muse/cli_runner/loop.py +510 -0
  28. code_muse/cli_runner/resume.py +72 -0
  29. code_muse/cli_runner/runner.py +161 -0
  30. code_muse/command_line/__init__.py +1 -0
  31. code_muse/command_line/add_model_menu.py +1331 -0
  32. code_muse/command_line/agent_menu.py +674 -0
  33. code_muse/command_line/attachments.py +397 -0
  34. code_muse/command_line/autosave_menu.py +709 -0
  35. code_muse/command_line/clipboard.py +528 -0
  36. code_muse/command_line/colors_menu.py +530 -0
  37. code_muse/command_line/command_handler.py +262 -0
  38. code_muse/command_line/command_registry.py +150 -0
  39. code_muse/command_line/config_commands.py +711 -0
  40. code_muse/command_line/core_commands.py +740 -0
  41. code_muse/command_line/diff_menu.py +865 -0
  42. code_muse/command_line/file_path_completion.py +73 -0
  43. code_muse/command_line/load_context_completion.py +57 -0
  44. code_muse/command_line/model_picker_completion.py +512 -0
  45. code_muse/command_line/model_settings_menu.py +983 -0
  46. code_muse/command_line/onboarding_slides.py +162 -0
  47. code_muse/command_line/onboarding_wizard.py +337 -0
  48. code_muse/command_line/pagination.py +41 -0
  49. code_muse/command_line/pin_command_completion.py +329 -0
  50. code_muse/command_line/prompt_toolkit_completion.py +886 -0
  51. code_muse/command_line/session_commands.py +304 -0
  52. code_muse/command_line/shell_passthrough.py +145 -0
  53. code_muse/command_line/skills_completion.py +158 -0
  54. code_muse/command_line/types.py +18 -0
  55. code_muse/command_line/uc_menu.py +908 -0
  56. code_muse/command_line/utils.py +105 -0
  57. code_muse/command_line/wiggum_state.py +77 -0
  58. code_muse/config.py +1138 -0
  59. code_muse/config_agent.py +168 -0
  60. code_muse/config_appearance.py +241 -0
  61. code_muse/config_model.py +357 -0
  62. code_muse/config_security.py +73 -0
  63. code_muse/error_logging.py +132 -0
  64. code_muse/evals/__init__.py +35 -0
  65. code_muse/evals/eval_helpers.py +81 -0
  66. code_muse/evals/eval_runner.py +299 -0
  67. code_muse/evals/sample_evals/__init__.py +1 -0
  68. code_muse/evals/sample_evals/eval_frugal_reads.py +59 -0
  69. code_muse/evals/sample_evals/eval_memory_planning.py +31 -0
  70. code_muse/evals/sample_evals/eval_shell_efficiency.py +39 -0
  71. code_muse/evals/sample_evals/eval_tool_masking.py +33 -0
  72. code_muse/fs_scan_cache/__init__.py +31 -0
  73. code_muse/fs_scan_cache/invalidation_hooks.py +89 -0
  74. code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
  75. code_muse/fs_scan_cache/scan_cache_core.pyx +203 -0
  76. code_muse/fs_scan_cache/tool_integration.py +309 -0
  77. code_muse/fs_scan_cache/ttl_policy.py +44 -0
  78. code_muse/gemini_code_assist.py +383 -0
  79. code_muse/gemini_model.py +838 -0
  80. code_muse/hook_engine/README.md +105 -0
  81. code_muse/hook_engine/__init__.py +21 -0
  82. code_muse/hook_engine/aliases.py +153 -0
  83. code_muse/hook_engine/engine.py +221 -0
  84. code_muse/hook_engine/executor.py +347 -0
  85. code_muse/hook_engine/matcher.py +154 -0
  86. code_muse/hook_engine/models.py +245 -0
  87. code_muse/hook_engine/registry.py +114 -0
  88. code_muse/hook_engine/trust.py +268 -0
  89. code_muse/hook_engine/validator.py +144 -0
  90. code_muse/http_utils.py +360 -0
  91. code_muse/keymap.py +128 -0
  92. code_muse/list_filtering.py +26 -0
  93. code_muse/main.py +10 -0
  94. code_muse/messaging/__init__.py +259 -0
  95. code_muse/messaging/bus.py +621 -0
  96. code_muse/messaging/commands.py +166 -0
  97. code_muse/messaging/markdown_patches.py +57 -0
  98. code_muse/messaging/message_queue.py +397 -0
  99. code_muse/messaging/messages.py +591 -0
  100. code_muse/messaging/queue_console.py +269 -0
  101. code_muse/messaging/renderers.py +308 -0
  102. code_muse/messaging/rich_renderer.py +1158 -0
  103. code_muse/messaging/shimmer.py +154 -0
  104. code_muse/messaging/spinner/__init__.py +87 -0
  105. code_muse/messaging/spinner/console_spinner.py +250 -0
  106. code_muse/messaging/spinner/spinner_base.py +82 -0
  107. code_muse/messaging/subagent_console.py +458 -0
  108. code_muse/model_factory.py +1203 -0
  109. code_muse/model_switching.py +59 -0
  110. code_muse/model_utils.py +156 -0
  111. code_muse/models.json +66 -0
  112. code_muse/models_cache/__init__.py +26 -0
  113. code_muse/models_cache/blocking_lru_cache.py +98 -0
  114. code_muse/models_cache/cache_writer.py +86 -0
  115. code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
  116. code_muse/models_cache/sha256_hash.pyx +34 -0
  117. code_muse/models_cache/startup_integration.py +75 -0
  118. code_muse/models_dev_api.json +1 -0
  119. code_muse/models_dev_parser.py +590 -0
  120. code_muse/motion.py +126 -0
  121. code_muse/plugins/__init__.py +471 -0
  122. code_muse/plugins/agent_skills/__init__.py +32 -0
  123. code_muse/plugins/agent_skills/config.py +176 -0
  124. code_muse/plugins/agent_skills/discovery.py +309 -0
  125. code_muse/plugins/agent_skills/downloader.py +389 -0
  126. code_muse/plugins/agent_skills/installer.py +19 -0
  127. code_muse/plugins/agent_skills/metadata.py +293 -0
  128. code_muse/plugins/agent_skills/prompt_builder.py +66 -0
  129. code_muse/plugins/agent_skills/register_callbacks.py +298 -0
  130. code_muse/plugins/agent_skills/remote_catalog.py +320 -0
  131. code_muse/plugins/agent_skills/skill_catalog.py +254 -0
  132. code_muse/plugins/agent_skills/skills_install_menu.py +690 -0
  133. code_muse/plugins/agent_skills/skills_menu.py +791 -0
  134. code_muse/plugins/autonomous_memory/__init__.py +39 -0
  135. code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
  136. code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
  137. code_muse/plugins/autonomous_memory/bm25_scorer.pyx +291 -0
  138. code_muse/plugins/autonomous_memory/consolidation.py +82 -0
  139. code_muse/plugins/autonomous_memory/extraction.py +382 -0
  140. code_muse/plugins/autonomous_memory/lease_lock.py +105 -0
  141. code_muse/plugins/autonomous_memory/memory_injection.py +59 -0
  142. code_muse/plugins/autonomous_memory/register_callbacks.py +268 -0
  143. code_muse/plugins/autonomous_memory/secret_scanner.py +62 -0
  144. code_muse/plugins/autonomous_memory/session_scanner.py +163 -0
  145. code_muse/plugins/aws_bedrock/__init__.py +14 -0
  146. code_muse/plugins/aws_bedrock/config.py +99 -0
  147. code_muse/plugins/aws_bedrock/register_callbacks.py +241 -0
  148. code_muse/plugins/aws_bedrock/utils.py +153 -0
  149. code_muse/plugins/azure_foundry/README.md +238 -0
  150. code_muse/plugins/azure_foundry/__init__.py +15 -0
  151. code_muse/plugins/azure_foundry/config.py +125 -0
  152. code_muse/plugins/azure_foundry/discovery.py +187 -0
  153. code_muse/plugins/azure_foundry/register_callbacks.py +495 -0
  154. code_muse/plugins/azure_foundry/token.py +180 -0
  155. code_muse/plugins/azure_foundry/utils.py +345 -0
  156. code_muse/plugins/build_filter/__init__.py +1 -0
  157. code_muse/plugins/build_filter/register_callbacks.py +201 -0
  158. code_muse/plugins/build_filter/strategies/__init__.py +1 -0
  159. code_muse/plugins/build_filter/strategies/build.py +397 -0
  160. code_muse/plugins/chatgpt_oauth/__init__.py +6 -0
  161. code_muse/plugins/chatgpt_oauth/config.py +52 -0
  162. code_muse/plugins/chatgpt_oauth/oauth_flow.py +338 -0
  163. code_muse/plugins/chatgpt_oauth/register_callbacks.py +172 -0
  164. code_muse/plugins/chatgpt_oauth/test_plugin.py +301 -0
  165. code_muse/plugins/chatgpt_oauth/utils.py +538 -0
  166. code_muse/plugins/checkpointing/__init__.py +29 -0
  167. code_muse/plugins/checkpointing/checkpoint_hook.py +51 -0
  168. code_muse/plugins/checkpointing/conversation_snapshots.py +117 -0
  169. code_muse/plugins/checkpointing/register_callbacks.py +51 -0
  170. code_muse/plugins/checkpointing/restore_command.py +263 -0
  171. code_muse/plugins/checkpointing/rewind_shortcut.py +88 -0
  172. code_muse/plugins/checkpointing/shadow_git.py +90 -0
  173. code_muse/plugins/claude_code_hooks/__init__.py +1 -0
  174. code_muse/plugins/claude_code_hooks/config.py +188 -0
  175. code_muse/plugins/claude_code_hooks/register_callbacks.py +208 -0
  176. code_muse/plugins/claude_code_oauth/README.md +167 -0
  177. code_muse/plugins/claude_code_oauth/SETUP.md +93 -0
  178. code_muse/plugins/claude_code_oauth/__init__.py +25 -0
  179. code_muse/plugins/claude_code_oauth/config.py +52 -0
  180. code_muse/plugins/claude_code_oauth/fast_mode.py +124 -0
  181. code_muse/plugins/claude_code_oauth/prompt_handler.py +63 -0
  182. code_muse/plugins/claude_code_oauth/register_callbacks.py +547 -0
  183. code_muse/plugins/claude_code_oauth/test_fast_mode.py +165 -0
  184. code_muse/plugins/claude_code_oauth/test_plugin.py +283 -0
  185. code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +237 -0
  186. code_muse/plugins/claude_code_oauth/utils.py +664 -0
  187. code_muse/plugins/copilot_auth/__init__.py +11 -0
  188. code_muse/plugins/copilot_auth/config.py +91 -0
  189. code_muse/plugins/copilot_auth/reasoning_client.py +409 -0
  190. code_muse/plugins/copilot_auth/register_callbacks.py +461 -0
  191. code_muse/plugins/copilot_auth/utils.py +584 -0
  192. code_muse/plugins/custom_commands/__init__.py +14 -0
  193. code_muse/plugins/custom_commands/args_injection.py +82 -0
  194. code_muse/plugins/custom_commands/command_discovery.py +89 -0
  195. code_muse/plugins/custom_commands/command_toml_schema.py +71 -0
  196. code_muse/plugins/custom_commands/register_callbacks.py +176 -0
  197. code_muse/plugins/customizable_commands/__init__.py +0 -0
  198. code_muse/plugins/customizable_commands/register_callbacks.py +136 -0
  199. code_muse/plugins/destructive_command_guard/__init__.py +14 -0
  200. code_muse/plugins/destructive_command_guard/detector.py +375 -0
  201. code_muse/plugins/destructive_command_guard/register_callbacks.py +148 -0
  202. code_muse/plugins/example_custom_command/README.md +280 -0
  203. code_muse/plugins/example_custom_command/register_callbacks.py +51 -0
  204. code_muse/plugins/file_permission_handler/__init__.py +4 -0
  205. code_muse/plugins/file_permission_handler/register_callbacks.py +441 -0
  206. code_muse/plugins/filter_engine/__init__.py +30 -0
  207. code_muse/plugins/filter_engine/classifier.py +153 -0
  208. code_muse/plugins/filter_engine/content_detector.py +184 -0
  209. code_muse/plugins/filter_engine/dispatcher.py +244 -0
  210. code_muse/plugins/filter_engine/register_callbacks.py +188 -0
  211. code_muse/plugins/filter_engine/registry.py +279 -0
  212. code_muse/plugins/filter_engine/strategies/__init__.py +8 -0
  213. code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
  214. code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
  215. code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +348 -0
  216. code_muse/plugins/filter_engine/strategies/ast_parser.py +167 -0
  217. code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
  218. code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
  219. code_muse/plugins/filter_engine/strategies/code.pyx +584 -0
  220. code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
  221. code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
  222. code_muse/plugins/filter_engine/strategies/git.pyx +438 -0
  223. code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
  224. code_muse/plugins/filter_engine/strategies/json_compressor.pyx +253 -0
  225. code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
  226. code_muse/plugins/filter_engine/strategies/json_patterns.pyx +178 -0
  227. code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
  228. code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
  229. code_muse/plugins/filter_engine/strategies/lint.pyx +626 -0
  230. code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
  231. code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
  232. code_muse/plugins/filter_engine/strategies/test.pyx +431 -0
  233. code_muse/plugins/filter_engine/verbosity.py +63 -0
  234. code_muse/plugins/force_push_guard/__init__.py +5 -0
  235. code_muse/plugins/force_push_guard/detector.py +96 -0
  236. code_muse/plugins/force_push_guard/register_callbacks.py +144 -0
  237. code_muse/plugins/force_push_guard/test_detector.py +143 -0
  238. code_muse/plugins/frontend_emitter/__init__.py +25 -0
  239. code_muse/plugins/frontend_emitter/emitter.py +121 -0
  240. code_muse/plugins/frontend_emitter/register_callbacks.py +259 -0
  241. code_muse/plugins/gac/__init__.py +4 -0
  242. code_muse/plugins/gac/git_ops.py +136 -0
  243. code_muse/plugins/gac/prompt.py +191 -0
  244. code_muse/plugins/gac/register_callbacks.py +82 -0
  245. code_muse/plugins/hook_creator/__init__.py +1 -0
  246. code_muse/plugins/hook_creator/register_callbacks.py +34 -0
  247. code_muse/plugins/hook_manager/__init__.py +1 -0
  248. code_muse/plugins/hook_manager/config.py +289 -0
  249. code_muse/plugins/hook_manager/hooks_menu.py +563 -0
  250. code_muse/plugins/hook_manager/register_callbacks.py +227 -0
  251. code_muse/plugins/hook_monitor/register_callbacks.py +36 -0
  252. code_muse/plugins/mindpack/__init__.py +0 -0
  253. code_muse/plugins/mindpack/factory.py +930 -0
  254. code_muse/plugins/mindpack/judge.py +573 -0
  255. code_muse/plugins/mindpack/memory.py +100 -0
  256. code_muse/plugins/mindpack/mindpack_menu.py +1552 -0
  257. code_muse/plugins/mindpack/orchestration.py +605 -0
  258. code_muse/plugins/mindpack/register_callbacks.py +175 -0
  259. code_muse/plugins/mindpack/schemas.py +358 -0
  260. code_muse/plugins/mindpack/tools.py +387 -0
  261. code_muse/plugins/oauth_muse_html.py +226 -0
  262. code_muse/plugins/ollama_setup/__init__.py +5 -0
  263. code_muse/plugins/ollama_setup/completer.py +36 -0
  264. code_muse/plugins/ollama_setup/register_callbacks.py +410 -0
  265. code_muse/plugins/plan_command/__init__.py +0 -0
  266. code_muse/plugins/plan_command/register_callbacks.py +206 -0
  267. code_muse/plugins/plan_mode/__init__.py +37 -0
  268. code_muse/plugins/plan_mode/mode_cycling.py +40 -0
  269. code_muse/plugins/plan_mode/plan_generation.py +68 -0
  270. code_muse/plugins/plan_mode/plan_hooks.py +74 -0
  271. code_muse/plugins/plan_mode/plan_mode_tools.py +138 -0
  272. code_muse/plugins/plan_mode/register_callbacks.py +121 -0
  273. code_muse/plugins/plugin_trust/register_callbacks.py +140 -0
  274. code_muse/plugins/policy_engine/__init__.py +46 -0
  275. code_muse/plugins/policy_engine/approval_flow_integration.py +59 -0
  276. code_muse/plugins/policy_engine/policy_evaluator.py +75 -0
  277. code_muse/plugins/policy_engine/policy_file_discovery.py +90 -0
  278. code_muse/plugins/policy_engine/policy_toml_schema.py +115 -0
  279. code_muse/plugins/policy_engine/register_callbacks.py +112 -0
  280. code_muse/plugins/pop_command/__init__.py +1 -0
  281. code_muse/plugins/pop_command/register_callbacks.py +189 -0
  282. code_muse/plugins/prompt_newline/__init__.py +13 -0
  283. code_muse/plugins/prompt_newline/config.py +19 -0
  284. code_muse/plugins/prompt_newline/register_callbacks.py +159 -0
  285. code_muse/plugins/safety_status/__init__.py +0 -0
  286. code_muse/plugins/safety_status/register_callbacks.py +113 -0
  287. code_muse/plugins/semantic_compression/__init__.py +6 -0
  288. code_muse/plugins/semantic_compression/compressor.py +295 -0
  289. code_muse/plugins/semantic_compression/config.py +123 -0
  290. code_muse/plugins/semantic_compression/register_callbacks.py +320 -0
  291. code_muse/plugins/shell_minimizer/__init__.py +50 -0
  292. code_muse/plugins/shell_minimizer/builtin_filters.toml +393 -0
  293. code_muse/plugins/shell_minimizer/pipeline.py +556 -0
  294. code_muse/plugins/shell_minimizer/primitives.py +482 -0
  295. code_muse/plugins/shell_minimizer/register_callbacks.py +276 -0
  296. code_muse/plugins/shell_safety/__init__.py +6 -0
  297. code_muse/plugins/shell_safety/agent_shell_safety.py +69 -0
  298. code_muse/plugins/shell_safety/command_cache.py +149 -0
  299. code_muse/plugins/shell_safety/register_callbacks.py +202 -0
  300. code_muse/plugins/synthetic_status/__init__.py +1 -0
  301. code_muse/plugins/synthetic_status/register_callbacks.py +128 -0
  302. code_muse/plugins/synthetic_status/status_api.py +145 -0
  303. code_muse/plugins/token_caching/__init__.py +21 -0
  304. code_muse/plugins/token_caching/cache_hit_tracking.py +128 -0
  305. code_muse/plugins/token_caching/cacheable_prefix_detection.py +28 -0
  306. code_muse/plugins/token_caching/register_callbacks.py +54 -0
  307. code_muse/plugins/token_caching/stats_display.py +35 -0
  308. code_muse/plugins/token_tracking/__init__.py +26 -0
  309. code_muse/plugins/token_tracking/database.py +381 -0
  310. code_muse/plugins/token_tracking/edit_analyzer.py +97 -0
  311. code_muse/plugins/token_tracking/record.py +55 -0
  312. code_muse/plugins/token_tracking/register_callbacks.py +277 -0
  313. code_muse/plugins/token_tracking/reports.py +329 -0
  314. code_muse/plugins/universal_constructor/__init__.py +13 -0
  315. code_muse/plugins/universal_constructor/models.py +136 -0
  316. code_muse/plugins/universal_constructor/register_callbacks.py +47 -0
  317. code_muse/plugins/universal_constructor/registry.py +390 -0
  318. code_muse/plugins/universal_constructor/runner.py +474 -0
  319. code_muse/plugins/universal_constructor/safety.py +440 -0
  320. code_muse/plugins/universal_constructor/sandbox.py +584 -0
  321. code_muse/provider_identity.py +105 -0
  322. code_muse/pydantic_patches.py +410 -0
  323. code_muse/reopenable_async_client.py +233 -0
  324. code_muse/round_robin_model.py +151 -0
  325. code_muse/secret_storage.py +74 -0
  326. code_muse/security/__init__.py +1 -0
  327. code_muse/security/redaction.cpython-314-darwin.so +0 -0
  328. code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
  329. code_muse/security/redaction.pyx +135 -0
  330. code_muse/session_storage.py +565 -0
  331. code_muse/status_display.py +261 -0
  332. code_muse/stream_parser/__init__.py +76 -0
  333. code_muse/stream_parser/assistant_text_parser.py +90 -0
  334. code_muse/stream_parser/citation_parser.py +76 -0
  335. code_muse/stream_parser/inline_hidden_tag_parser.py +236 -0
  336. code_muse/stream_parser/proposed_plan_parser.py +158 -0
  337. code_muse/stream_parser/stream_text_chunk.py +23 -0
  338. code_muse/stream_parser/stream_text_parser.py +27 -0
  339. code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
  340. code_muse/stream_parser/tagged_line_parser.pyx +251 -0
  341. code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
  342. code_muse/stream_parser/utf8_stream_parser.pyx +206 -0
  343. code_muse/summarization_agent.py +308 -0
  344. code_muse/terminal_utils.cpython-314-darwin.so +0 -0
  345. code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
  346. code_muse/terminal_utils.pyx +483 -0
  347. code_muse/tools/__init__.py +459 -0
  348. code_muse/tools/agent_tools.py +613 -0
  349. code_muse/tools/ask_user_question/__init__.py +26 -0
  350. code_muse/tools/ask_user_question/constants.py +73 -0
  351. code_muse/tools/ask_user_question/demo_tui.py +55 -0
  352. code_muse/tools/ask_user_question/handler.py +232 -0
  353. code_muse/tools/ask_user_question/models.py +302 -0
  354. code_muse/tools/ask_user_question/registration.py +37 -0
  355. code_muse/tools/ask_user_question/renderers.py +336 -0
  356. code_muse/tools/ask_user_question/terminal_ui.py +327 -0
  357. code_muse/tools/ask_user_question/theme.py +156 -0
  358. code_muse/tools/ask_user_question/tui_loop.py +422 -0
  359. code_muse/tools/background_jobs.py +99 -0
  360. code_muse/tools/browser/__init__.py +37 -0
  361. code_muse/tools/browser/browser_control.py +289 -0
  362. code_muse/tools/browser/browser_interactions.py +545 -0
  363. code_muse/tools/browser/browser_locators.py +640 -0
  364. code_muse/tools/browser/browser_manager.py +376 -0
  365. code_muse/tools/browser/browser_navigation.py +251 -0
  366. code_muse/tools/browser/browser_screenshot.py +180 -0
  367. code_muse/tools/browser/browser_scripts.py +462 -0
  368. code_muse/tools/browser/browser_workflows.py +222 -0
  369. code_muse/tools/chrome_cdp/__init__.py +1070 -0
  370. code_muse/tools/chrome_cdp/register_callbacks.py +61 -0
  371. code_muse/tools/command_runner.py +1401 -0
  372. code_muse/tools/common.py +1407 -0
  373. code_muse/tools/display.py +87 -0
  374. code_muse/tools/file_modifications.py +1099 -0
  375. code_muse/tools/file_operations.py +860 -0
  376. code_muse/tools/image_tools.py +185 -0
  377. code_muse/tools/meetin_proxy/__init__.py +243 -0
  378. code_muse/tools/meetin_proxy/capture_addon.py +82 -0
  379. code_muse/tools/meetin_proxy/proxy_manager.py +326 -0
  380. code_muse/tools/meetin_proxy/register_callbacks.py +45 -0
  381. code_muse/tools/path_policy.py +219 -0
  382. code_muse/tools/skills_tools.py +586 -0
  383. code_muse/tools/subagent_context.py +158 -0
  384. code_muse/tools/tools_content.py +50 -0
  385. code_muse/tools/universal_constructor.py +965 -0
  386. code_muse/uvx_detection.py +241 -0
  387. code_muse/version_checker.py +86 -0
  388. code_muse-0.0.1.data/data/code_muse/models.json +66 -0
  389. code_muse-0.0.1.data/data/code_muse/models_dev_api.json +1 -0
  390. code_muse-0.0.1.dist-info/METADATA +845 -0
  391. code_muse-0.0.1.dist-info/RECORD +394 -0
  392. code_muse-0.0.1.dist-info/WHEEL +4 -0
  393. code_muse-0.0.1.dist-info/entry_points.txt +2 -0
  394. code_muse-0.0.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,845 @@
1
+ Metadata-Version: 2.4
2
+ Name: code-muse
3
+ Version: 0.0.1
4
+ Summary: Muse — eternal guide of creators in the arts and sciences. An elegant AI coding assistant.
5
+ Project-URL: Repository, https://github.com/asx8678/muse
6
+ Project-URL: Homepage, https://github.com/asx8678/muse
7
+ Author: Michael Pfaffenberger
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Classifier: Programming Language :: Python :: 3.15
15
+ Classifier: Topic :: Software Development :: Code Generators
16
+ Requires-Python: <3.16,>=3.14
17
+ Requires-Dist: aiofiles>=24.1.0
18
+ Requires-Dist: anthropic<1,>=0.100.0
19
+ Requires-Dist: azure-identity>=1.25.3
20
+ Requires-Dist: cython>=3.2.4
21
+ Requires-Dist: httpx[http2]>=0.28.1
22
+ Requires-Dist: json-repair>=0.59.6
23
+ Requires-Dist: mitmproxy>=11.0.0
24
+ Requires-Dist: openai>=2.36.0
25
+ Requires-Dist: pillow>=12.2.0
26
+ Requires-Dist: playwright>=1.59.0
27
+ Requires-Dist: prompt-toolkit>=3.0.52
28
+ Requires-Dist: pydantic-ai-slim[anthropic,openai]>=1.93.0
29
+ Requires-Dist: pydantic>=2.13.4
30
+ Requires-Dist: pyfiglet>=1.0.4
31
+ Requires-Dist: python-dotenv>=1.2.2
32
+ Requires-Dist: rapidfuzz>=3.14.5
33
+ Requires-Dist: rich>=15.0.0
34
+ Requires-Dist: ripgrep<16,>=14.1.0
35
+ Requires-Dist: setuptools>=82.0.1
36
+ Requires-Dist: termflow-md>=0.1.11
37
+ Requires-Dist: tree-sitter-go>=0.21.0
38
+ Requires-Dist: tree-sitter-javascript>=0.21.0
39
+ Requires-Dist: tree-sitter-python>=0.21.0
40
+ Requires-Dist: tree-sitter>=0.21.0
41
+ Requires-Dist: typer>=0.25.1
42
+ Requires-Dist: websockets>=15.0
43
+ Provides-Extra: bedrock
44
+ Requires-Dist: boto3>=1.35.0; extra == 'bedrock'
45
+ Description-Content-Type: text/markdown
46
+
47
+ <div align="center">
48
+
49
+ ![Muse Logo](code_muse.png)
50
+
51
+ **Muse — the AI code agent that makes IDEs look outdated**
52
+
53
+ [![Version](https://img.shields.io/pypi/v/code-muse?style=for-the-badge&logo=python&label=Version&color=purple)](https://pypi.org/project/code-muse/)
54
+ [![Downloads](https://img.shields.io/badge/Downloads-170k%2B-brightgreen?style=for-the-badge&logo=download)](https://pypi.org/project/code-muse/)
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/asx8678/muse/actions)
58
+ [![Tests](https://img.shields.io/badge/Tests-Passing-success?style=for-the-badge&logo=pytest)](https://github.com/asx8678/muse/tests)
59
+
60
+ [![100% Open Source](https://img.shields.io/badge/100%25-Open%20Source-blue?style=for-the-badge)](https://github.com/asx8678/muse)
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/asx8678/muse/blob/main/README.md#muse-privacy-commitment)
64
+
65
+ [![GitHub stars](https://img.shields.io/github/stars/asx8678/muse?style=for-the-badge&logo=github)](https://github.com/asx8678/muse/stargazers)
66
+ [![GitHub forks](https://img.shields.io/github/forks/asx8678/muse?style=for-the-badge&logo=github)](https://github.com/asx8678/muse/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://muse.dev)
70
+
71
+ **[⭐ Star this repo if you seek true craftsmanship! ⭐](#quick-start)**
72
+
73
+ *"Where some see complexity, Muse reveals elegant structure"* - Someone, probably.
74
+
75
+ </div>
76
+
77
+ ---
78
+
79
+
80
+
81
+ ## Overview
82
+
83
+ Muse was born from the conviction that development tools should illuminate, not imprison — freedom from vendor lock-in, not captivity to rising costs.
84
+
85
+ Muse orchestrates multiple expert agents with the grace of the nine Muses, each bringing their unique domain of wisdom to bear on your work.
86
+
87
+ Where some would harness brute force, Muse channels refined intelligence?*
88
+ - The path of inspiration is always the more rewarding one.
89
+
90
+
91
+ Muse 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-muse -i
98
+ ````
99
+
100
+ If `uvx` still starts an older cached version after a release, refresh the tool
101
+ environment:
102
+
103
+ ```bash
104
+ uvx --refresh-package code-muse code-muse -i
105
+ ```
106
+
107
+ ## 🪙 Token Savings
108
+
109
+ Muse compresses shell command output, reducing token usage by **60–90%**.
110
+
111
+ | Strategy | What it does | Savings |
112
+ |----------|--------------|---------|
113
+ | Git | Compresses status/log/diff into one-liners | ~85% |
114
+ | Test | Shows only failures + summary | ~90% |
115
+ | Lint | Groups errors by rule, not by file | ~80% |
116
+ | Code | Strips comments, trims boilerplate | ~50% |
117
+ | Read | Smart-ranged file reading | ~60% |
118
+
119
+ **Quick start:** Run `/init` in your project to get started.
120
+
121
+ See `FEATURES.md` for detailed examples of each strategy.
122
+
123
+ ## Installation
124
+
125
+ ### UV (Recommended)
126
+
127
+ #### macOS / Linux
128
+
129
+ ```bash
130
+ # Install UV if you don't have it
131
+ curl -LsSf https://astral.sh/uv/install.sh | sh
132
+
133
+ uvx code-muse
134
+ ```
135
+
136
+ #### Windows
137
+
138
+ On Windows, we recommend installing code-muse as a global tool for the best experience with keyboard shortcuts (Ctrl+C/Ctrl+X cancellation):
139
+
140
+ ```powershell
141
+ # Install UV if you don't have it (run in PowerShell as Admin)
142
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
143
+
144
+ uvx code-muse
145
+ ```
146
+
147
+
148
+ ## Changelog (By Kittylog!)
149
+
150
+ [📋 View the full changelog on Kittylog](https://kittylog.app/c/asx8678/muse)
151
+
152
+ ## Usage
153
+
154
+ ### Adding Models from models.dev 🆕
155
+
156
+ While there are several models configured right out of the box from providers like Synthetic, Cerebras, OpenAI, Google, and Anthropic, Muse integrates with [models.dev](https://models.dev) to let you browse and add models from **65+ providers** with a single command:
157
+
158
+ ```bash
159
+ /add_model
160
+ ```
161
+
162
+ This opens an interactive TUI where you can:
163
+ - **Browse providers** - See all available AI providers (OpenAI, Anthropic, Groq, Mistral, xAI, Cohere, Perplexity, DeepInfra, and many more)
164
+ - **Preview model details** - View capabilities, pricing, context length, and features
165
+ - **One-click add** - Automatically configures the model with correct endpoints and API keys
166
+
167
+ #### Live API with Offline Fallback
168
+
169
+ 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:
170
+
171
+ ```
172
+ 📡 Fetched latest models from models.dev # Live API
173
+ 📦 Using bundled models database # Offline fallback
174
+ ```
175
+
176
+ #### Supported Providers
177
+
178
+ Muse integrates with https://models.dev giving you access to 65 providers and >1000 different model offerings.
179
+
180
+ There are **39+ additional providers** that already have OpenAI-compatible APIs configured in models.dev!
181
+
182
+ These providers are automatically configured with correct OpenAI-compatible endpoints, but have **not** been tested thoroughly:
183
+
184
+ | Provider | Endpoint | API Key Env Var |
185
+ |----------|----------|----------------|
186
+ | **xAI** (Grok) | `https://api.x.ai/v1` | `XAI_API_KEY` |
187
+ | **Groq** | `https://api.groq.com/openai/v1` | `GROQ_API_KEY` |
188
+ | **Mistral** | `https://api.mistral.ai/v1` | `MISTRAL_API_KEY` |
189
+ | **Together AI** | `https://api.together.xyz/v1` | `TOGETHER_API_KEY` |
190
+ | **Perplexity** | `https://api.perplexity.ai` | `PERPLEXITY_API_KEY` |
191
+ | **DeepInfra** | `https://api.deepinfra.com/v1/openai` | `DEEPINFRA_API_KEY` |
192
+ | **Cohere** | `https://api.cohere.com/compatibility/v1` | `COHERE_API_KEY` |
193
+ | **AIHubMix** | `https://aihubmix.com/v1` | `AIHUBMIX_API_KEY` |
194
+
195
+ #### Smart Warnings
196
+
197
+ - **⚠️ Unsupported Providers** - Providers like Amazon Bedrock and Google Vertex that require special authentication are clearly marked
198
+ - **⚠️ No Tool Calling** - Models without tool calling support show a big warning since they can't use Muse's file/shell tools
199
+
200
+ ### Custom Commands
201
+ 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.
202
+
203
+ ```bash
204
+ # Create a custom command
205
+ echo "# Code Review
206
+
207
+ Please review this code for security issues." > .claude/commands/review.md
208
+
209
+ # Use it in Muse
210
+ /review with focus on authentication
211
+ ```
212
+
213
+ ## Requirements
214
+
215
+ - Python 3.11+
216
+ - OpenAI API key (for GPT models)
217
+ - Gemini API key (for Google's Gemini models)
218
+ - Cerebras API key (for Cerebras models)
219
+ - Anthropic key (for Claude models)
220
+ - Ollama endpoint available
221
+
222
+ ## Agent Rules
223
+
224
+ Muse supports `AGENTS.md` files for defining coding standards, project conventions, and behavioral guidelines that the AI should follow. These rules can cover formatting, naming conventions, architectural patterns, and project-specific instructions.
225
+
226
+ For examples and more information about agent rules, visit [https://agent.md](https://agent.md)
227
+
228
+ ### AGENTS.md Search Order
229
+
230
+ Muse loads rules from multiple locations, combining them in order:
231
+
232
+ | Priority | Location | Purpose |
233
+ |----------|----------|----------|
234
+ | 1 | `~/.muse/AGENTS.md` | Global rules (applied to all projects) |
235
+ | 2 | `.muse/AGENTS.md` | Project rules (preferred location) |
236
+ | 3 | `./AGENTS.md` | Project rules (alternate location) |
237
+
238
+ **Key behaviors:**
239
+ - Global and project rules are **combined** (global first, then project)
240
+ - `.muse/` directory takes **precedence** over project root
241
+ - All filename variants are supported: `AGENTS.md`, `AGENT.md`, `agents.md`, `agent.md`
242
+
243
+
244
+ ## Round Robin Model Distribution
245
+
246
+ Muse 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.
247
+
248
+ ### Configuration
249
+ Add a round-robin model configuration to your `~/.muse/extra_models.json` file:
250
+
251
+ ```bash
252
+ export CEREBRAS_API_KEY1=csk-...
253
+ export CEREBRAS_API_KEY2=csk-...
254
+ export CEREBRAS_API_KEY3=csk-...
255
+
256
+ ```
257
+
258
+ ```json
259
+ {
260
+ "qwen1": {
261
+ "type": "cerebras",
262
+ "name": "qwen-3-coder-480b",
263
+ "custom_endpoint": {
264
+ "url": "https://api.cerebras.ai/v1",
265
+ "api_key": "$CEREBRAS_API_KEY1"
266
+ },
267
+ "context_length": 131072
268
+ },
269
+ "qwen2": {
270
+ "type": "cerebras",
271
+ "name": "qwen-3-coder-480b",
272
+ "custom_endpoint": {
273
+ "url": "https://api.cerebras.ai/v1",
274
+ "api_key": "$CEREBRAS_API_KEY2"
275
+ },
276
+ "context_length": 131072
277
+ },
278
+ "qwen3": {
279
+ "type": "cerebras",
280
+ "name": "qwen-3-coder-480b",
281
+ "custom_endpoint": {
282
+ "url": "https://api.cerebras.ai/v1",
283
+ "api_key": "$CEREBRAS_API_KEY3"
284
+ },
285
+ "context_length": 131072
286
+ },
287
+ "cerebras_round_robin": {
288
+ "type": "round_robin",
289
+ "models": ["qwen1", "qwen2", "qwen3"],
290
+ "rotate_every": 5
291
+ }
292
+ }
293
+ ```
294
+
295
+ Then just use /model and tab to select your round-robin model!
296
+
297
+ 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.
298
+
299
+ ## Custom Model Timeouts
300
+
301
+ For custom model endpoints (`custom_openai`, `custom_anthropic`, `custom_gemini`, `cerebras`), you can configure custom timeout values to handle slow or unreliable endpoints. The default timeout for these custom endpoint models is 180 seconds.
302
+
303
+ **Note:** Other model types have different default timeouts:
304
+ - ChatGPT/Codex models: 300 seconds (5 minutes)
305
+ - Regular Anthropic models: 180 seconds
306
+ - Gemini models: 180 seconds
307
+
308
+ ### Configuration
309
+ Add a `timeout` field to your model configuration in `~/.muse/extra_models.json`:
310
+
311
+ ```json
312
+ {
313
+ "slow_model": {
314
+ "type": "custom_openai",
315
+ "name": "gpt-4",
316
+ "custom_endpoint": {
317
+ "url": "https://slow-endpoint.example.com/v1",
318
+ "api_key": "$API_KEY",
319
+ "timeout": 600
320
+ }
321
+ },
322
+ "fast_model": {
323
+ "type": "cerebras",
324
+ "name": "llama3.1-8b",
325
+ "custom_endpoint": {
326
+ "url": "https://api.cerebras.ai/v1",
327
+ "api_key": "$CEREBRAS_API_KEY"
328
+ },
329
+ "timeout": 300
330
+ }
331
+ }
332
+ ```
333
+
334
+ The `timeout` value can be specified either:
335
+ - Inside the `custom_endpoint` object (recommended for endpoint-specific timeouts)
336
+ - At the top level of the model config (affects all custom endpoint types)
337
+
338
+ Timeout values must be positive numbers (integers or floats) representing seconds. If no timeout is specified, the default 180-second timeout is used for custom endpoint models.
339
+
340
+ ---
341
+
342
+ ## Create your own Agent!!!
343
+
344
+ Muse 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.
345
+
346
+ ## Quick Start
347
+
348
+ ### Check Current Agent
349
+ ```bash
350
+ /agent
351
+ ```
352
+ Shows current active agent and all available agents
353
+
354
+ ### Switch Agent
355
+ ```bash
356
+ /agent <agent-name>
357
+ ```
358
+ Switches to the specified agent
359
+
360
+ ### Create New Agent
361
+ ```bash
362
+ /agent agent-creator
363
+ ```
364
+ Switches to the Agent Creator for building custom agents
365
+
366
+ ### Truncate Message History
367
+ ```bash
368
+ /truncate <N>
369
+ ```
370
+ Truncates the message history to keep only the N most recent messages while protecting the first (system) message. For example:
371
+ ```bash
372
+ /truncate 20
373
+ ```
374
+ Would keep the system message plus the 19 most recent messages, removing older ones from the history.
375
+
376
+ This is useful for managing context length when you have a long conversation history but only need the most recent interactions.
377
+
378
+ ## Available Agents
379
+
380
+ ### Muse (Default)
381
+ - **Name**: `muse`
382
+ - **Specialty**: General-purpose coding assistant
383
+ - **Personality**: Playful, sarcastic, pedantic about code quality
384
+ - **Tools**: Full access to all tools
385
+ - **Best for**: All coding tasks, file management, execution
386
+ - **Principles**: Clean, concise code following YAGNI, SRP, DRY principles
387
+ - **File limit**: Max 600 lines per file (enforced!)
388
+
389
+ ### Agent Creator 🏗️
390
+ - **Name**: `agent-creator`
391
+ - **Specialty**: Creating custom JSON agent configurations
392
+ - **Tools**: File operations, reasoning
393
+ - **Best for**: Building new specialized agents
394
+ - **Features**: Schema validation, guided creation process
395
+
396
+ ## Agent Types
397
+
398
+ ### Python Agents
399
+ Built-in agents implemented in Python with full system integration:
400
+ - Discovered automatically from `code_muse/agents/` directory
401
+ - Inherit from `BaseAgent` class
402
+ - Full access to system internals
403
+ - Examples: `muse`, `agent-creator`
404
+
405
+ ### JSON Agents
406
+ User-created agents defined in JSON files:
407
+ - Stored in user's agents directory
408
+ - Easy to create, share, and modify
409
+ - Schema-validated configuration
410
+ - Custom system prompts and tool access
411
+
412
+ ## Creating Custom JSON Agents
413
+
414
+ ### Using Agent Creator (Recommended)
415
+
416
+ 1. **Switch to Agent Creator**:
417
+ ```bash
418
+ /agent agent-creator
419
+ ```
420
+
421
+ 2. **Request agent creation**:
422
+ ```
423
+ I want to create a Python tutor agent
424
+ ```
425
+
426
+ 3. **Follow guided process** to define:
427
+ - Name and description
428
+ - Available tools
429
+ - System prompt and behavior
430
+ - Custom settings
431
+
432
+ 4. **Test your new agent**:
433
+ ```bash
434
+ /agent your-new-agent-name
435
+ ```
436
+
437
+ ### Manual JSON Creation
438
+
439
+ Create JSON files in your agents directory following this schema:
440
+
441
+ ```json
442
+ {
443
+ "name": "agent-name", // REQUIRED: Unique identifier (kebab-case)
444
+ "display_name": "Agent Name 🤖", // OPTIONAL: Pretty name with emoji
445
+ "description": "What this agent does", // REQUIRED: Clear description
446
+ "system_prompt": "Instructions...", // REQUIRED: Agent instructions
447
+ "tools": ["tool1", "tool2"], // REQUIRED: Array of tool names
448
+ "user_prompt": "How can I help?", // OPTIONAL: Custom greeting
449
+ "tools_config": { // OPTIONAL: Tool configuration
450
+ "timeout": 60
451
+ }
452
+ }
453
+ ```
454
+
455
+ #### Required Fields
456
+ - **`name`**: Unique identifier (kebab-case, no spaces)
457
+ - **`description`**: What the agent does
458
+ - **`system_prompt`**: Agent instructions (string or array)
459
+ - **`tools`**: Array of available tool names
460
+
461
+ #### Optional Fields
462
+ - **`display_name`**: Pretty display name (defaults to title-cased name + 🤖)
463
+ - **`user_prompt`**: Custom user greeting
464
+ - **`tools_config`**: Tool configuration object
465
+
466
+ ## Available Tools
467
+
468
+ Agents can access these tools based on their configuration:
469
+
470
+ - **`list_files`**: Directory and file listing
471
+ - **`read_file`**: File content reading
472
+ - **`grep`**: Text search across files
473
+ - **`create_file`**: Create new files or overwrite existing ones
474
+ - **`replace_in_file`**: Targeted text replacements in existing files
475
+ - **`delete_snippet`**: Remove a text snippet from a file
476
+ - **`delete_file`**: File deletion
477
+ - **`agent_run_shell_command`**: Shell command execution
478
+ - **`agent_share_your_reasoning`**: Share reasoning with user
479
+
480
+ ### Tool Access Examples
481
+ - **Read-only agent**: `["list_files", "read_file", "grep"]`
482
+ - **File editor agent**: `["list_files", "read_file", "create_file", "replace_in_file"]`
483
+ - **Full access agent**: All tools (like Muse)
484
+
485
+ ## System Prompt Formats
486
+
487
+ ### String Format
488
+ ```json
489
+ {
490
+ "system_prompt": "You are a helpful coding assistant that specializes in Python development."
491
+ }
492
+ ```
493
+
494
+ ### Array Format (Recommended)
495
+ ```json
496
+ {
497
+ "system_prompt": [
498
+ "You are a helpful coding assistant.",
499
+ "You specialize in Python development.",
500
+ "Always provide clear explanations.",
501
+ "Include practical examples in your responses."
502
+ ]
503
+ }
504
+ ```
505
+
506
+ ## Example JSON Agents
507
+
508
+ ### Python Tutor
509
+ ```json
510
+ {
511
+ "name": "python-tutor",
512
+ "display_name": "Python Tutor 🐍",
513
+ "description": "Teaches Python programming concepts with examples",
514
+ "system_prompt": [
515
+ "You are a patient Python programming tutor.",
516
+ "You explain concepts clearly with practical examples.",
517
+ "You help beginners learn Python step by step.",
518
+ "Always encourage learning and provide constructive feedback."
519
+ ],
520
+ "tools": ["read_file", "create_file", "replace_in_file", "agent_share_your_reasoning"],
521
+ "user_prompt": "What Python concept would you like to learn today?"
522
+ }
523
+ ```
524
+
525
+ ### Code Reviewer
526
+ ```json
527
+ {
528
+ "name": "code-reviewer",
529
+ "display_name": "Code Reviewer 🔍",
530
+ "description": "Reviews code for best practices, bugs, and improvements",
531
+ "system_prompt": [
532
+ "You are a senior software engineer doing code reviews.",
533
+ "You focus on code quality, security, and maintainability.",
534
+ "You provide constructive feedback with specific suggestions.",
535
+ "You follow language-specific best practices and conventions."
536
+ ],
537
+ "tools": ["list_files", "read_file", "grep", "agent_share_your_reasoning"],
538
+ "user_prompt": "Which code would you like me to review?"
539
+ }
540
+ ```
541
+
542
+ ### DevOps Helper
543
+ ```json
544
+ {
545
+ "name": "devops-helper",
546
+ "display_name": "DevOps Helper ⚙️",
547
+ "description": "Helps with Docker, CI/CD, and deployment tasks",
548
+ "system_prompt": [
549
+ "You are a DevOps engineer specialized in containerization and CI/CD.",
550
+ "You help with Docker, Kubernetes, GitHub Actions, and deployment.",
551
+ "You provide practical, production-ready solutions.",
552
+ "You always consider security and best practices."
553
+ ],
554
+ "tools": [
555
+ "list_files",
556
+ "read_file",
557
+ "create_file",
558
+ "replace_in_file",
559
+ "agent_run_shell_command",
560
+ "agent_share_your_reasoning"
561
+ ],
562
+ "user_prompt": "What DevOps task can I help you with today?"
563
+ }
564
+ ```
565
+
566
+ ## File Locations
567
+
568
+ ### JSON Agents Directory
569
+ - **All platforms**: `~/.muse/agents/`
570
+
571
+ ### Python Agents Directory
572
+ - **Built-in**: `code_muse/agents/` (in package)
573
+
574
+ ## Best Practices
575
+
576
+ ### Naming
577
+ - Use kebab-case (hyphens, not spaces)
578
+ - Be descriptive: "python-tutor" not "tutor"
579
+ - Avoid special characters
580
+
581
+ ### System Prompts
582
+ - Be specific about the agent's role
583
+ - Include personality traits
584
+ - Specify output format preferences
585
+ - Use array format for multi-line prompts
586
+
587
+ ### Tool Selection
588
+ - Only include tools the agent actually needs
589
+ - Most agents need `agent_share_your_reasoning`
590
+ - File manipulation agents need `read_file`, `create_file`, `replace_in_file`
591
+ - Note: `"edit_file"` still works in tool lists (auto-expands to the three individual tools)
592
+ - Research agents need `grep`, `list_files`
593
+
594
+ ### Display Names
595
+ - Include relevant emoji for personality
596
+ - Make it friendly and recognizable
597
+ - Keep it concise
598
+
599
+ ## System Architecture
600
+
601
+ ### Agent Discovery
602
+ The system automatically discovers agents by:
603
+ 1. **Python Agents**: Scanning `code_muse/agents/` for classes inheriting from `BaseAgent`
604
+ 2. **JSON Agents**: Scanning user's agents directory for `*-agent.json` files
605
+ 3. Instantiating and registering discovered agents
606
+
607
+ ### JSONAgent Implementation
608
+ JSON agents are powered by the `JSONAgent` class (`code_muse/agents/json_agent.py`):
609
+ - Inherits from `BaseAgent` for full system integration
610
+ - Loads configuration from JSON files with robust validation
611
+ - Supports all BaseAgent features (tools, prompts, settings)
612
+ - Cross-platform user directory support
613
+ - Built-in error handling and schema validation
614
+
615
+ ### BaseAgent Interface
616
+ Both Python and JSON agents implement this interface:
617
+ - `name`: Unique identifier
618
+ - `display_name`: Human-readable name with emoji
619
+ - `description`: Brief description of purpose
620
+ - `get_system_prompt()`: Returns agent-specific system prompt
621
+ - `get_available_tools()`: Returns list of tool names
622
+
623
+ ### Agent Manager Integration
624
+ The `agent_manager.py` provides:
625
+ - Unified registry for both Python and JSON agents
626
+ - Seamless switching between agent types
627
+ - Configuration persistence across sessions
628
+ - Automatic caching for performance
629
+
630
+ ### System Integration
631
+ - **Command Interface**: `/agent` command works with all agent types
632
+ - **Tool Filtering**: Dynamic tool access control per agent
633
+ - **Main Agent System**: Loads and manages both agent types
634
+ - **Cross-Platform**: Consistent behavior across all platforms
635
+
636
+ ## Adding Python Agents
637
+
638
+ To create a new Python agent:
639
+
640
+ 1. Create file in `code_muse/agents/` (e.g., `my_agent.py`)
641
+ 2. Implement class inheriting from `BaseAgent`
642
+ 3. Define required properties and methods
643
+ 4. Agent will be automatically discovered
644
+
645
+ Example implementation:
646
+
647
+ ```python
648
+ from .base_agent import BaseAgent
649
+
650
+ class MyCustomAgent(BaseAgent):
651
+ @property
652
+ def name(self) -> str:
653
+ return "my-agent"
654
+
655
+ @property
656
+ def display_name(self) -> str:
657
+ return "My Custom Agent ✨"
658
+
659
+ @property
660
+ def description(self) -> str:
661
+ return "A custom agent for specialized tasks"
662
+
663
+ def get_system_prompt(self) -> str:
664
+ return "Your custom system prompt here..."
665
+
666
+ def get_available_tools(self) -> list[str]:
667
+ return [
668
+ "list_files",
669
+ "read_file",
670
+ "grep",
671
+ "create_file",
672
+ "replace_in_file",
673
+ "delete_snippet",
674
+ "delete_file",
675
+ "agent_run_shell_command",
676
+ "agent_share_your_reasoning"
677
+ ]
678
+ ```
679
+
680
+ ## Troubleshooting
681
+
682
+ ### Agent Not Found
683
+ - Ensure JSON file is in correct directory
684
+ - Check JSON syntax is valid
685
+ - Restart Muse or clear agent cache
686
+ - Verify filename ends with `-agent.json`
687
+
688
+ ### Validation Errors
689
+ - Use Agent Creator for guided validation
690
+ - Check all required fields are present
691
+ - Verify tool names are correct
692
+ - Ensure name uses kebab-case
693
+
694
+ ### Permission Issues
695
+ - Make sure agents directory is writable
696
+ - Check file permissions on JSON files
697
+ - Verify directory path exists
698
+
699
+ ## Advanced Features
700
+
701
+ ### Tool Configuration
702
+ ```json
703
+ {
704
+ "tools_config": {
705
+ "timeout": 120,
706
+ "max_retries": 3
707
+ }
708
+ }
709
+ ```
710
+
711
+ ### Multi-line System Prompts
712
+ ```json
713
+ {
714
+ "system_prompt": [
715
+ "Line 1 of instructions",
716
+ "Line 2 of instructions",
717
+ "Line 3 of instructions"
718
+ ]
719
+ }
720
+ ```
721
+
722
+ ## Future Extensibility
723
+
724
+ The agent system supports future expansion:
725
+
726
+ - **Specialized Agents**: Code reviewers, debuggers, architects
727
+ - **Domain-Specific Agents**: Web dev, data science, DevOps, mobile
728
+ - **Personality Variations**: Different communication styles
729
+ - **Context-Aware Agents**: Adapt based on project type
730
+ - **Team Agents**: Shared configurations for coding standards
731
+ - **Plugin System**: Community-contributed agents
732
+
733
+ ## Benefits of JSON Agents
734
+
735
+ 1. **Easy Customization**: Create agents without Python knowledge
736
+ 2. **Team Sharing**: JSON agents can be shared across teams
737
+ 3. **Rapid Prototyping**: Quick agent creation for specific workflows
738
+ 4. **Version Control**: JSON agents are git-friendly
739
+ 5. **Built-in Validation**: Schema validation with helpful error messages
740
+ 6. **Cross-Platform**: Works consistently across all platforms
741
+ 7. **Backward Compatible**: Doesn't affect existing Python agents
742
+
743
+ ## Implementation Details
744
+
745
+ ### Files in System
746
+ - **Core Implementation**: `code_muse/agents/json_agent.py`
747
+ - **Agent Discovery**: Integrated in `code_muse/agents/agent_manager.py`
748
+ - **Command Interface**: Works through existing `/agent` command
749
+ - **Testing**: Comprehensive test suite in `tests/test_json_agents.py`
750
+
751
+ ### JSON Agent Loading Process
752
+ 1. System scans `~/.muse/agents/` for `*-agent.json` files
753
+ 2. `JSONAgent` class loads and validates each JSON configuration
754
+ 3. Agents are registered in unified agent registry
755
+ 4. Users can switch to JSON agents via `/agent <name>` command
756
+ 5. Tool access and system prompts work identically to Python agents
757
+
758
+ ### Error Handling
759
+ - Invalid JSON syntax: Clear error messages with line numbers
760
+ - Missing required fields: Specific field validation errors
761
+ - Invalid tool names: Warning with list of available tools
762
+ - File permission issues: Helpful troubleshooting guidance
763
+
764
+ ## Future Possibilities
765
+
766
+ - **Agent Templates**: Pre-built JSON agents for common tasks
767
+ - **Visual Editor**: GUI for creating JSON agents
768
+ - **Hot Reloading**: Update agents without restart
769
+ - **Agent Marketplace**: Share and discover community agents
770
+ - **Enhanced Validation**: More sophisticated schema validation
771
+ - **Team Agents**: Shared configurations for coding standards
772
+
773
+ ## Contributing
774
+
775
+ ### Releases
776
+
777
+ Maintainer release steps live in [docs/RELEASING.md](docs/RELEASING.md).
778
+
779
+ ### Sharing JSON Agents
780
+ 1. Create and test your agent thoroughly
781
+ 2. Ensure it follows best practices
782
+ 3. Submit a pull request with agent JSON
783
+ 4. Include documentation and examples
784
+ 5. Test across different platforms
785
+
786
+ ### Python Agent Contributions
787
+ 1. Follow existing code style
788
+ 2. Include comprehensive tests
789
+ 3. Document the agent's purpose and usage
790
+ 4. Submit pull request for review
791
+ 5. Ensure backward compatibility
792
+
793
+ ### Agent Templates
794
+ Consider contributing agent templates for:
795
+ - Code reviewers and auditors
796
+ - Language-specific tutors
797
+ - DevOps and deployment helpers
798
+ - Documentation writers
799
+ - Testing specialists
800
+
801
+ ---
802
+
803
+ ## Security & Trust Boundaries
804
+
805
+ Muse implements multiple safety layers to protect your secrets, filesystem, and runtime:
806
+
807
+ - **Sessions use JSON by default** — legacy pickle sessions are rejected unless explicitly imported with `--import-legacy-pickle-session` (RCE risk warning).
808
+ - **Secrets are redacted** — token files are created with `0o600`, logs scrub `Authorization: Bearer ...` and sensitive query params, and token length is never logged.
809
+ - **Shell commands require approval by default** — `yolo_mode` is off; background commands require approval before `Popen`.
810
+ - **Workspace boundaries** — file tools enforce cwd containment, block sensitive paths (`.env`, `.ssh`, etc.), and cap huge files/diffs before full read.
811
+ - **Hook trust** — project hooks from `.claude/settings.json` require explicit trust (keyed by content hash); untrusted hooks are blocked.
812
+ - **Universal Constructor safety** — user-generated tools run in a subprocess worker with JSON-only serialization, dangerous patterns (`eval`, `exec`, `subprocess`) are blocked or approval-gated, and timeouts kill the worker process.
813
+ - **Grep safety** — search patterns are passed after `--` so they are treated as data, not CLI flags.
814
+
815
+ Run `/safety` or `/status` inside Muse to see the current risk posture without exposing secrets.
816
+
817
+ For full details, see [docs/SECURITY.md](docs/SECURITY.md).
818
+
819
+ ---
820
+
821
+ # Muse Privacy Commitment
822
+
823
+ **Zero-compromise privacy policy. Always.**
824
+
825
+ 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.
826
+
827
+ ### What Muse _absolutely does not_ collect:
828
+ - ❌ **Zero telemetry** – no usage analytics, crash reports, or behavioral tracking
829
+ - ❌ **Zero prompt logging** – your code, conversations, or project details are never stored
830
+ - ❌ **Zero behavioral profiling** – we don't track what you build, how you code, or when you use the tool
831
+ - ❌ **Zero third-party data sharing** – your information is never sold, traded, or given away
832
+
833
+ ### What data flows where:
834
+ - **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
835
+ - **Complete Local Option**: Run your own VLLM/SGLang/Llama.cpp server locally → **zero data leaves your network**. Configure this with `~/.muse/extra_models.json`
836
+ - **Direct Developer Contact**: All feature requests, bug reports, and discussions happen directly with me – no middleman analytics platforms or customer data harvesting tools
837
+
838
+ ### Our privacy-first architecture:
839
+ Muse 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 Muse, you're not the product – you're just a developer getting things done.
840
+
841
+ **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.
842
+
843
+ ## License
844
+
845
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.