{"adoption": {"forks": 227, "observed_at": "2026-08-28T04:05:18.038224+00:00", "stars": 1656}, "canonical_url": "https://ross.abutalabs.com/products/wangyihang-platypus", "card": {"archived": false, "artifact_type": "application", "description": ":hammer: A modern, cross-platform machine manager", "domain": ["security", "penetration-testing", "networking", "developer-tools"], "enriched": true, "function": ["security", "networking", "http-server", "websocket", "cli", "gui"], "health_score": 80, "homepage": null, "language": "Go", "license": "LGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["WangYihang/Platypus"], "name": "WangYihang/Platypus", "platform": ["windows", "cross-platform", "self-hosted", "go"], "pushed_at": "2026-08-25T16:44:56+00:00", "repo": "WangYihang/Platypus", "stars": 1656, "tags": ["reverse-shell", "c2", "remote-shell", "host-management", "port-forwarding", "socks5-proxy", "red-team", "file-transfer", "wails-desktop", "linux", "macos", "docker"], "topics": [], "urls": [], "use_cases": ["manage reverse shell sessions from multiple hosts in one place", "get an interactive shell on remote machines behind NAT", "set up SOCKS5 and port-forward tunnels through compromised or managed hosts", "upload and download files to remote hosts from a central console", "run commands across a fleet of Linux servers at once", "build automation on top of a C2-style REST API with a Python SDK"], "what_it_is": "Platypus is a cross-platform reverse-shell and host management hub written in Go. Agents on managed machines dial back to a central server over TLS + protobuf, giving operators interactive shells, file transfer, and network tunneling through a REST/WebSocket API and a Wails desktop client.", "when_to_avoid": ["you need a lightweight single-binary reverse shell without a server/client architecture", "you require a built-in web UI in the server itself (the server is API-only; UI ships separately)", "you need a full-featured commercial C2 with advanced evasion or post-exploitation modules", "your use case is legitimate fleet configuration management rather than interactive shell access"], "when_to_choose": ["you need a modern, self-hosted reverse shell manager with a desktop GUI and REST API", "you manage many machines across different networks and want one hub with multiple ingress ports", "you need encrypted (TLS) agent channels and chunked file transfer out of the box", "you want Docker Compose one-click deployment with a web UI"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wangyihang-platypus", "repo": "WangYihang/Platypus", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "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:05:18.038224+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.038224+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:44:48.966073+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "daf8045ea59f3ebaf8b138165e74e943752fb54b26d6d7b44496379f457ec7a2", "fetched_at": "2026-08-28T04:05:18.038224+00:00", "kind": "readme", "missing": false, "url": "https://github.com/WangYihang/Platypus"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "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": 2941, "days_push": 8, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}