{"adoption": {"forks": 195, "observed_at": "2026-08-28T04:04:13.306993+00:00", "stars": 1277}, "canonical_url": "https://ross.abutalabs.com/products/attractor", "card": {"archived": false, "artifact_type": "learning-resource", "description": "nlspec of StrongDM's Attractor, a non-interactive Coding Agent sufficient for use in a Software Factory", "domain": ["artificial-intelligence", "large-language-models", "developer-tools"], "enriched": true, "function": ["agent-framework", "llm-inference", "prompt-engineering", "developer-tools", "workflow-automation"], "health_score": 64, "homepage": "https://factory.strongdm.ai/products/attractor", "language": null, "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["strongdm/attractor"], "name": "strongdm/attractor", "platform": ["cross-platform", "cli"], "pushed_at": "2026-03-17T21:33:21+00:00", "repo": "strongdm/attractor", "stars": 1277, "tags": ["nl-spec", "coding-agent", "software-factory", "specification", "agentic-loop", "non-interactive-agent", "graph-pipeline", "sdlc-automation", "ai-agents", "automation"], "topics": [], "urls": [], "use_cases": ["build a non-interactive coding agent from a natural language specification", "automate the software development lifecycle with an LLM-driven graph pipeline", "implement a unified LLM client for multiple model providers", "create a software factory that turns fully specified work into completed code", "orchestrate coding agent phases like implement, optimize, and validate as graph nodes", "evaluate community implementations of an open coding agent spec"], "what_it_is": "Attractor is a set of Natural Language Specifications (NLSpecs) from StrongDM describing how to build a non-interactive coding agent that composes models, prompts, and tools into a graph-structured pipeline for end-to-end software development. The repository contains human-readable specs (agent loop, unified LLM client, and overall Attractor spec) intended to be directly consumed by coding agents to implement and validate behavior.", "when_to_avoid": ["you need a ready-to-run coding agent binary rather than specifications to implement", "your tasks are not fully specified and require interactive human-in-the-loop coding", "you want a framework with shipped code and APIs instead of natural language documents"], "when_to_choose": ["you want a vendor-neutral, open specification for building your own autonomous coding agent", "you need a deterministic, resumable, graph-structured agent pipeline for fully specified tasks", "you want to feed a spec directly to a coding agent like Claude Code or Codex to generate an implementation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/attractor", "repo": "strongdm/attractor", "role": "main", "score": 47}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "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:13.306993+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.306993+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.037213+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b5f8d1b8ed4db6bec9060bb6b39dddbd38dec06a6958cd24f2dba4773068773", "fetched_at": "2026-08-28T04:04:13.306993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/strongdm/attractor"}, {"content_hash": "612fbf89ffbc6279791f4f26d0a6d325b94eeb12e03f9d1226921de3538039bb", "fetched_at": "2026-08-29T12:14:10.349582+00:00", "kind": "homepage", "missing": false, "url": "https://factory.strongdm.ai/products/attractor"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 72, "longevity": 14, "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": 209, "days_push": 169, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 47, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}