pypi Python analyzed 0.5.2

milu

v0.5.2
pypi

Unified AI agent framework: one interface for 9 LLM providers (Qwen, Kimi, GLM, DeepSeek, MiniMax, Doubao, ChatGPT, Gemini, Claude) with tools, MCP, sub-agents, skills, RAG knowledge base, scheduler, multi-channel IM gateway (WeChat/Feishu/Telegram) and multi-user serving

maintainer
stephon
license
first seen
2026-08-14
last seen
2026-08-14
releases · 30d
1
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · streamable-http · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals pypi-sdist
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed v0.5.2 · analyzer v32 · 1h ago

skills & prompt files 10

  • agent-rules milu-0.5.2/src/milu/templates/prompts/coder/agent.md
  • agent-rules milu-0.5.2/src/milu/templates/prompts/main/agent.md
  • agent-rules milu-0.5.2/src/milu/templates/prompts/reader/agent.md
  • agent-rules milu-0.5.2/src/milu/templates/prompts/researcher/agent.md
  • agent-rules milu-0.5.2/src/milu/templates/prompts/reviewer/agent.md
  • skill milu-0.5.2/src/milu/templates/skills/frontend-design/SKILL.md
  • skill milu-0.5.2/src/milu/templates/skills/internal-comms/SKILL.md
  • skill milu-0.5.2/src/milu/templates/skills/mcp-builder/SKILL.md
  • skill milu-0.5.2/src/milu/templates/skills/systematic-debugging/SKILL.md
  • skill milu-0.5.2/src/milu/templates/skills/test-driven-development/SKILL.md

danger signals5

  • dynamic code execution eval()/exec() milu-0.5.2/examples/2. agent_basic.py :28 return str(eval(expression)) # noqa: S307
  • dynamic code execution eval()/exec() milu-0.5.2/src/milu/sandbox/local.py :63 exec(code, restricted_globals) # noqa: S102
  • dynamic code execution eval()/exec() milu-0.5.2/tests/test_agent_integration.py :32 result = eval(expression, {"__builtins__": {}}, {})
  • dynamic code execution eval()/exec() milu-0.5.2/tests/test_real_new_providers.py :118 return str(eval(expression))
  • suspicious endpoint api.telegram.org milu-0.5.2/src/milu/channels/telegram.py :40 api_base: str = "https://api.telegram.org"
code evidence v0.5.2 · pypi-sdist
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 225

filesystem 62

  • fs (weak) milu-0.5.2/examples/1. basic_llm.py :3 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/2. agent_basic.py :3 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/3. builtin_tools.py :4 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/6_subagent.py :14 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/7_server_fastapi.py :30 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/multi_tenant_keys.py :24 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/multi_turn_chat.py :16 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/multi_user_chat.py :32 from pathlib import Path
  • fs (weak) milu-0.5.2/examples/scheduler_server.py :33 from pathlib import Path
  • fs milu-0.5.2/src/milu/agent/agent.py :11 from pathlib import Path
  • fs milu-0.5.2/src/milu/agent/compactor.py :411 with open(self._session.conversation_path, "r", encoding="utf-8") as f:
  • fs milu-0.5.2/src/milu/agent/session.py :24 from pathlib import Path
  • fs milu-0.5.2/src/milu/channels/commands.py :22 from pathlib import Path
  • fs milu-0.5.2/src/milu/channels/media.py :21 from pathlib import Path
  • fs milu-0.5.2/src/milu/channels/state.py :24 from pathlib import Path
  • fs milu-0.5.2/src/milu/cli/repl.py :13 from pathlib import Path
  • fs milu-0.5.2/src/milu/cli/setup_wizard.py :16 from pathlib import Path
  • fs milu-0.5.2/src/milu/config.py :28 from pathlib import Path
  • fs milu-0.5.2/src/milu/knowledge/store.py :30 from pathlib import Path
  • fs milu-0.5.2/src/milu/llm/base/vision.py :52 with open(path, "rb") as f:
  • fs milu-0.5.2/src/milu/observability/report.py :31 from pathlib import Path
  • fs milu-0.5.2/src/milu/observability/sink.py :10 from pathlib import Path
  • fs milu-0.5.2/src/milu/prompts/builder.py :22 from pathlib import Path
  • fs milu-0.5.2/src/milu/resources.py :20 from pathlib import Path
  • fs (weak) milu-0.5.2/src/milu/sandbox/docker.py :36 import shutil
  • fs (weak) milu-0.5.2/src/milu/sandbox/process.py :12 文件仍能被 open() 读出密钥」的旁路,使 subprocess 在密钥保护上严格优于 local。
  • fs milu-0.5.2/src/milu/scheduler/engine.py :26 from pathlib import Path
  • fs milu-0.5.2/src/milu/scheduler/lock.py :17 from pathlib import Path
  • fs milu-0.5.2/src/milu/scheduler/store.py :23 from pathlib import Path
  • fs milu-0.5.2/src/milu/serving/web/app.py :31 from pathlib import Path
  • fs milu-0.5.2/src/milu/serving/web/dashboard.py :29 from pathlib import Path
  • fs milu-0.5.2/src/milu/skills/config.py :70 with open(path, "r", encoding="utf-8") as f:
  • fs milu-0.5.2/src/milu/skills/registry.py :11 from pathlib import Path
  • fs (weak) milu-0.5.2/src/milu/templates/skills/mcp-builder/scripts/evaluation.py :14 from pathlib import Path
  • fs milu-0.5.2/src/milu/tools/builtin/file_tool.py :111 os.unlink(tmp_path)
  • fs milu-0.5.2/src/milu/tools/builtin/knowledge_tool.py :223 with open(abs_path, encoding="utf-8", errors="replace") as f:
  • fs milu-0.5.2/src/milu/tools/builtin/memory_tool.py :25 from pathlib import Path
  • fs milu-0.5.2/src/milu/tools/builtin/todo_write.py :14 from pathlib import Path
  • fs milu-0.5.2/src/milu/tools/mcp/config.py :10 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/benchmark_knowledge.py :24 import shutil
  • fs (weak) milu-0.5.2/tests/run_tests.py :5 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/stress_real_api.py :28 import shutil
  • fs (weak) milu-0.5.2/tests/test_agent_session.py :4 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_compactor.py :12 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_concurrency_stress.py :13 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_gateway_media.py :17 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_knowledge.py :11 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_mcp/test_config.py :4 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_prompt_builder.py :27 with open(os.path.join(tmpdir, "soul.md"), "w", encoding="utf-8") as f:
  • fs (weak) milu-0.5.2/tests/test_prompt_integration.py :29 with open(os.path.join(tmpdir, "safeguard.md"), "w", encoding="utf-8") as f:
  • fs (weak) milu-0.5.2/tests/test_real_api.py :19 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_sandbox.py :10 import shutil
  • fs (weak) milu-0.5.2/tests/test_scheduler_engine.py :17 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_scheduler_lock.py :11 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_scheduler_store.py :5 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_scheduler_user_context.py :12 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_session.py :5 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_skills.py :103 os.unlink(path)
  • fs (weak) milu-0.5.2/tests/test_todo_concurrent_isolation.py :8 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_tool_doc.py :10 from pathlib import Path
  • fs (weak) milu-0.5.2/tests/test_tool_file.py :217 assert open(path, encoding="utf-8").read() == "Hello"
  • fs (weak) milu-0.5.2/tests/test_tool_image.py :14 from pathlib import Path

shell / exec 6

  • shell (weak) milu-0.5.2/examples/6_subagent.py :228 os.system("")
  • shell (weak) milu-0.5.2/examples/multi_turn_chat.py :699 os.system("")
  • shell milu-0.5.2/src/milu/cli/app.py :766 os.system("")
  • shell (weak) milu-0.5.2/src/milu/sandbox/docker.py :37 import subprocess
  • shell milu-0.5.2/src/milu/scheduler/notify.py :10 import subprocess
  • shell (weak) milu-0.5.2/tests/test_scheduler_lock.py :9 import subprocess

network 19

  • net milu-0.5.2/src/milu/channels/feishu.py :33 import httpx
  • net milu-0.5.2/src/milu/channels/media.py :162 from urllib.parse import unquote
  • net milu-0.5.2/src/milu/channels/telegram.py :27 import httpx
  • net milu-0.5.2/src/milu/channels/wechat_kf.py :35 import httpx
  • net milu-0.5.2/src/milu/serving/web/app.py :1403 import socket
  • net milu-0.5.2/src/milu/tools/builtin/http_request.py :11 import httpx
  • net milu-0.5.2/src/milu/tools/builtin/web_fetch.py :16 import httpx
  • net milu-0.5.2/src/milu/tools/builtin/web_search.py :21 import httpx
  • net milu-0.5.2/src/milu/tools/mcp/connection.py :273 from urllib.parse import urlparse
  • net (weak) milu-0.5.2/tests/test_feishu.py :15 import httpx
  • net (weak) milu-0.5.2/tests/test_gateway.py :13 import httpx
  • net (weak) milu-0.5.2/tests/test_gateway_media.py :20 import httpx
  • net (weak) milu-0.5.2/tests/test_mcp/test_connection.py :294 patch("httpx.AsyncClient", FakeClient):
  • net (weak) milu-0.5.2/tests/test_real_api.py :315 import httpx
  • net (weak) milu-0.5.2/tests/test_telegram.py :1 """Telegram 渠道单测——用 httpx.MockTransport 假冒 Bot API,无真实网络。
  • net (weak) milu-0.5.2/tests/test_tool_http_request.py :19 with patch("httpx.AsyncClient") as mock_client_cls:
  • net (weak) milu-0.5.2/tests/test_tool_web_fetch.py :100 import httpx as real_httpx
  • net (weak) milu-0.5.2/tests/test_tool_web_search.py :119 with patch("httpx.AsyncClient") as mock_client_cls:
  • net (weak) milu-0.5.2/tests/test_wechat_kf.py :17 import httpx

secrets 11

  • secrets (weak) milu-0.5.2/examples/gateway_multi_channel.py :40 if os.environ.get("TELEGRAM_BOT_TOKEN"):
  • secrets (weak) milu-0.5.2/examples/multi_tenant_keys.py :106 if not os.environ.get("QWEN_API_KEY"):
  • secrets milu-0.5.2/src/milu/channels/feishu.py :70 verify_token=os.environ.get("FEISHU_VERIFY_TOKEN", "").strip(),
  • secrets milu-0.5.2/src/milu/channels/telegram.py :47 token = os.environ.get("TELEGRAM_BOT_TOKEN", "").strip()
  • secrets milu-0.5.2/src/milu/cli/app.py :547 _admin_tok = os.environ.get("MILU_ADMIN_TOKEN")
  • secrets milu-0.5.2/src/milu/serving/web/dashboard.py :149 tok = os.environ.get("MILU_ADMIN_TOKEN")
  • secrets milu-0.5.2/src/milu/tools/builtin/web_search.py :78 custom_api_key = os.environ.get("SEARCH_API_KEY")
  • secrets (weak) milu-0.5.2/tests/test_agent_integration.py :12 not os.environ.get("QWEN_API_KEY"),
  • secrets (weak) milu-0.5.2/tests/test_real_new_providers.py :16 OPENAI_KEY = os.environ.get("OPENAI_API_KEY", "")
  • secrets (weak) milu-0.5.2/tests/test_sandbox.py :142 "import os; print(os.environ.get('MILU_SBX_SECRET_KEY', 'ABSENT'))"
  • secrets (weak) milu-0.5.2/tests/test_setup_wizard.py :106 assert os.environ["DEEPSEEK_API_KEY"] == "sk-new-key-123"

declared dependencies 24

  • mcp@>=1.8.0,<2
  • openai@>=1.66.0
  • python-dotenv@>=1.0.0
  • httpx@>=0.27.0
  • jsonschema@>=4.20.0
  • pyyaml@>=6.0
  • markdownify@>=0.13.0
  • python-docx@>=1.1.0
  • openpyxl@>=3.1.0
  • pypdf@>=4.0.0
  • python-pptx@>=1.0.0
  • xlrd@>=2.0.0
  • croniter@>=1.3.8
  • numpy@>=1.24
  • fastapi@>=0.110.0
  • uvicorn@>=0.27.0
  • sse-starlette@>=2.0.0
  • cryptography@>=3.4
  • async-timeout@>=4.0; python_version <
  • ddgs@>=8.0.0
  • lark-oapi@>=1.2
  • pytest@>=8.0.0
  • pytest-asyncio@>=0.23.0
  • ruff@>=0.15

transport_posture 2

  • network-listening, binds all interfaces, no auth detected milu-0.5.2/examples/gateway_multi_channel.py :71 host="0.0.0.0", port=int(os.environ.get("PORT", "8800"))
  • network-listening, binds all interfaces, no auth detected milu-0.5.2/examples/wechat_kf_echo.py :36 run_server(host="0.0.0.0", port=int(os.environ.get("PORT", "8800")))