{"adoption": {"forks": 125, "observed_at": "2026-08-28T04:06:39.002595+00:00", "stars": 2341}, "canonical_url": "https://ross.abutalabs.com/products/ydotool", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Generic command-line automation tool", "domain": ["operating-systems"], "enriched": true, "function": ["cli", "workflow-automation", "developer-tools"], "health_score": 55, "homepage": null, "language": "C", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ReimuNotMoe/ydotool"], "name": "ReimuNotMoe/ydotool", "platform": ["cli"], "pushed_at": "2025-12-22T04:22:09+00:00", "repo": "ReimuNotMoe/ydotool", "stars": 2341, "tags": ["input-automation", "wayland", "x11", "uinput", "xdotool-alternative", "keyboard-mouse-simulation", "command-line", "automation", "linux"], "topics": [], "urls": [], "use_cases": ["simulate keyboard and mouse input on Wayland", "automate typing and clicks from shell scripts", "xdotool alternative that works without X11", "send key presses from scripts or SSH sessions", "automate GUI interactions in CI or testing", "move the mouse cursor programmatically on Linux"], "what_it_is": "ydotool is a generic Linux command-line automation tool that simulates keyboard and mouse input via the kernel's uinput interface, working on Wayland, X11, text consoles, and other input-accepting environments. It works with a companion daemon (ydotoold) that requires access to /dev/uinput, and is written in dependency-free C99.", "when_to_avoid": ["you need high-level GUI automation with element targeting rather than raw input events", "you can't grant root or uinput permissions to the daemon", "you need Windows or macOS support", "you want text-based key names rather than keycodes for the key command"], "when_to_choose": ["you need input automation on Wayland where xdotool doesn't work", "you want a lightweight, dependency-free C tool", "you need to automate input on consoles, fbdev apps, or embedded Linux UIs", "you're scripting keyboard/mouse actions from the command line"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ydotool", "repo": "ReimuNotMoe/ydotool", "role": "main", "score": 49}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:39.002595+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:37:22.224556+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1095b033a768da9d20eaf13f432f726ae74486c4445d11f414395ffba5e7c4f", "fetched_at": "2026-08-28T04:06:39.002595+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReimuNotMoe/ydotool"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 58, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2839, "days_push": 254, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 49, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}