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.
- code_muse/__init__.py +26 -0
- code_muse/__main__.py +10 -0
- code_muse/agents/__init__.py +31 -0
- code_muse/agents/_builder.py +214 -0
- code_muse/agents/_compaction.py +506 -0
- code_muse/agents/_diagnostics.py +171 -0
- code_muse/agents/_history.py +382 -0
- code_muse/agents/_key_listeners.py +148 -0
- code_muse/agents/_non_streaming_render.py +148 -0
- code_muse/agents/_runtime.py +596 -0
- code_muse/agents/agent_creator_agent.py +603 -0
- code_muse/agents/agent_helios.py +47 -0
- code_muse/agents/agent_manager.py +740 -0
- code_muse/agents/agent_muse.py +78 -0
- code_muse/agents/agent_planning.py +44 -0
- code_muse/agents/agent_qa_melpomene.py +207 -0
- code_muse/agents/base_agent.py +194 -0
- code_muse/agents/event_stream_handler.py +361 -0
- code_muse/agents/json_agent.py +201 -0
- code_muse/agents/prompt_v3.py +521 -0
- code_muse/agents/subagent_stream_handler.py +273 -0
- code_muse/callbacks.py +941 -0
- code_muse/chatgpt_codex_client.py +333 -0
- code_muse/claude_cache_client.py +853 -0
- code_muse/cli_runner/__init__.py +319 -0
- code_muse/cli_runner/args.py +63 -0
- code_muse/cli_runner/loop.py +510 -0
- code_muse/cli_runner/resume.py +72 -0
- code_muse/cli_runner/runner.py +161 -0
- code_muse/command_line/__init__.py +1 -0
- code_muse/command_line/add_model_menu.py +1331 -0
- code_muse/command_line/agent_menu.py +674 -0
- code_muse/command_line/attachments.py +397 -0
- code_muse/command_line/autosave_menu.py +709 -0
- code_muse/command_line/clipboard.py +528 -0
- code_muse/command_line/colors_menu.py +530 -0
- code_muse/command_line/command_handler.py +262 -0
- code_muse/command_line/command_registry.py +150 -0
- code_muse/command_line/config_commands.py +711 -0
- code_muse/command_line/core_commands.py +740 -0
- code_muse/command_line/diff_menu.py +865 -0
- code_muse/command_line/file_path_completion.py +73 -0
- code_muse/command_line/load_context_completion.py +57 -0
- code_muse/command_line/model_picker_completion.py +512 -0
- code_muse/command_line/model_settings_menu.py +983 -0
- code_muse/command_line/onboarding_slides.py +162 -0
- code_muse/command_line/onboarding_wizard.py +337 -0
- code_muse/command_line/pagination.py +41 -0
- code_muse/command_line/pin_command_completion.py +329 -0
- code_muse/command_line/prompt_toolkit_completion.py +886 -0
- code_muse/command_line/session_commands.py +304 -0
- code_muse/command_line/shell_passthrough.py +145 -0
- code_muse/command_line/skills_completion.py +158 -0
- code_muse/command_line/types.py +18 -0
- code_muse/command_line/uc_menu.py +908 -0
- code_muse/command_line/utils.py +105 -0
- code_muse/command_line/wiggum_state.py +77 -0
- code_muse/config.py +1138 -0
- code_muse/config_agent.py +168 -0
- code_muse/config_appearance.py +241 -0
- code_muse/config_model.py +357 -0
- code_muse/config_security.py +73 -0
- code_muse/error_logging.py +132 -0
- code_muse/evals/__init__.py +35 -0
- code_muse/evals/eval_helpers.py +81 -0
- code_muse/evals/eval_runner.py +299 -0
- code_muse/evals/sample_evals/__init__.py +1 -0
- code_muse/evals/sample_evals/eval_frugal_reads.py +59 -0
- code_muse/evals/sample_evals/eval_memory_planning.py +31 -0
- code_muse/evals/sample_evals/eval_shell_efficiency.py +39 -0
- code_muse/evals/sample_evals/eval_tool_masking.py +33 -0
- code_muse/fs_scan_cache/__init__.py +31 -0
- code_muse/fs_scan_cache/invalidation_hooks.py +89 -0
- code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
- code_muse/fs_scan_cache/scan_cache_core.pyx +203 -0
- code_muse/fs_scan_cache/tool_integration.py +309 -0
- code_muse/fs_scan_cache/ttl_policy.py +44 -0
- code_muse/gemini_code_assist.py +383 -0
- code_muse/gemini_model.py +838 -0
- code_muse/hook_engine/README.md +105 -0
- code_muse/hook_engine/__init__.py +21 -0
- code_muse/hook_engine/aliases.py +153 -0
- code_muse/hook_engine/engine.py +221 -0
- code_muse/hook_engine/executor.py +347 -0
- code_muse/hook_engine/matcher.py +154 -0
- code_muse/hook_engine/models.py +245 -0
- code_muse/hook_engine/registry.py +114 -0
- code_muse/hook_engine/trust.py +268 -0
- code_muse/hook_engine/validator.py +144 -0
- code_muse/http_utils.py +360 -0
- code_muse/keymap.py +128 -0
- code_muse/list_filtering.py +26 -0
- code_muse/main.py +10 -0
- code_muse/messaging/__init__.py +259 -0
- code_muse/messaging/bus.py +621 -0
- code_muse/messaging/commands.py +166 -0
- code_muse/messaging/markdown_patches.py +57 -0
- code_muse/messaging/message_queue.py +397 -0
- code_muse/messaging/messages.py +591 -0
- code_muse/messaging/queue_console.py +269 -0
- code_muse/messaging/renderers.py +308 -0
- code_muse/messaging/rich_renderer.py +1158 -0
- code_muse/messaging/shimmer.py +154 -0
- code_muse/messaging/spinner/__init__.py +87 -0
- code_muse/messaging/spinner/console_spinner.py +250 -0
- code_muse/messaging/spinner/spinner_base.py +82 -0
- code_muse/messaging/subagent_console.py +458 -0
- code_muse/model_factory.py +1203 -0
- code_muse/model_switching.py +59 -0
- code_muse/model_utils.py +156 -0
- code_muse/models.json +66 -0
- code_muse/models_cache/__init__.py +26 -0
- code_muse/models_cache/blocking_lru_cache.py +98 -0
- code_muse/models_cache/cache_writer.py +86 -0
- code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
- code_muse/models_cache/sha256_hash.pyx +34 -0
- code_muse/models_cache/startup_integration.py +75 -0
- code_muse/models_dev_api.json +1 -0
- code_muse/models_dev_parser.py +590 -0
- code_muse/motion.py +126 -0
- code_muse/plugins/__init__.py +471 -0
- code_muse/plugins/agent_skills/__init__.py +32 -0
- code_muse/plugins/agent_skills/config.py +176 -0
- code_muse/plugins/agent_skills/discovery.py +309 -0
- code_muse/plugins/agent_skills/downloader.py +389 -0
- code_muse/plugins/agent_skills/installer.py +19 -0
- code_muse/plugins/agent_skills/metadata.py +293 -0
- code_muse/plugins/agent_skills/prompt_builder.py +66 -0
- code_muse/plugins/agent_skills/register_callbacks.py +298 -0
- code_muse/plugins/agent_skills/remote_catalog.py +320 -0
- code_muse/plugins/agent_skills/skill_catalog.py +254 -0
- code_muse/plugins/agent_skills/skills_install_menu.py +690 -0
- code_muse/plugins/agent_skills/skills_menu.py +791 -0
- code_muse/plugins/autonomous_memory/__init__.py +39 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.pyx +291 -0
- code_muse/plugins/autonomous_memory/consolidation.py +82 -0
- code_muse/plugins/autonomous_memory/extraction.py +382 -0
- code_muse/plugins/autonomous_memory/lease_lock.py +105 -0
- code_muse/plugins/autonomous_memory/memory_injection.py +59 -0
- code_muse/plugins/autonomous_memory/register_callbacks.py +268 -0
- code_muse/plugins/autonomous_memory/secret_scanner.py +62 -0
- code_muse/plugins/autonomous_memory/session_scanner.py +163 -0
- code_muse/plugins/aws_bedrock/__init__.py +14 -0
- code_muse/plugins/aws_bedrock/config.py +99 -0
- code_muse/plugins/aws_bedrock/register_callbacks.py +241 -0
- code_muse/plugins/aws_bedrock/utils.py +153 -0
- code_muse/plugins/azure_foundry/README.md +238 -0
- code_muse/plugins/azure_foundry/__init__.py +15 -0
- code_muse/plugins/azure_foundry/config.py +125 -0
- code_muse/plugins/azure_foundry/discovery.py +187 -0
- code_muse/plugins/azure_foundry/register_callbacks.py +495 -0
- code_muse/plugins/azure_foundry/token.py +180 -0
- code_muse/plugins/azure_foundry/utils.py +345 -0
- code_muse/plugins/build_filter/__init__.py +1 -0
- code_muse/plugins/build_filter/register_callbacks.py +201 -0
- code_muse/plugins/build_filter/strategies/__init__.py +1 -0
- code_muse/plugins/build_filter/strategies/build.py +397 -0
- code_muse/plugins/chatgpt_oauth/__init__.py +6 -0
- code_muse/plugins/chatgpt_oauth/config.py +52 -0
- code_muse/plugins/chatgpt_oauth/oauth_flow.py +338 -0
- code_muse/plugins/chatgpt_oauth/register_callbacks.py +172 -0
- code_muse/plugins/chatgpt_oauth/test_plugin.py +301 -0
- code_muse/plugins/chatgpt_oauth/utils.py +538 -0
- code_muse/plugins/checkpointing/__init__.py +29 -0
- code_muse/plugins/checkpointing/checkpoint_hook.py +51 -0
- code_muse/plugins/checkpointing/conversation_snapshots.py +117 -0
- code_muse/plugins/checkpointing/register_callbacks.py +51 -0
- code_muse/plugins/checkpointing/restore_command.py +263 -0
- code_muse/plugins/checkpointing/rewind_shortcut.py +88 -0
- code_muse/plugins/checkpointing/shadow_git.py +90 -0
- code_muse/plugins/claude_code_hooks/__init__.py +1 -0
- code_muse/plugins/claude_code_hooks/config.py +188 -0
- code_muse/plugins/claude_code_hooks/register_callbacks.py +208 -0
- code_muse/plugins/claude_code_oauth/README.md +167 -0
- code_muse/plugins/claude_code_oauth/SETUP.md +93 -0
- code_muse/plugins/claude_code_oauth/__init__.py +25 -0
- code_muse/plugins/claude_code_oauth/config.py +52 -0
- code_muse/plugins/claude_code_oauth/fast_mode.py +124 -0
- code_muse/plugins/claude_code_oauth/prompt_handler.py +63 -0
- code_muse/plugins/claude_code_oauth/register_callbacks.py +547 -0
- code_muse/plugins/claude_code_oauth/test_fast_mode.py +165 -0
- code_muse/plugins/claude_code_oauth/test_plugin.py +283 -0
- code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +237 -0
- code_muse/plugins/claude_code_oauth/utils.py +664 -0
- code_muse/plugins/copilot_auth/__init__.py +11 -0
- code_muse/plugins/copilot_auth/config.py +91 -0
- code_muse/plugins/copilot_auth/reasoning_client.py +409 -0
- code_muse/plugins/copilot_auth/register_callbacks.py +461 -0
- code_muse/plugins/copilot_auth/utils.py +584 -0
- code_muse/plugins/custom_commands/__init__.py +14 -0
- code_muse/plugins/custom_commands/args_injection.py +82 -0
- code_muse/plugins/custom_commands/command_discovery.py +89 -0
- code_muse/plugins/custom_commands/command_toml_schema.py +71 -0
- code_muse/plugins/custom_commands/register_callbacks.py +176 -0
- code_muse/plugins/customizable_commands/__init__.py +0 -0
- code_muse/plugins/customizable_commands/register_callbacks.py +136 -0
- code_muse/plugins/destructive_command_guard/__init__.py +14 -0
- code_muse/plugins/destructive_command_guard/detector.py +375 -0
- code_muse/plugins/destructive_command_guard/register_callbacks.py +148 -0
- code_muse/plugins/example_custom_command/README.md +280 -0
- code_muse/plugins/example_custom_command/register_callbacks.py +51 -0
- code_muse/plugins/file_permission_handler/__init__.py +4 -0
- code_muse/plugins/file_permission_handler/register_callbacks.py +441 -0
- code_muse/plugins/filter_engine/__init__.py +30 -0
- code_muse/plugins/filter_engine/classifier.py +153 -0
- code_muse/plugins/filter_engine/content_detector.py +184 -0
- code_muse/plugins/filter_engine/dispatcher.py +244 -0
- code_muse/plugins/filter_engine/register_callbacks.py +188 -0
- code_muse/plugins/filter_engine/registry.py +279 -0
- code_muse/plugins/filter_engine/strategies/__init__.py +8 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +348 -0
- code_muse/plugins/filter_engine/strategies/ast_parser.py +167 -0
- code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/code.pyx +584 -0
- code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/git.pyx +438 -0
- code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/json_compressor.pyx +253 -0
- code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/json_patterns.pyx +178 -0
- code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/lint.pyx +626 -0
- code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/test.pyx +431 -0
- code_muse/plugins/filter_engine/verbosity.py +63 -0
- code_muse/plugins/force_push_guard/__init__.py +5 -0
- code_muse/plugins/force_push_guard/detector.py +96 -0
- code_muse/plugins/force_push_guard/register_callbacks.py +144 -0
- code_muse/plugins/force_push_guard/test_detector.py +143 -0
- code_muse/plugins/frontend_emitter/__init__.py +25 -0
- code_muse/plugins/frontend_emitter/emitter.py +121 -0
- code_muse/plugins/frontend_emitter/register_callbacks.py +259 -0
- code_muse/plugins/gac/__init__.py +4 -0
- code_muse/plugins/gac/git_ops.py +136 -0
- code_muse/plugins/gac/prompt.py +191 -0
- code_muse/plugins/gac/register_callbacks.py +82 -0
- code_muse/plugins/hook_creator/__init__.py +1 -0
- code_muse/plugins/hook_creator/register_callbacks.py +34 -0
- code_muse/plugins/hook_manager/__init__.py +1 -0
- code_muse/plugins/hook_manager/config.py +289 -0
- code_muse/plugins/hook_manager/hooks_menu.py +563 -0
- code_muse/plugins/hook_manager/register_callbacks.py +227 -0
- code_muse/plugins/hook_monitor/register_callbacks.py +36 -0
- code_muse/plugins/mindpack/__init__.py +0 -0
- code_muse/plugins/mindpack/factory.py +930 -0
- code_muse/plugins/mindpack/judge.py +573 -0
- code_muse/plugins/mindpack/memory.py +100 -0
- code_muse/plugins/mindpack/mindpack_menu.py +1552 -0
- code_muse/plugins/mindpack/orchestration.py +605 -0
- code_muse/plugins/mindpack/register_callbacks.py +175 -0
- code_muse/plugins/mindpack/schemas.py +358 -0
- code_muse/plugins/mindpack/tools.py +387 -0
- code_muse/plugins/oauth_muse_html.py +226 -0
- code_muse/plugins/ollama_setup/__init__.py +5 -0
- code_muse/plugins/ollama_setup/completer.py +36 -0
- code_muse/plugins/ollama_setup/register_callbacks.py +410 -0
- code_muse/plugins/plan_command/__init__.py +0 -0
- code_muse/plugins/plan_command/register_callbacks.py +206 -0
- code_muse/plugins/plan_mode/__init__.py +37 -0
- code_muse/plugins/plan_mode/mode_cycling.py +40 -0
- code_muse/plugins/plan_mode/plan_generation.py +68 -0
- code_muse/plugins/plan_mode/plan_hooks.py +74 -0
- code_muse/plugins/plan_mode/plan_mode_tools.py +138 -0
- code_muse/plugins/plan_mode/register_callbacks.py +121 -0
- code_muse/plugins/plugin_trust/register_callbacks.py +140 -0
- code_muse/plugins/policy_engine/__init__.py +46 -0
- code_muse/plugins/policy_engine/approval_flow_integration.py +59 -0
- code_muse/plugins/policy_engine/policy_evaluator.py +75 -0
- code_muse/plugins/policy_engine/policy_file_discovery.py +90 -0
- code_muse/plugins/policy_engine/policy_toml_schema.py +115 -0
- code_muse/plugins/policy_engine/register_callbacks.py +112 -0
- code_muse/plugins/pop_command/__init__.py +1 -0
- code_muse/plugins/pop_command/register_callbacks.py +189 -0
- code_muse/plugins/prompt_newline/__init__.py +13 -0
- code_muse/plugins/prompt_newline/config.py +19 -0
- code_muse/plugins/prompt_newline/register_callbacks.py +159 -0
- code_muse/plugins/safety_status/__init__.py +0 -0
- code_muse/plugins/safety_status/register_callbacks.py +113 -0
- code_muse/plugins/semantic_compression/__init__.py +6 -0
- code_muse/plugins/semantic_compression/compressor.py +295 -0
- code_muse/plugins/semantic_compression/config.py +123 -0
- code_muse/plugins/semantic_compression/register_callbacks.py +320 -0
- code_muse/plugins/shell_minimizer/__init__.py +50 -0
- code_muse/plugins/shell_minimizer/builtin_filters.toml +393 -0
- code_muse/plugins/shell_minimizer/pipeline.py +556 -0
- code_muse/plugins/shell_minimizer/primitives.py +482 -0
- code_muse/plugins/shell_minimizer/register_callbacks.py +276 -0
- code_muse/plugins/shell_safety/__init__.py +6 -0
- code_muse/plugins/shell_safety/agent_shell_safety.py +69 -0
- code_muse/plugins/shell_safety/command_cache.py +149 -0
- code_muse/plugins/shell_safety/register_callbacks.py +202 -0
- code_muse/plugins/synthetic_status/__init__.py +1 -0
- code_muse/plugins/synthetic_status/register_callbacks.py +128 -0
- code_muse/plugins/synthetic_status/status_api.py +145 -0
- code_muse/plugins/token_caching/__init__.py +21 -0
- code_muse/plugins/token_caching/cache_hit_tracking.py +128 -0
- code_muse/plugins/token_caching/cacheable_prefix_detection.py +28 -0
- code_muse/plugins/token_caching/register_callbacks.py +54 -0
- code_muse/plugins/token_caching/stats_display.py +35 -0
- code_muse/plugins/token_tracking/__init__.py +26 -0
- code_muse/plugins/token_tracking/database.py +381 -0
- code_muse/plugins/token_tracking/edit_analyzer.py +97 -0
- code_muse/plugins/token_tracking/record.py +55 -0
- code_muse/plugins/token_tracking/register_callbacks.py +277 -0
- code_muse/plugins/token_tracking/reports.py +329 -0
- code_muse/plugins/universal_constructor/__init__.py +13 -0
- code_muse/plugins/universal_constructor/models.py +136 -0
- code_muse/plugins/universal_constructor/register_callbacks.py +47 -0
- code_muse/plugins/universal_constructor/registry.py +390 -0
- code_muse/plugins/universal_constructor/runner.py +474 -0
- code_muse/plugins/universal_constructor/safety.py +440 -0
- code_muse/plugins/universal_constructor/sandbox.py +584 -0
- code_muse/provider_identity.py +105 -0
- code_muse/pydantic_patches.py +410 -0
- code_muse/reopenable_async_client.py +233 -0
- code_muse/round_robin_model.py +151 -0
- code_muse/secret_storage.py +74 -0
- code_muse/security/__init__.py +1 -0
- code_muse/security/redaction.cpython-314-darwin.so +0 -0
- code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/security/redaction.pyx +135 -0
- code_muse/session_storage.py +565 -0
- code_muse/status_display.py +261 -0
- code_muse/stream_parser/__init__.py +76 -0
- code_muse/stream_parser/assistant_text_parser.py +90 -0
- code_muse/stream_parser/citation_parser.py +76 -0
- code_muse/stream_parser/inline_hidden_tag_parser.py +236 -0
- code_muse/stream_parser/proposed_plan_parser.py +158 -0
- code_muse/stream_parser/stream_text_chunk.py +23 -0
- code_muse/stream_parser/stream_text_parser.py +27 -0
- code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
- code_muse/stream_parser/tagged_line_parser.pyx +251 -0
- code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
- code_muse/stream_parser/utf8_stream_parser.pyx +206 -0
- code_muse/summarization_agent.py +308 -0
- code_muse/terminal_utils.cpython-314-darwin.so +0 -0
- code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/terminal_utils.pyx +483 -0
- code_muse/tools/__init__.py +459 -0
- code_muse/tools/agent_tools.py +613 -0
- code_muse/tools/ask_user_question/__init__.py +26 -0
- code_muse/tools/ask_user_question/constants.py +73 -0
- code_muse/tools/ask_user_question/demo_tui.py +55 -0
- code_muse/tools/ask_user_question/handler.py +232 -0
- code_muse/tools/ask_user_question/models.py +302 -0
- code_muse/tools/ask_user_question/registration.py +37 -0
- code_muse/tools/ask_user_question/renderers.py +336 -0
- code_muse/tools/ask_user_question/terminal_ui.py +327 -0
- code_muse/tools/ask_user_question/theme.py +156 -0
- code_muse/tools/ask_user_question/tui_loop.py +422 -0
- code_muse/tools/background_jobs.py +99 -0
- code_muse/tools/browser/__init__.py +37 -0
- code_muse/tools/browser/browser_control.py +289 -0
- code_muse/tools/browser/browser_interactions.py +545 -0
- code_muse/tools/browser/browser_locators.py +640 -0
- code_muse/tools/browser/browser_manager.py +376 -0
- code_muse/tools/browser/browser_navigation.py +251 -0
- code_muse/tools/browser/browser_screenshot.py +180 -0
- code_muse/tools/browser/browser_scripts.py +462 -0
- code_muse/tools/browser/browser_workflows.py +222 -0
- code_muse/tools/chrome_cdp/__init__.py +1070 -0
- code_muse/tools/chrome_cdp/register_callbacks.py +61 -0
- code_muse/tools/command_runner.py +1401 -0
- code_muse/tools/common.py +1407 -0
- code_muse/tools/display.py +87 -0
- code_muse/tools/file_modifications.py +1099 -0
- code_muse/tools/file_operations.py +860 -0
- code_muse/tools/image_tools.py +185 -0
- code_muse/tools/meetin_proxy/__init__.py +243 -0
- code_muse/tools/meetin_proxy/capture_addon.py +82 -0
- code_muse/tools/meetin_proxy/proxy_manager.py +326 -0
- code_muse/tools/meetin_proxy/register_callbacks.py +45 -0
- code_muse/tools/path_policy.py +219 -0
- code_muse/tools/skills_tools.py +586 -0
- code_muse/tools/subagent_context.py +158 -0
- code_muse/tools/tools_content.py +50 -0
- code_muse/tools/universal_constructor.py +965 -0
- code_muse/uvx_detection.py +241 -0
- code_muse/version_checker.py +86 -0
- code_muse-0.0.1.data/data/code_muse/models.json +66 -0
- code_muse-0.0.1.data/data/code_muse/models_dev_api.json +1 -0
- code_muse-0.0.1.dist-info/METADATA +845 -0
- code_muse-0.0.1.dist-info/RECORD +394 -0
- code_muse-0.0.1.dist-info/WHEEL +4 -0
- code_muse-0.0.1.dist-info/entry_points.txt +2 -0
- 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
|
+

|
|
50
|
+
|
|
51
|
+
**Muse — the AI code agent that makes IDEs look outdated**
|
|
52
|
+
|
|
53
|
+
[](https://pypi.org/project/code-muse/)
|
|
54
|
+
[](https://pypi.org/project/code-muse/)
|
|
55
|
+
[](https://python.org)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
[](https://github.com/asx8678/muse/actions)
|
|
58
|
+
[](https://github.com/asx8678/muse/tests)
|
|
59
|
+
|
|
60
|
+
[](https://github.com/asx8678/muse)
|
|
61
|
+
[](https://github.com/pydantic/pydantic-ai)
|
|
62
|
+
|
|
63
|
+
[](https://github.com/asx8678/muse/blob/main/README.md#muse-privacy-commitment)
|
|
64
|
+
|
|
65
|
+
[](https://github.com/asx8678/muse/stargazers)
|
|
66
|
+
[](https://github.com/asx8678/muse/network)
|
|
67
|
+
|
|
68
|
+
[](https://discord.gg/eAGdE4J7Ca)
|
|
69
|
+
[](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.
|