{"id":48355110,"url":"https://github.com/mpiton/tauri-pilot","last_synced_at":"2026-04-08T14:00:48.969Z","repository":{"id":348684068,"uuid":"1199315775","full_name":"mpiton/tauri-pilot","owner":"mpiton","description":"Interactive testing CLI for Tauri v2 apps — lets AI agents inspect, interact with, and debug Tauri applications in real-time","archived":false,"fork":false,"pushed_at":"2026-04-05T15:27:43.000Z","size":3745,"stargazers_count":12,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T13:03:19.053Z","etag":null,"topics":["accessibility","ai","ai-agents","automation","cli","developer-tools","e2e-testing","linux","rust","tauri","tauri-plugin","testing","webview"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpiton.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"mpiton"}},"created_at":"2026-04-02T08:28:27.000Z","updated_at":"2026-04-07T12:55:36.000Z","dependencies_parsed_at":"2026-04-07T13:02:01.853Z","dependency_job_id":null,"html_url":"https://github.com/mpiton/tauri-pilot","commit_stats":null,"previous_names":["mpiton/tauri-pilot"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/mpiton/tauri-pilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiton%2Ftauri-pilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiton%2Ftauri-pilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiton%2Ftauri-pilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiton%2Ftauri-pilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpiton","download_url":"https://codeload.github.com/mpiton/tauri-pilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiton%2Ftauri-pilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31558386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","ai","ai-agents","automation","cli","developer-tools","e2e-testing","linux","rust","tauri","tauri-plugin","testing","webview"],"created_at":"2026-04-05T11:01:10.238Z","updated_at":"2026-04-08T14:00:48.896Z","avatar_url":"https://github.com/mpiton.png","language":"Rust","funding_links":["https://github.com/sponsors/mpiton"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.jpeg\" alt=\"tauri-pilot logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mpiton/tauri-pilot/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/mpiton/tauri-pilot/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/tauri-plugin-pilot\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/tauri-plugin-pilot.svg\" alt=\"crates.io\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/mpiton/tauri-pilot/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/rust-1.94.1+-orange.svg\" alt=\"Rust 1.94.1+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-linux-lightgrey.svg\" alt=\"Platform: Linux\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/tauri-v2-24C8D8.svg\" alt=\"Tauri v2\"\u003e\n\u003c/p\u003e\n\n# tauri-pilot\n\n**Interactive testing CLI for Tauri v2 apps** — lets AI agents (Claude Code) and developers inspect, interact with, and debug Tauri applications in real-time.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/demo.gif\" alt=\"tauri-pilot demo\" width=\"700\"\u003e\n\u003c/p\u003e\n\n```\n$ tauri-pilot snapshot -i\n- heading \"PR Dashboard\" [ref=e1]\n- textbox \"Search PRs\" [ref=e2] value=\"\"\n- button \"Refresh\" [ref=e3]\n- list \"PR List\" [ref=e4]\n  - listitem \"fix: resolve memory leak #142\" [ref=e5]\n  - listitem \"feat: add workspace support #138\" [ref=e6]\n- button \"Load More\" [ref=e7]\n\n$ tauri-pilot click @e3\nok\n\n$ tauri-pilot fill @e2 \"workspace\"\nok\n```\n\n## Why?\n\nThere's no tool for AI agents to interact with Tauri app UIs. Playwright doesn't work (Tauri uses WebKitGTK, not Chromium). tauri-pilot bridges this gap with a lightweight plugin + CLI that speaks a protocol optimized for LLM consumption.\n\n## How it works\n\n```\n┌──────────────┐   Unix Socket    ┌─────────────────────────────┐\n│  tauri-pilot  │ ◄──────────────► │  tauri-plugin-pilot (Rust)  │\n│  (CLI)        │   JSON-RPC       │  embedded in your app       │\n└──────────────┘                   │                             │\n                                   │  ┌─────────────────────┐   │\n                                   │  │  JS Bridge (injected)│   │\n                                   │  │  window.__PILOT__    │   │\n                                   │  └─────────────────────┘   │\n                                   │  WebView (WebKitGTK)        │\n                                   └─────────────────────────────┘\n```\n\n1. **Plugin** embeds in your Tauri app (debug builds only), starts a Unix socket server\n2. **CLI** connects to the socket, sends JSON-RPC commands\n3. **JS Bridge** injected into the WebView handles DOM inspection and interaction\n\n## Quick Start\n\n### 1. Add the plugin to your Tauri app\n\n```toml\n# src-tauri/Cargo.toml\n[dependencies]\ntauri-plugin-pilot = { git = \"https://github.com/mpiton/tauri-pilot\" }\n```\n\n```rust\n// src-tauri/src/main.rs\nfn main() {\n    let mut builder = tauri::Builder::default();\n\n    #[cfg(debug_assertions)]\n    {\n        builder = builder.plugin(tauri_plugin_pilot::init());\n    }\n\n    builder.run(tauri::generate_context!()).expect(\"error running app\");\n}\n```\n\n### 2. Install the CLI\n\n```bash\ncargo install tauri-pilot\n```\n\n### 3. Use it\n\n```bash\n# Check connection\ntauri-pilot ping\n\n# Inspect the UI\ntauri-pilot snapshot -i          # interactive elements only\ntauri-pilot snapshot -s \"#sidebar\"  # scoped to a CSS selector\n\n# Interact\ntauri-pilot click @e3\ntauri-pilot fill @e2 \"hello\"\ntauri-pilot press Enter\n\n# Verify\ntauri-pilot assert text @e1 \"Expected text\"\ntauri-pilot assert visible @e3\ntauri-pilot wait --selector \".success-message\"\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `ping` | Health check |\n| `snapshot` | Accessibility tree with refs (`--save` to persist) |\n| `diff` | Compare snapshots, show only changes |\n| `click` | Click an element |\n| `fill` | Clear + type in an input |\n| `type` | Type without clearing |\n| `press` | Send a keystroke |\n| `select` | Select a dropdown option |\n| `check` | Toggle a checkbox |\n| `scroll` | Scroll page or element |\n| `drag` | Drag element to element or by offset |\n| `drop` | Simulate file drop on element |\n| `text` | Get element text content |\n| `html` | Get element innerHTML |\n| `value` | Get input value |\n| `attrs` | Get all attributes |\n| `eval` | Execute arbitrary JS |\n| `ipc` | Call a Tauri IPC command |\n| `screenshot` | Capture as PNG |\n| `wait` | Wait for element to appear/disappear |\n| `navigate` | Change the WebView URL |\n| `state` | Get URL, title, viewport, scroll |\n| `assert` | One-step verification (text, visible, hidden, value, count, checked, contains, url) |\n| `watch` | Watch for DOM mutations |\n| `storage` | Read/write localStorage and sessionStorage (`--session`) |\n| `logs` | Capture and display console output |\n| `network` | Capture and display network requests |\n| `record` | Record interactions (`start`, `stop --output`, `status`) |\n| `replay` | Replay recorded session (`--export sh` for shell script) |\n\n## For AI Agents\n\ntauri-pilot is designed for AI agent consumption. The workflow is:\n\n1. `tauri-pilot snapshot -i` — get the accessibility tree with refs\n2. Read the refs in the output (`@e1`, `@e2`, ...)\n3. `tauri-pilot click @e3` — interact using refs\n4. `tauri-pilot assert text @e1 \"Dashboard\"` — verify state in one step (exit 0 = pass, exit 1 = fail)\n5. `tauri-pilot diff -i` — see only what changed (saves tokens vs full re-snapshot)\n6. `tauri-pilot logs --level error` — check for JS errors\n\nThe `assert` command replaces the manual `text @ref` + parse + compare pattern, reducing round-trips and token usage.\n\nUse `--json` for structured output when parsing programmatically.\n\n## Requirements\n\n- **Linux** (WebKitGTK) — macOS/Windows planned\n- **Tauri v2** (v1 not supported)\n- **Rust 1.94.1+** (LTS, edition 2024)\n\n## Who uses this?\n\nAre you using tauri-pilot? [Open a PR](https://github.com/mpiton/tauri-pilot/pulls) to add your project here!\n\n\u003c!-- Add your project below --\u003e\n\u003c!-- | [Project Name](https://github.com/...) | Short description | --\u003e\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiton%2Ftauri-pilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpiton%2Ftauri-pilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiton%2Ftauri-pilot/lists"}