{"adoption": {"forks": 285, "observed_at": "2026-08-28T04:05:35.946644+00:00", "stars": 1784}, "canonical_url": "https://ross.abutalabs.com/products/cyberbattlesim", "card": {"archived": false, "artifact_type": "library", "description": "An experimentation and research platform to investigate the interaction of automated agents in an abstract simulated network environments.", "domain": ["security", "artificial-intelligence", "reinforcement-learning", "simulation"], "enriched": true, "function": ["simulation", "reinforcement-learning", "agent-framework", "security", "penetration-testing"], "health_score": 80, "homepage": null, "language": "Jupyter Notebook", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["microsoft/CyberBattleSim"], "name": "microsoft/CyberBattleSim", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-25T16:14:21+00:00", "repo": "microsoft/CyberBattleSim", "stars": 1784, "tags": ["cybersecurity-simulation", "openai-gym", "attack-defense", "lateral-movement", "network-simulation", "research-platform", "research"], "topics": [], "urls": [], "use_cases": ["train reinforcement learning agents for cyber attack simulation", "research lateral movement attacks in simulated networks", "benchmark RL algorithms on cybersecurity environments", "simulate attacker versus defender interactions in enterprise networks", "study how network topology affects cyber attack propagation", "build a custom gym environment for security research"], "what_it_is": "CyberBattleSim is a Python-based experimentation and research platform from Microsoft that simulates abstract enterprise network environments where automated attacker and defender agents interact. It provides an Open AI Gym interface so reinforcement learning algorithms can train agents to exploit vulnerabilities, move laterally across networks, and defend against such attacks.", "when_to_avoid": ["you need realistic network traffic or direct application to real-world systems", "you want production-grade penetration testing tools", "you need a polished game or commercial training product"], "when_to_choose": ["you need a safe, abstract sandbox for cybersecurity RL research", "you want to compare reinforcement learning agents on attack/defense tasks", "you are studying the effect of network topology and vulnerabilities on lateral movement"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cyberbattlesim", "repo": "microsoft/CyberBattleSim", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "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:35.946644+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.946644+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:24:16.099301+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5bb1eb5b45a7dbb0574bd2d32fcbad7d5b5c126b2902492510bedefb563b500", "fetched_at": "2026-08-28T04:05:35.946644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/CyberBattleSim"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2115, "days_push": 8, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}