{"adoption": {"forks": 115, "observed_at": "2026-08-28T04:05:41.060382+00:00", "stars": 1822}, "canonical_url": "https://ross.abutalabs.com/products/pythagora", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Generate automated tests for your Node.js app via LLMs without developers having to write a single line of code.", "domain": ["testing", "developer-tools", "large-language-models", "backend"], "enriched": true, "function": ["testing", "e2e-testing", "mocking", "llm-inference"], "health_score": 73, "homepage": "https://pythagora.ai", "language": "JavaScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["Pythagora-io/pythagora"], "name": "Pythagora-io/pythagora", "platform": ["cli", "cross-platform"], "pushed_at": "2026-06-16T23:32:10+00:00", "repo": "Pythagora-io/pythagora", "stars": 1822, "tags": ["automated-test-generation", "gpt-4", "unit-testing", "integration-testing", "vscode-extension", "deprecated", "nodejs"], "topics": ["api-testing", "api-testing-framework", "automated-testing", "database-testing", "developer-tools", "integration-testing", "nodejs", "test-coverage", "testing"], "urls": [], "use_cases": ["generate unit tests for a nodejs function automatically", "create integration tests by recording server activity", "increase test coverage of an existing javascript codebase", "find bugs in node.js code with generated tests", "generate api tests for express apps without writing code"], "what_it_is": "Pythagora is an npm CLI tool (with a VS Code extension) that uses LLMs like GPT-4 to automatically generate unit and integration tests for Node.js applications without developers writing test code. The repository is now deprecated in favor of the successor project GPT Pilot.", "when_to_avoid": ["you need an actively maintained tool - this repo is deprecated in favor of GPT Pilot", "your codebase is not Node.js/JavaScript", "you cannot send proprietary code to external LLM APIs", "you need deterministic tests without LLM API costs"], "when_to_choose": ["you maintain a legacy Node.js/Express/MERN app with little or no test coverage", "you want LLM-generated unit or integration tests from a single command", "you want to record real server traffic to build integration tests"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pythagora", "repo": "Pythagora-io/pythagora", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "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:41.060382+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:41.060382+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:19:47.558005+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67185a1352d38cd95efdbd7f6897ed345bac02794bef643f4cabaf257a2c8071", "fetched_at": "2026-08-28T04:05:41.060382+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Pythagora-io/pythagora"}, {"content_hash": "0713743c1e648427f7d23889966d5ee2823069317981d030ed93b744e03fae3f", "fetched_at": "2026-08-29T10:58:56.097215+00:00", "kind": "homepage", "missing": false, "url": "https://pythagora.ai"}, {"content_hash": "4e32ac29b301ba83dd2fd4c0a03aaaaf5e3b1070641420fbe76353d5d16d3a34", "fetched_at": "2026-08-29T10:58:56.141799+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/docs"}, {"content_hash": "57720dc5ff830cc15b28c6cf5a5804795ab8a3e121b140b4227ce820ae6234fd", "fetched_at": "2026-08-29T10:58:56.157475+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pythagora"}, {"content_hash": "794aa5ee7468b62ad22a5113b8fef53bfa48ea0cc520ab6affe97339b4a93eab", "fetched_at": "2026-08-29T10:58:56.155437+00:00", "kind": "site_page", "missing": false, "url": "https://pazi.ai/pricing"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 87, "longevity": 94, "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": 1320, "days_push": 78, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}