{"id":49760415,"url":"https://github.com/sid-352/project-arbiter","last_synced_at":"2026-05-17T11:03:48.401Z","repository":{"id":351775044,"uuid":"1206228526","full_name":"Sid-352/Project-Arbiter","owner":"Sid-352","description":"Automation engine written in rust","archived":false,"fork":false,"pushed_at":"2026-05-03T10:08:18.000Z","size":473,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T05:26:39.050Z","etag":null,"topics":["automation","desktop-automation","rpa","rust","slint","slint-ui","state-machine","windows","workflow-automation"],"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/Sid-352.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2026-04-09T17:50:40.000Z","updated_at":"2026-05-03T10:08:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Sid-352/Project-Arbiter","commit_stats":null,"previous_names":["sid-352/project-arbiter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Sid-352/Project-Arbiter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sid-352%2FProject-Arbiter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sid-352%2FProject-Arbiter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sid-352%2FProject-Arbiter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sid-352%2FProject-Arbiter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sid-352","download_url":"https://codeload.github.com/Sid-352/Project-Arbiter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sid-352%2FProject-Arbiter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33136088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["automation","desktop-automation","rpa","rust","slint","slint-ui","state-machine","windows","workflow-automation"],"created_at":"2026-05-11T05:19:27.314Z","updated_at":"2026-05-17T11:03:48.395Z","avatar_url":"https://github.com/Sid-352.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Arbiter\n\n[![CI](https://github.com/Sid-352/Project-Vassal/actions/workflows/ci.yml/badge.svg)](https://github.com/Sid-352/Project-Vassal/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/Sid-352/Project-Vassal?label=release)](https://github.com/Sid-352/Project-Vassal/releases/latest)\n\nArbiter is a deterministic system orchestration and automation engine. It acts as a silent background service designed to perform physical and system-level workflows reliably. It prioritizes security, stability, and protection against unbounded behavior. I made it to more or less execute scripts that I don't wish to open the terminal for, to arrange my downloads and to perform other repetitive tasks.\n\n## Why Arbiter?\nIn my experience, simple Bash scripts and Task Scheduler sometimes fail to provide the necessary hardware context or stateful evaluation required for complex workflows. Also I have had had issues with AHK a lot of times. \n\n## Core Philosophy\n\n* **D-FSM**: Actions follow rigid and explicitly defined FSMs such that execution paths and procedures are strictly bounded.\n* **Headless by default**: Arbiter operates primarily as a silent background tray application. File system hooks, hotkey triggers, and hardware queues function independently of a visual interface.\n\n## Architecture\n\nCheck out the [Detailed Documentation (Wiki)](https://github.com/Sid-352/Project-Arbiter/wiki) for more information.\n\nArbiter is split into four seperated component crates to isolate scope.\n\n### 1. arbiter-core\nHandles all logical state, permissions, configurations, and signal observation. It provides data contracts but executes no instructions.\n* **Vigil**: Pluggable observation listeners for hotkeys and file monitoring.\n* **Atlas**: The Finite State Machine evaluation loop that maps triggers to sequences.\n* **Signet**: Secure configuration vault managing trusted paths and command whitelists. Protected by Windows DPAPI and serialized via MessagePack for binary hardening.\n* **Filter**: In-memory path lock state that prevents infinite event observation loops.\n\n### 2. arbiter-bridge\nA single-responsibility hardware and file execution layer. It processes incoming logical directives through a global queuing lock.\n* **Runner**: Background orchestration task that manages sequential action execution. Hardened with a Hibernation Guard.\n* **Hardware Bridge**: Physical keyboard and mouse routing handler with coordinate bounds checks.\n* **Filesystem Bridge**: Secure file system IO manager handling localized file manipulation using `PathBuf` for cross-platform safety.\n* **Shell Bridge**: Hardened sub-process launching utility handling independent executions.\n\n### 3. arbiter-app\nEntrypoint wrapper managing lifecycle state, custom daily rolling loggers, Tokio asynchronous runtime initialization, and system-tray integration.\n\n### 4. arbiter-forge\nSlint-based visual interface for monitoring live telemetry and managing engine state. It connects to the host via a MessagePack binary IPC protocol.\n\n## Safety and Fallbacks\n\nArbiter is pretty much prevented by design from operating beyond user defined constraints. \n\n\u003e [!WARNING]\n\u003e Security Boundaries are hard-coded into the engine execution pipeline. Failure to authorize paths or binaries will result in an error.\n\n1. **Jail Guard**: All disk operations are clamped to a user-defined whitelist of trusted root paths.\n2. **Execution Guard**: Arbitrary shell and process executions are strictly bounded by a pre-calculated whitelist.\n3. **Hardware Guard**: Coordinate constraints enforce bounding pointer logic within known monitor dimensions.\n4. **Steady State Filter**: Automatic filesystem observation ignores file modifications issued by Arbiter itself.\n5. **Interference Guard**: Detects human presence and enforces a grace period to prevent collisions between the user and automation.\n6. **Hardware Reset Guard**: Automatic hardware release ensures no keys are left in a stuck state if the engine process terminates unexpectedly.\n\n## Getting Started and Installation\n\n\u003e [!NOTE]\n\u003e Arbiter uses a low-level Win32 API (WH_KEYBOARD_LL) to capture global hotkeys and spawn detached shell processes. Pre-compiled binaries in the zip file may be flagged by Windows Defender heuristics. For a frictionless experience, download the pre-compiled binaries via the powershell command below, compile locally using cargo install or add an explicit folder exclusion in Windows Security.\n\n### Prerequisites\n\n* Windows 10 or later\n* Rust 1.70 or later for building from source\n\n### Downloading Pre-built Binaries\n\n1. Download the latest release from the [releases page](https://github.com/Sid-352/Project-Arbiter/releases/latest).\n2. Extract the contents of the downloaded file.\n3. Run the background service (as Administrator):\n```bash\n.\\arbiter.exe\n```\n\n### Downloading via Powershell\nDownloading directly can bypass some of the Windows Defender SmartScreen issues and reduces false-positive flags.\n```powershell\nInvoke-WebRequest -Uri \"https://github.com/Sid-352/Project-Arbiter/releases/latest/download/arbiter-windows.zip\" -OutFile \"arbiter.zip\"; Expand-Archive \"arbiter.zip\" -DestinationPath \".\\arbiter\"; Unblock-File -Path \".\\arbiter\\*.exe\"\n```\n\n### Install via Cargo \nCompiling locally guarantees that the application won't run into any SmartScreen issues.\n```bash\ncargo install --git [https://github.com/Sid-352/Project-Arbiter.git](https://github.com/Sid-352/Project-Arbiter.git) arbiter-app arbiter-forge\n```\n\n### Building from Source\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/Sid-352/Project-Arbiter.git\ncd Project-Arbiter\n```\n\n2. Build both binaries:\n```bash\ncargo build --release --package arbiter-app\ncargo build --release --package arbiter-forge\n```\n\n3. Run the background service (as Administrator):\n```bash\n.\\target\\release\\arbiter.exe\n```\n\n### Quick Start (Windows)\n\n1. Start `arbiter.exe` (Admin recommended).\n2. Wait for the tray icon, then click `Open Forge` from the tray menu.\n3. In Forge, create/save a decree and drop a matching file into your monitored folder to test.\n\nForge is expected to be launched by Arbiter App from the tray.\n\n## Usage\n\n### Running as a Background Service\n\n```bash\ncargo run --release --package arbiter-app\n```\n\n### Running the UI\n\nStart the app first, then open Forge from the tray icon (`Open Forge`).\n\n```bash\ncargo run --release --package arbiter-forge\n```\n\nDirect Forge runs are only valid when Arbiter App is already running.\n\n## License\n\nMIT License\n\n## Future Plans\n\n- Conditional logic in the Decree sequence editor (branching steps based on analytical ward data).\n- Enhanced Perception: Specialized analytical gates for deep-tissue file inspection (MIME, SHA-256).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsid-352%2Fproject-arbiter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsid-352%2Fproject-arbiter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsid-352%2Fproject-arbiter/lists"}