{"adoption": {"forks": 83, "observed_at": "2026-08-28T04:03:38.006636+00:00", "stars": 1112}, "canonical_url": "https://ross.abutalabs.com/products/codestable", "card": {"archived": false, "artifact_type": "plugin", "description": "CodeStable 是一套面向严肃软件工程、坚持人在环的 AI 编码工作流。它不以编排 Agent 为中心，而是组织需求、架构、特性、问题与历史决策，让 Codex 和 Claude 驱动的开发过程可控、可追溯、可持续演进。", "domain": ["developer-tools", "large-language-models", "version-control"], "enriched": true, "function": ["agent-framework", "prompt-engineering", "developer-tools", "workflow-automation", "code-review", "testing"], "health_score": 99, "homepage": "https://codestable.dev", "language": "Python", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["codestable/CodeStable"], "name": "codestable/CodeStable", "platform": ["cli", "cross-platform", "python"], "pushed_at": "2026-08-18T01:06:33+00:00", "repo": "codestable/CodeStable", "stars": 1112, "tags": ["ai-coding-workflow", "claude-code", "codex", "skills", "human-in-the-loop", "project-memory", "sdlc", "prompt-contracts", "automation", "ai-agents"], "topics": [], "urls": [], "use_cases": ["manage ai coding workflow for long-term projects", "add guardrails to claude code and codex sessions", "keep project memory across ai coding sessions", "require evidence before bug fixes and refactors", "route feature work and issues through structured skills", "run read-only ai code reviews", "onboard a repository for ai-assisted development"], "what_it_is": "CodeStable is a set of lightweight skill contracts (installed as Codex/Claude plugins) that structure AI-assisted coding around requirements, evidence, and project memory rather than agent orchestration. It provides skills like /cs-feat, /cs-issue, /cs-refactor, and /cs-review to keep Codex- and Claude-driven development bounded, verifiable, and traceable in long-lived projects.", "when_to_avoid": ["you want fully autonomous multi-agent orchestration", "you need a licensed product for compliance-sensitive environments (no license file is published)", "you don't use Claude Code, Codex, or a skills-compatible CLI"], "when_to_choose": ["you use Codex or Claude Code for serious software engineering and want human-in-the-loop control", "you need traceable, evidence-based AI-driven changes in a long-lived codebase", "you want lightweight skill contracts instead of heavyweight agent orchestration frameworks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/codestable", "repo": "codestable/CodeStable", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "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:38.006636+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:38.006636+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:42:42.376559+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c91179beaf3281a32106d3a96144b982860c06f235a96cceab0b3a2ee6637b6c", "fetched_at": "2026-08-28T04:03:38.006636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codestable/CodeStable"}, {"content_hash": "d902298c257ebb781c7136b107b8a8bbd984283739d569b84d01b81dcd8270fb", "fetched_at": "2026-08-29T12:46:42.738142+00:00", "kind": "homepage", "missing": false, "url": "https://codestable.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 10, "rhythm": 96}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["young", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 143, "days_push": 16, "days_rel": 31, "gap_med": 8, "n_releases_24m": 4}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}