{"adoption": {"forks": 104, "observed_at": "2026-09-03T02:15:18.700892+00:00", "stars": 1177}, "canonical_url": "https://ross.abutalabs.com/products/todo-for-ai", "card": {"archived": false, "artifact_type": "application", "description": "🤖 A comprehensive task management system specifically designed for AI assistants. Supports project management, task tracking, team collaboration, and seamless AI integration through MCP (Model Context Protocol). Built with modern tech stack including React, Flask, and Docker. Try it now at https://todo4ai.org/", "domain": ["developer-tools", "self-hosted"], "enriched": true, "function": ["mcp", "workflow-automation", "scheduling", "chatbot", "self-hosted"], "health_score": 94, "homepage": "https://todo4ai.org/", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["todo-for-ai/todo-for-ai"], "name": "todo-for-ai/todo-for-ai", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-09-02T18:42:37+00:00", "repo": "todo-for-ai/todo-for-ai", "stars": 1177, "tags": ["task-management", "ai-assistants", "mcp-server", "project-management", "react", "flask", "ai-agents", "automation", "docker", "web-server"], "topics": ["ai-coding-tools", "cursor", "kiro", "todo4ai", "trae", "windsurf"], "urls": [], "use_cases": ["let ai coding assistants manage my todo list via mcp", "self-host a task manager that cursor or windsurf can use", "coordinate tasks between ai agents and human teammates", "track project tasks through natural language with an ai assistant", "give my ai agent a shared task queue", "manage ai-driven development projects with task tracking"], "what_it_is": "A self-hostable task and project management system designed for AI assistants, integrating via the Model Context Protocol (MCP) so AI agents can create and manage tasks. Built with React, Flask, and Docker, it supports team collaboration and works with tools like Cursor, Windsurf, and Claude.", "when_to_avoid": ["you just need a plain personal to-do app without AI integration", "you need heavyweight enterprise project management like Jira", "you cannot run Docker or a self-hosted server"], "when_to_choose": ["you use MCP-compatible AI coding tools and want them to read/write a shared task list", "you want self-hosted task management with AI agent integration", "you need human-AI team collaboration on tasks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/todo-for-ai", "repo": "todo-for-ai/todo-for-ai", "role": "main", "score": 54}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:18.700892+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:28:15.100433+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15751982066d9661651859caadec42af7c6a2d86b672c0a5a4a4b316d1de961b", "fetched_at": "2026-09-03T02:15:18.700892+00:00", "kind": "readme", "missing": false, "url": "https://github.com/todo-for-ai/todo-for-ai"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 28, "rhythm": 9}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 401, "days_push": 0, "days_rel": 396, "gap_med": null, "n_releases_24m": 1}, "score": 54, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}