{"adoption": {"forks": 1489, "observed_at": "2026-08-28T04:10:52.116610+00:00", "stars": 12241}, "canonical_url": "https://ross.abutalabs.com/products/grunt", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Grunt: The JavaScript Task Runner", "domain": ["web-development", "frontend", "developer-tools"], "enriched": true, "function": ["build-tool", "cli", "developer-tools", "workflow-automation", "plugin-system"], "health_score": 79, "homepage": "http://gruntjs.com/", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["gruntjs/grunt", "gruntjs/grunt-contrib-imagemin", "gruntjs/grunt-contrib-uglify", "gruntjs/grunt-contrib-watch"], "name": "Grunt", "platform": ["cli", "cross-platform"], "pushed_at": "2026-08-14T02:35:09+00:00", "repo": "gruntjs/grunt", "stars": 12241, "tags": ["task-runner", "javascript", "minification", "file-watching", "gruntfile", "npm-plugins", "build-automation", "automation", "nodejs"], "topics": ["hacktoberfest"], "urls": [{"kind": "homepage", "url": "http://gruntjs.com/"}, {"kind": "site_page", "url": "https://gruntjs.com/getting-started"}, {"kind": "site_page", "url": "https://gruntjs.com/documentation"}], "use_cases": ["automate repetitive frontend build tasks", "minify and concatenate JavaScript files", "compress and optimize images for production", "run tasks automatically when files change", "run unit tests and linting as part of a build", "set up a build pipeline for a legacy JavaScript project"], "what_it_is": "Grunt is a JavaScript task runner that automates repetitive development tasks like minification, compilation, linting, and unit testing via a declarative Gruntfile configuration. It has a large ecosystem of npm-published plugins, including official contrib plugins for file watching, JS minification, and image optimization.", "when_to_avoid": ["you are starting a new modern JavaScript project, where npm scripts, Vite, esbuild, or Gulp are more common choices", "you need fast incremental builds or hot module replacement for a modern frontend app", "you prefer writing build logic in code rather than configuration files"], "when_to_choose": ["you maintain an existing project already configured with a Gruntfile", "you want a mature, plugin-based task runner with hundreds of available plugins", "you need simple declarative configuration for repetitive tasks like minification or image optimization"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/gruntjs/grunt", "repo": "gruntjs/grunt", "role": "main", "score": 66}, {"path": "/repos/gruntjs/grunt-contrib-watch", "repo": "gruntjs/grunt-contrib-watch", "role": "plugin", "score": 32}, {"path": "/repos/gruntjs/grunt-contrib-uglify", "repo": "gruntjs/grunt-contrib-uglify", "role": "plugin", "score": 62}, {"path": "/repos/gruntjs/grunt-contrib-imagemin", "repo": "gruntjs/grunt-contrib-imagemin", "role": "plugin", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "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:10:52.116610+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:52.116610+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:14:14.686445+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "305b6903c2ff9423a0d58de6fdc17bc8ec8eccfdec70651896e9483e4b4689f8", "fetched_at": "2026-08-28T04:10:52.116610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gruntjs/grunt"}, {"content_hash": "43b54ef915b45525edafa6e4be7b7aded66d79aede9b45787bb25963fb924b99", "fetched_at": "2026-08-29T08:13:12.382817+00:00", "kind": "homepage", "missing": false, "url": "http://gruntjs.com/"}, {"content_hash": "d5de4f072a92c79e27b848416ce22aca7d80e268dbcb228a5bc0e584ca478ed7", "fetched_at": "2026-08-29T08:13:12.385377+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/getting-started"}, {"content_hash": "e6a757c8754ef760bfe8a76cb0a3f5721863ae4dd4135e1415ec0eba15ee8614", "fetched_at": "2026-08-29T08:13:12.387441+00:00", "kind": "site_page", "missing": false, "url": "https://gruntjs.com/documentation"}, {"content_hash": "24a36894bd68ff8a29065c1cf3894b2a525f91dea81487fbef96e83d490fb60c", "fetched_at": "2026-08-29T08:13:12.390582+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-watch"}, {"content_hash": "19087b92018abc8c1a9805ea5c56ed7c8b91bb4a502e8f07d1c334f7d2c978b6", "fetched_at": "2026-08-29T08:13:12.392107+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-uglify"}, {"content_hash": "f721acbb5e98a7434514cfeeeeb02f91b9b13ce14f3dde5ed67127d65160dd24", "fetched_at": "2026-08-29T08:13:12.393710+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt-contrib-imagemin"}, {"content_hash": "05a4d7f61ffcc81b540da6585b10c24dc0082f811e059100af97f29972c6fa64", "fetched_at": "2026-08-29T08:13:12.389017+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/grunt"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5460, "days_push": 20, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}