github Python analyzed 048a457

rexchengm/maestro

github

Stronger hands for your AI — the RPA it can actually drive. Record a task once; AI optimizes, combines, and composes it into deterministic automations that control your real apps & browser. Pure-vision, local, MCP-native. The smarter the AI, the stronger it gets.

maintainer
rexchengm
license
Apache-2.0
first seen
2026-06-27
last seen
2026-06-27
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

capabilities 47 tools
transport counts 47 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • ai_config
  • ai_run
  • ai_status
  • ai_stop
  • autoreply_config
  • autoreply_start
  • autoreply_status
  • autoreply_stop
  • browser_launch
  • browser_status
  • browser_stop
  • capture_template
  • chat_history
  • create_block
  • create_graph
  • create_skill
  • delete_block
  • delete_chat
  • delete_graph
  • delete_skill
  • execute_steps
  • flow_status
  • get_graph
  • get_logs
  • get_status
  • health
  • list_apps
  • list_blocks
  • list_chat_contacts
  • list_flows
  • list_graphs
  • list_skills
  • list_templates
  • log_chat_message
  • mark_elements
  • run_flow
  • run_graph
  • run_skill
  • screen_text
  • start_recording
  • stop_automation
  • stop_flow
  • stop_recording
  • test_block
  • update_block
  • update_skill
  • web_tabs
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 048a457 · analyzer v33 · 4d ago

danger signals1

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 68

filesystem 15

  • fs rexchengm-maestro-048a457/backend/app/automation.py :9 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/autoreply.py :31 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/blocks.py :92 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/browser.py :23 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/capture.py :13 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/config.py :14 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/conversations.py :21 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/flows_runner.py :18 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/main.py :3 from pathlib import Path
  • fs (weak) rexchengm-maestro-048a457/backend/app/site_demo.py :50 webbrowser.open("https://www.google.com")
  • fs rexchengm-maestro-048a457/backend/app/storage.py :5 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/app/vision.py :6 from pathlib import Path
  • fs rexchengm-maestro-048a457/backend/floatbar.py :20 from pathlib import Path
  • fs (weak) rexchengm-maestro-048a457/backend/tests/conftest.py :4 from pathlib import Path
  • fs (weak) rexchengm-maestro-048a457/backend/tests/test_vision.py :3 from pathlib import Path

shell / exec 6

  • shell rexchengm-maestro-048a457/backend/app/apps.py :17 import subprocess
  • shell rexchengm-maestro-048a457/backend/app/automation.py :5 import subprocess
  • shell rexchengm-maestro-048a457/backend/app/browser.py :21 import subprocess
  • shell rexchengm-maestro-048a457/backend/app/flows_runner.py :15 import subprocess
  • shell rexchengm-maestro-048a457/backend/app/main.py :283 import subprocess
  • shell (weak) rexchengm-maestro-048a457/backend/app/site_demo.py :4 import subprocess

network 5

  • net rexchengm-maestro-048a457/backend/app/ai.py :238 import httpx
  • net (weak) rexchengm-maestro-048a457/backend/app/site_demo.py :6 import urllib.parse
  • net rexchengm-maestro-048a457/backend/app/webdriver.py :251 import httpx
  • net rexchengm-maestro-048a457/backend/floatbar.py :22 import httpx
  • net rexchengm-maestro-048a457/backend/mcp_server.py :32 import httpx

secrets 1

  • secrets rexchengm-maestro-048a457/backend/app/ai.py :50 env = os.environ.get("DASHSCOPE_API_KEY", "").strip()

database 1

  • db rexchengm-maestro-048a457/backend/app/conversations.py :19 import sqlite3

tool registrations 47

  • list_skills rexchengm-maestro-048a457/backend/mcp_server.py :111
  • run_skill rexchengm-maestro-048a457/backend/mcp_server.py :130
  • execute_steps rexchengm-maestro-048a457/backend/mcp_server.py :162
  • screen_text rexchengm-maestro-048a457/backend/mcp_server.py :197
  • ai_run rexchengm-maestro-048a457/backend/mcp_server.py :215
  • get_status rexchengm-maestro-048a457/backend/mcp_server.py :231
  • get_logs rexchengm-maestro-048a457/backend/mcp_server.py :239
  • stop_automation rexchengm-maestro-048a457/backend/mcp_server.py :246
  • chat_history rexchengm-maestro-048a457/backend/mcp_server.py :260
  • log_chat_message rexchengm-maestro-048a457/backend/mcp_server.py :274
  • list_chat_contacts rexchengm-maestro-048a457/backend/mcp_server.py :283
  • start_recording rexchengm-maestro-048a457/backend/mcp_server.py :299
  • stop_recording rexchengm-maestro-048a457/backend/mcp_server.py :307
  • list_blocks rexchengm-maestro-048a457/backend/mcp_server.py :325
  • create_block rexchengm-maestro-048a457/backend/mcp_server.py :336
  • test_block rexchengm-maestro-048a457/backend/mcp_server.py :354
  • update_block rexchengm-maestro-048a457/backend/mcp_server.py :361
  • delete_block rexchengm-maestro-048a457/backend/mcp_server.py :381
  • list_graphs rexchengm-maestro-048a457/backend/mcp_server.py :391
  • get_graph rexchengm-maestro-048a457/backend/mcp_server.py :403
  • create_graph rexchengm-maestro-048a457/backend/mcp_server.py :409
  • run_graph rexchengm-maestro-048a457/backend/mcp_server.py :424
  • create_skill rexchengm-maestro-048a457/backend/mcp_server.py :437
  • update_skill rexchengm-maestro-048a457/backend/mcp_server.py :451
  • delete_skill rexchengm-maestro-048a457/backend/mcp_server.py :473
  • list_flows rexchengm-maestro-048a457/backend/mcp_server.py :483
  • run_flow rexchengm-maestro-048a457/backend/mcp_server.py :501
  • stop_flow rexchengm-maestro-048a457/backend/mcp_server.py :528
  • flow_status rexchengm-maestro-048a457/backend/mcp_server.py :534
  • autoreply_status rexchengm-maestro-048a457/backend/mcp_server.py :545
  • autoreply_config rexchengm-maestro-048a457/backend/mcp_server.py :551
  • autoreply_start rexchengm-maestro-048a457/backend/mcp_server.py :566
  • autoreply_stop rexchengm-maestro-048a457/backend/mcp_server.py :573
  • delete_graph rexchengm-maestro-048a457/backend/mcp_server.py :582
  • health rexchengm-maestro-048a457/backend/mcp_server.py :592
  • list_apps rexchengm-maestro-048a457/backend/mcp_server.py :602
  • mark_elements rexchengm-maestro-048a457/backend/mcp_server.py :609
  • list_templates rexchengm-maestro-048a457/backend/mcp_server.py :620
  • capture_template rexchengm-maestro-048a457/backend/mcp_server.py :627
  • browser_launch rexchengm-maestro-048a457/backend/mcp_server.py :636
  • browser_stop rexchengm-maestro-048a457/backend/mcp_server.py :642
  • browser_status rexchengm-maestro-048a457/backend/mcp_server.py :648
  • web_tabs rexchengm-maestro-048a457/backend/mcp_server.py :654
  • delete_chat rexchengm-maestro-048a457/backend/mcp_server.py :663
  • ai_status rexchengm-maestro-048a457/backend/mcp_server.py :670
  • ai_stop rexchengm-maestro-048a457/backend/mcp_server.py :676
  • ai_config rexchengm-maestro-048a457/backend/mcp_server.py :682

declared dependencies 17

  • mcp@>=1.2
  • fastapi@==0.115.6
  • uvicorn@[standard]==0.32.1
  • pydantic@==2.10.3
  • numpy@==2.1.3
  • opencv-python-headless@==4.10.0.84
  • Pillow@==11.0.0
  • pyobjc-core@>=10.3
  • pyobjc-framework-Cocoa@>=10.3
  • pyobjc-framework-Quartz@>=10.3
  • pyobjc-framework-Vision@>=10.3
  • pyobjc-framework-ApplicationServices@>=10.3
  • pynput@==1.7.7
  • python-multipart@==0.0.20
  • httpx@==0.28.1
  • websockets@>=13.0
  • playwright@>=1.40

perm:untrusted 1

  • untrusted rexchengm-maestro-048a457/backend/app/webdriver.py :254 tabs = httpx.get(f"{base}/json/list", timeout=3).json()