{"adoption": {"forks": 137, "observed_at": "2026-08-28T04:05:04.278809+00:00", "stars": 1565}, "canonical_url": "https://ross.abutalabs.com/products/opencove", "card": {"archived": false, "artifact_type": "application", "description": "Your infinite canvas workspace for agents, tasks, knowledge, and research. An infinite canvas for Claude Code, Codex, terminals, tasks, and notes.", "domain": ["developer-tools"], "enriched": true, "function": ["agent-framework", "developer-tools", "terminal-ui", "gui"], "health_score": 100, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "experimental", "member_repos": ["DeadWaveWave/opencove"], "name": "DeadWaveWave/opencove", "platform": ["windows", "cross-platform"], "pushed_at": "2026-08-25T10:53:06+00:00", "repo": "DeadWaveWave/opencove", "stars": 1565, "tags": ["infinite-canvas", "claude-code", "codex", "ai-coding-agents", "spatial-workspace", "workspaces", "notes", "tasks", "ai-agents", "command-line", "macos", "linux", "desktop", "electron"], "topics": ["ai", "ai-agents", "claude-code", "codex", "desktop-app", "electron", "infinite-canvas", "react", "typescript", "gemini", "agents", "canvas"], "urls": [], "use_cases": ["run multiple claude code sessions side by side", "manage codex agents on an infinite canvas", "keep terminal output and notes in one workspace", "organize ai agent tasks visually", "restore agent workspace layout after restart", "switch between projects without losing agent context", "snapshot and revisit old workspace states"], "what_it_is": "OpenCove is an Electron-based desktop application that provides an infinite 2D canvas workspace for managing AI coding agents like Claude Code and Codex alongside terminals, tasks, and notes. It keeps parallel agent sessions, planning, and execution context spatially visible and persistently restorable across restarts.", "when_to_avoid": ["you only run a single agent session occasionally and a terminal suffices", "you need a fully stable, production-hardened tool (it is alpha)", "you prefer lightweight CLI-only workflows without a desktop app"], "when_to_choose": ["you juggle multiple CLI AI agent sessions daily and lose track of context in chat threads", "you want a spatial, visual overview of parallel agent work, terminals, and notes", "you need persistent, restorable workspaces with git worktree isolation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/opencove", "repo": "DeadWaveWave/opencove", "role": "main", "score": 64}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "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:04.278809+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:04.278809+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:00:10.439844+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "364f5e9628ac69496c62657dcf55d543d1f548c5689dfbca789420d744c14f18", "fetched_at": "2026-08-28T04:05:04.278809+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeadWaveWave/opencove"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 12, "rhythm": 49}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 177, "days_push": 8, "days_rel": 128, "gap_med": null, "n_releases_24m": 1}, "score": 64, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}