{"adoption": {"forks": 81, "observed_at": "2026-08-28T04:03:36.349689+00:00", "stars": 1105}, "canonical_url": "https://ross.abutalabs.com/products/repeats-repeat", "card": {"archived": false, "artifact_type": "application", "description": "Cross-platform mouse/keyboard record/replay and automation hotkeys/macros creation, and more advanced automation features.", "domain": ["developer-tools", "cross-platform"], "enriched": true, "function": ["workflow-automation", "developer-tools"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["repeats/Repeat"], "name": "repeats/Repeat", "platform": ["windows", "jvm", "cross-platform"], "pushed_at": "2023-06-18T18:20:08+00:00", "repo": "repeats/Repeat", "stars": 1105, "tags": ["macro-recorder", "hotkeys", "mouse-gestures", "keyboard-macros", "task-automation", "autohotkey-alternative", "automation", "macos", "linux"], "topics": ["hotkey", "replay", "keyboard-shortcuts", "java", "python", "csharp", "keyboard", "mouse", "macros", "macro", "automation", "automation-framework", "autohotkey"], "urls": [], "use_cases": ["record and replay mouse and keyboard actions", "create keyboard macros with custom hotkeys", "automate repetitive tasks on my computer", "autohotkey alternative for linux and mac", "trigger tasks with mouse gestures", "expand text shortcuts while typing", "run automation scripts in python or java", "run tasks on multiple remote machines"], "what_it_is": "Repeat is a cross-platform desktop application for recording and replaying mouse/keyboard activity and building automation macros and hotkeys using Python or Java. It supports hotkey and mouse-gesture task activation, multi-clipboard, and running tasks across remote machines.", "when_to_avoid": ["you are on Linux with Wayland (X11 required)", "you need encrypted or secure credential storage", "you need a maintained actively developed tool (last release 2023)"], "when_to_choose": ["you need a free cross-platform macro recorder and automation tool", "you want to write automation tasks in Python or Java instead of a DSL", "you need hotkey or mouse-gesture activation of recorded tasks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/repeats-repeat", "repo": "repeats/Repeat", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "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:03:36.349689+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:36.349689+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:44:35.134254+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "517b148707099a550dbc547bfb7316b5e39629c59a85fd1236eafe65d73e9e84", "fetched_at": "2026-08-28T04:03:36.349689+00:00", "kind": "readme", "missing": false, "url": "https://github.com/repeats/Repeat"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3644, "days_push": 1172, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}