MCPcopy Index your code
hub / github.com/autopilot-rs/autopilot-rs

github.com/autopilot-rs/autopilot-rs @0.4.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.4.1 ↗ · + Follow
107 symbols 248 edges 15 files 29 documented · 27% updated 8mo ago★ 42611 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Docs Crates.io Appveyor Build Status Github Build Status

AutoPilot

AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information, see the README on that repo.

Currently supported on macOS, Windows, and X11 with the XTest extension.

Examples

The following will move the mouse across the screen as a sine wave:

extern crate autopilot;
extern crate rand;
use rand::Rng;

const TWO_PI: f64 = std::f64::consts::PI * 2.0;
fn sine_mouse_wave() {
    let screen_size = autopilot::screen::size();
    let scoped_height = screen_size.height / 2.0 - 10.0; // Stay in screen bounds.
    let mut rng = rand::thread_rng();
    for x in 0..screen_size.width as u64 {
        let y = (scoped_height * ((TWO_PI * x as f64) / screen_size.width).sin() + 
                 scoped_height).round();
        let duration: u64 = rng.gen_range(1, 3);
        autopilot::mouse::move_to(autopilot::geometry::Point::new(
            x as f64,
            y as f64
        )).expect("Unable to move mouse");
        std::thread::sleep(std::time::Duration::from_millis(duration));
    }
}

This will enter the keys from the string "Hello, world!" and then prompt an alert with the same text:

extern crate autopilot;

fn main() {
    autopilot::key::type_string("Hello, world!", &[], 200., 0.);
    let _ = autopilot::alert::alert("Hello, world!", None, None, None);
}

Contributing

If you are interested in this project, please consider contributing. Here are a few ways you can help:

License

This project is licensed under either the Apache-2.0 or MIT license, at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 50
Method 44
Class 6
Enum 6
Interface 1

Languages

Rust100%

Modules by API surface

src/bitmap.rs31 symbols
src/mouse.rs21 symbols
src/key.rs19 symbols
src/geometry.rs15 symbols
src/screen.rs7 symbols
src/alert.rs4 symbols
tests/bitmap.rs2 symbols
examples/sine_mouse_wave.rs2 symbols
src/internal.rs1 symbols
examples/scroll_mouse.rs1 symbols
examples/screengrab.rs1 symbols
examples/hello_world_keyboard.rs1 symbols

For agents

$ claude mcp add autopilot-rs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page