{"adoption": {"forks": 583, "observed_at": "2026-08-28T04:11:07.603194+00:00", "stars": 14744}, "canonical_url": "https://ross.abutalabs.com/products/harper", "card": {"archived": false, "artifact_type": "library", "description": "Offline, privacy-first grammar checker. Fast, open-source, Rust-powered", "domain": ["developer-tools", "text-editors"], "enriched": true, "function": ["nlp", "linter", "sdk", "plugin-system"], "health_score": 100, "homepage": "https://writewithharper.com", "language": "Rust", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["Automattic/harper"], "name": "Automattic/harper", "platform": ["rust", "wasm", "browser", "cross-platform", "editor-plugin", "browser-extension"], "pushed_at": "2026-08-26T20:49:05+00:00", "repo": "Automattic/harper", "stars": 14744, "tags": ["grammar-checker", "language-server", "offline", "privacy-first", "spell-check", "writing-assistant", "obsidian-plugin", "chrome-extension", "lsp", "natural-language-processing", "nodejs", "macos"], "topics": ["developer-tools", "english-language", "grammar-checker", "rust", "webassembly", "chrome-extension", "nodejs", "react", "svelte"], "urls": [], "use_cases": ["check grammar in my writing without sending text to the cloud", "grammarly alternative that works offline", "add grammar checking to my obsidian vault", "lint markdown documents in neovim for grammar mistakes", "embed a grammar checker in a web app via javascript", "fast spell and grammar checking in vscode or zed", "system-wide grammar checking on macos"], "what_it_is": "Harper is an open-source, offline English grammar checker written in Rust that runs entirely on-device with millisecond lint times. It ships as a language server, JavaScript/Rust libraries, browser and editor extensions, and native apps, with no cloud calls or telemetry.", "when_to_avoid": ["you need grammar checking for languages other than English", "you rely on the deep contextual suggestions of an LLM-powered checker", "you need the broad language coverage of LanguageTool"], "when_to_choose": ["you need privacy-first, fully offline grammar checking", "you want millisecond-speed linting with a tiny memory footprint", "you write in English across editors like Neovim, VS Code, Zed, or Obsidian", "you want to embed grammar checking in a Node, Bun, browser, or Rust project"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/harper", "repo": "Automattic/harper", "role": "main", "score": 89}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "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:11:07.603194+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:07.603194+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:07:12.702418+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76dd24fb1df42e1c59322e583ffd38809236f59f6525e905cac81b6f71dce026", "fetched_at": "2026-08-28T04:11:07.603194+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Automattic/harper"}, {"content_hash": "fddb47dd1954d0cb2c75b2c07f3eff078ff77c6e1562dd43e2d56d0b1c9d9810", "fetched_at": "2026-08-29T08:05:25.576056+00:00", "kind": "homepage", "missing": false, "url": "https://writewithharper.com"}, {"content_hash": "fa18cd7f8ccc558a651ba420806187cffb92299050478c23b6352218ad359bb1", "fetched_at": "2026-08-29T08:05:25.585548+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/about"}, {"content_hash": "ffab931a2c26b1115210d420b91f86382d71d577458b0fa0ce71dddbe2af9be2", "fetched_at": "2026-08-29T08:05:25.588804+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/obsidian"}, {"content_hash": "30f75ea1e465d9044eb6610d4c3a26b95405c9883f4ee31e8c6352ae944eaa59", "fetched_at": "2026-08-29T08:05:25.590326+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/neovim"}, {"content_hash": "6d87e0926d229ac6a0c6c4d03ea9e0bad37fbea7594f6c26ca634dc1d08cc9f1", "fetched_at": "2026-08-29T08:05:25.591948+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/wordpress"}, {"content_hash": "e73860ee73748ae579b3b1df3590827b347da812c0aab39fd65d6cf503030b7f", "fetched_at": "2026-08-29T08:05:25.593454+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/integrations/zed"}, {"content_hash": "10b5970a3289c0f8d34979f8dc8ac48c66da238419a0be93ca8f0ca78a58cba0", "fetched_at": "2026-08-29T08:05:25.594956+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/contributors/introduction"}, {"content_hash": "87cf8a46ce1b88d1af291d4d31f04aad45fcc33fb66533615b8a4e82ae3b35e7", "fetched_at": "2026-08-29T08:05:25.596714+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/docs/rules"}, {"content_hash": "76ccae5a0e18b9808f9dc07aee68850d3351a751ac59631334c34171b271b149", "fetched_at": "2026-08-29T08:05:25.587297+00:00", "kind": "site_page", "missing": false, "url": "https://writewithharper.com/get"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 74, "rhythm": 85}, "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": 1046, "days_push": 7, "days_rel": 20, "gap_med": 5.0, "n_releases_24m": 93}, "score": 89, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}