github Python analyzed a2b4543

Farfive/understudy-AI

github

Understudy — desktop RPA by demonstration. Single-file reference README embeds the complete source (modules, tests, marketing site) + architecture, provider & computer-vision pipeline, and CLI.

maintainer
Farfive
license
first seen
2026-06-14
last seen
2026-06-14
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

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

tools

  • board_get
  • click
  • double_click
  • drag
  • dryrun_start
  • find_element
  • focus_window
  • get_accessibility_tree
  • hotkey
  • launch_app
  • list_windows
  • move
  • press_key
  • read_clipboard
  • recording_start
  • recording_status
  • recording_stop
  • resume
  • right_click
  • screenshot
  • scroll
  • step_decision
  • step_propose
  • stop
  • stop_status
  • task_create
  • task_get
  • task_list
  • task_run
  • task_update_status
  • type_text
  • undo_last
  • wait_for
  • workflow_get
  • workflow_list
  • workflow_normalize
  • workflow_save
  • workflow_set_status
  • write_clipboard
code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 62

filesystem 5

  • fs Farfive-understudy-AI-a2b4543/src/myrpa/config.py :7 from pathlib import Path
  • fs Farfive-understudy-AI-a2b4543/src/myrpa/control/screen.py :6 from pathlib import Path
  • fs Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/linux.py :9 import shutil
  • fs Farfive-understudy-AI-a2b4543/src/myrpa/recording/events.py :6 from pathlib import Path
  • fs Farfive-understudy-AI-a2b4543/src/myrpa/security.py :9 from pathlib import Path

shell / exec 3

  • shell Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/linux.py :10 import subprocess
  • shell Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/macos.py :9 import subprocess
  • shell Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/windows.py :8 import subprocess

network 1

  • net Farfive-understudy-AI-a2b4543/src/myrpa/providers/ollama_provider.py :11 import httpx

secrets 2

  • secrets Farfive-understudy-AI-a2b4543/src/myrpa/config.py :117 anthropic_api_key=os.environ.get("ANTHROPIC_API_KEY") or None,
  • secrets Farfive-understudy-AI-a2b4543/src/myrpa/providers/anthropic_provider.py :32 or os.environ.get("ANTHROPIC_API_KEY")

database 3

  • db Farfive-understudy-AI-a2b4543/src/myrpa/db/models.py :11 from sqlalchemy import (
  • db Farfive-understudy-AI-a2b4543/src/myrpa/db/repo.py :11 from sqlalchemy import select
  • db Farfive-understudy-AI-a2b4543/src/myrpa/db/session.py :7 from sqlalchemy import create_engine

tool registrations 39

  • screenshot Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :20
  • click Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :37
  • double_click Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :42
  • right_click Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :47
  • move Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :52
  • drag Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :57
  • scroll Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :62
  • type_text Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :67
  • press_key Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :72
  • hotkey Farfive-understudy-AI-a2b4543/src/myrpa/tools/control.py :77
  • dryrun_start Farfive-understudy-AI-a2b4543/src/myrpa/tools/dryrun.py :11
  • step_propose Farfive-understudy-AI-a2b4543/src/myrpa/tools/dryrun.py :16
  • step_decision Farfive-understudy-AI-a2b4543/src/myrpa/tools/dryrun.py :27
  • list_windows Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :29
  • focus_window Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :35
  • launch_app Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :41
  • get_accessibility_tree Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :49
  • find_element Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :54
  • wait_for Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :60
  • read_clipboard Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :66
  • write_clipboard Farfive-understudy-AI-a2b4543/src/myrpa/tools/inspect.py :71
  • task_create Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :12
  • task_list Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :18
  • task_get Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :23
  • task_update_status Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :29
  • board_get Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :35
  • task_run Farfive-understudy-AI-a2b4543/src/myrpa/tools/kanban.py :40
  • recording_start Farfive-understudy-AI-a2b4543/src/myrpa/tools/recording.py :8
  • recording_stop Farfive-understudy-AI-a2b4543/src/myrpa/tools/recording.py :17
  • recording_status Farfive-understudy-AI-a2b4543/src/myrpa/tools/recording.py :22
  • stop Farfive-understudy-AI-a2b4543/src/myrpa/tools/safety.py :11
  • resume Farfive-understudy-AI-a2b4543/src/myrpa/tools/safety.py :22
  • stop_status Farfive-understudy-AI-a2b4543/src/myrpa/tools/safety.py :28
  • undo_last Farfive-understudy-AI-a2b4543/src/myrpa/tools/safety.py :33
  • workflow_normalize Farfive-understudy-AI-a2b4543/src/myrpa/tools/workflow.py :10
  • workflow_save Farfive-understudy-AI-a2b4543/src/myrpa/tools/workflow.py :25
  • workflow_list Farfive-understudy-AI-a2b4543/src/myrpa/tools/workflow.py :32
  • workflow_get Farfive-understudy-AI-a2b4543/src/myrpa/tools/workflow.py :37
  • workflow_set_status Farfive-understudy-AI-a2b4543/src/myrpa/tools/workflow.py :43

declared dependencies 20

  • mcp@>=1.2.0
  • SQLAlchemy@>=2.0
  • pydantic@>=2.6
  • typer@>=0.12
  • textual@>=0.60
  • httpx@>=0.27
  • python-dotenv@>=1.0
  • mss@>=9.0
  • pillow@>=10.0
  • pyautogui@>=0.9.54
  • pynput@>=1.7
  • anthropic@>=0.40
  • atomacos@>=3.3
  • pyobjc-framework-Quartz@>=10.0
  • pyobjc-framework-Cocoa@>=10.0
  • uiautomation@>=2.0
  • pywin32@>=306
  • PyGObject@>=3.42
  • pytest@>=8.0
  • pytest-asyncio@>=0.23

clipboard 2

  • clipboard shell call Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/linux.py :76 for cmd in (["xclip", "-selection", "clipboard", "-o"],
  • clipboard shell call Farfive-understudy-AI-a2b4543/src/myrpa/os_backends/macos.py :74 out = subprocess.run(["pbpaste"], capture_output=True, text=True)