{"adoption": {"forks": 256, "observed_at": "2026-08-28T04:04:01.748580+00:00", "stars": 1219}, "canonical_url": "https://ross.abutalabs.com/products/sshkit", "card": {"archived": false, "artifact_type": "library", "description": "A toolkit for deploying code and assets to servers in a repeatable, testable, reliable way.", "domain": ["developer-tools"], "enriched": true, "function": ["ssh", "developer-tools", "deployment", "cli"], "health_score": 96, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["capistrano/sshkit"], "name": "capistrano/sshkit", "platform": ["ruby"], "pushed_at": "2026-07-25T01:25:08+00:00", "repo": "capistrano/sshkit", "stars": 1219, "tags": ["ssh", "remote-execution", "deployment", "capistrano", "server-automation", "parallel-execution", "devops", "automation", "linux", "macos"], "topics": ["ssh", "ruby", "devops"], "urls": [], "use_cases": ["run commands on multiple servers over ssh from ruby", "execute deployment tasks across a fleet of hosts", "upload and download files to remote servers via scp or sftp", "run commands as a different user with sudo on remote hosts", "run rake tasks on production servers with environment variables", "execute commands on servers in parallel or in sequence", "capture output of remote commands in ruby scripts"], "what_it_is": "SSHKit is a Ruby toolkit for running commands in a structured way on one or more servers over SSH. It provides a DSL for executing, testing, and capturing command output across hosts, with support for user/context switching, environment variables, file transfers, and parallel or sequential execution.", "when_to_avoid": ["you need a general-purpose configuration management tool like Ansible", "your project is not in Ruby", "you only need to run commands on a single local machine", "you need agent-based orchestration with complex dependency graphs"], "when_to_choose": ["you are building a deployment tool or automation in Ruby", "you need structured, repeatable remote command execution over SSH", "you want a DSL for running commands across many hosts with context control", "you are extending or customizing Capistrano"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/sshkit", "repo": "capistrano/sshkit", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "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:04:01.748580+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.748580+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.618746+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c084d73fe5d405d3d9bb4a321b2ca962829d8b03e373d4b5511056f8d7e0904e", "fetched_at": "2026-08-28T04:04:01.748580+00:00", "kind": "readme", "missing": false, "url": "https://github.com/capistrano/sshkit"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 94, "longevity": 100, "rhythm": 70}, "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": 5290, "days_push": 40, "days_rel": 40, "gap_med": 169.5, "n_releases_24m": 5}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}