harper
AGENTS.md17k starsChanged 5 months agoApache-2.0View on GitHub
This repository’s documentation site is powered by Vite + SvelteKit + SveltePress. Use packages/web/vite.config.ts as the source of truth for documentation scope: - Sidebar and important doc routes are defined in packages/web/vite.config.ts. - Route /docs/... maps to packages/web/src/routes/docs/.... - Most docs are in +page.md; some are +page.svelte or route helpers. If you are working on the Harper repository itself, please pay special attention to the contributors/* pages. Importantly, all the tools available in this repository are available via just. To…
We split this AGENTS.md into the rules it gives an agent
22 rules. About 0 are common, 9 are distinctive, and 13 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 5
Use packages/web/vite.config.ts as the source of truth for documentation scope:
- Very specific: line 10
If you are working on the Harper repository itself, please pay special attention to the contributors/* pages.
- Very specific: line 13
If just format fails, you can use just setup to prepare the relevant dependencies.
- Distinctive: line 117
Read the Desktop contributor documentation for the app's architecture and its relationship to the Cargo workspace.
- Very specific: line 121
Use pnpm for frontend packages.
- Very specific: line 123
Start the highlighter process directly: just dev-desktop-highlighter from repo root.
- Very specific: line 193
Keep dictionary construction centralized through Config::dictionary_from_user_dictionary(user_dictionary: MutableDictionary) -> …
- Very specific: line 194
Keep linter construction centralized through Config::create_linter().
- Very specific: line 196
Do not use Document::new_markdown_default_curated(text) in the main highlighter lint callback when user dictionary words should suppress …
- Distinctive: line 213
Avoid mixing behavior fixes with structural refactors in the highlighter.
- Distinctive: line 222
When asked to write a new rule, keep these guidelines in mind:
- Very specific: line 227
After adding a new rule, update harper-core/default_config.json so it is enabled in the curated default config.
- Distinctive: line 229
If the rule is related to a closed compound noun, see if you can just add an entry to the existing closed compound linter.
- Very specific: line 233
ALWAYS run extensive bullet tests with cargo run --bin harper-cli --release -- lint <TEXT> to make sure the new rule isn't already covered …
- Distinctive: line 239
Keep the expression minimal but precise.
- Distinctive: line 240
If a wordlist is needed, include it as its own expression, used with an expression reference.
- Very specific: line 244
Use strategy "Exact" when casing must be normalized.
- Distinctive: line 249
Prefer a mix of casing, punctuation, whitespace, and nearby-token variations.
- Distinctive: line 252
Ensure exceptions do not block valid matches.
- Distinctive: line 253
Ensure replacements are correct and not destructive.
- Very specific: line 260
Write a Weir rule to a new file with a name of your choosing, including expr main, let fields, and tests.
- Very specific: line 264
Before finishing your turn, run just format or cargo fmt if you have made any changes.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Harper Docs Map for Agents
This repository’s documentation site is powered by Vite + SvelteKit + SveltePress.
Use packages/web/vite.config.ts as the source of truth for documentation scope:
- Sidebar and important doc routes are defined in
packages/web/vite.config.ts. - Route
/docs/...maps topackages/web/src/routes/docs/.... - Most docs are in
+page.md; some are+page.svelteor route helpers.
If you are working on the Harper repository itself, please pay special attention to the contributors/* pages.
Importantly, all the tools available in this repository are available via just. To learn more, run just --list.
Whenever agents are done making changes, they should run just format before handing work back to the user.
If just format fails, you can use just setup to prepare the relevant dependencies.
Human coders should periodically review this file and manually migrate stable, human-facing guidance into the real documentation website under packages/web so it is available outside agent workflows.
Agents should remind humans of this when possible.
Read First
packages/web/vite.config.ts: Sidebar source of truth and canonical map of important docs routes.packages/web/src/routes/docs/about/+page.md: High-level product overview, privacy model, versioning policy, and ecosystem context.packages/web/src/routes/docs/weir/+page.md: Weir rule language reference with syntax, expression types, and examples.packages/web/src/routes/docs/rules/+page.svelte: Live/generated rule catalog (rule names, defaults, and descriptions).packages/web/src/routes/docs/contributors/introduction/+page.md: Entry point for contributors and links to deeper contributor docs../AGENT_POLICY.md: Harper's policy on code generated by large language models. Agents MUST read this before making ANY changes.
Core Documentation Directories
packages/web/src/routes/docs/aboutpackages/web/src/routes/docs/weirpackages/web/src/routes/docs/rulespackages/web/src/routes/docs/integrationspackages/web/src/routes/docs/harperjspackages/web/src/routes/docs/contributors
Route Prefix to File Prefix
/docs/about->packages/web/src/routes/docs/about/+page.md/docs/weir->packages/web/src/routes/docs/weir/+page.md/docs/rules->packages/web/src/routes/docs/rules/+page.svelte/docs/integrations/*->packages/web/src/routes/docs/integrations/*/+page.md/docs/harperjs/*->packages/web/src/routes/docs/harperjs/*/+page.md/docs/contributors/*->packages/web/src/routes/docs/contributors/*/+page.md
Files Listed in the Sidebar (Local)
packages/web/src/routes/docs/about/+page.md: High-level product overview, privacy model, versioning policy, and ecosystem context.packages/web/src/routes/docs/weir/+page.md: Weir rule language reference with syntax, expression types, and examples. Very important if you're asked to write a Weir rule.packages/web/src/routes/docs/rules/+page.svelte: Live/generated rule catalog (rule names, defaults, and descriptions).packages/web/src/routes/docs/integrations/obsidian/+page.md: Obsidian plugin overview, privacy/value comparison, installation, and support links.packages/web/src/routes/docs/integrations/chrome-extension/+page.md: End-user Chrome extension overview and install link.packages/web/src/routes/docs/integrations/firefox-extension/+page.md: End-user Firefox extension overview and install link.packages/web/src/routes/docs/integrations/wordpress/+page.md: Current WordPress guidance, including migration recommendation to Chrome extension and legacy plugin status.packages/web/src/routes/docs/integrations/language-server/+page.md:harper-lsinstall methods, dictionaries, code actions, ignore comments, and full configuration reference.packages/web/src/routes/docs/integrations/visual-studio-code/+page.md: VS Code extension install, command list, and settings reference.packages/web/src/routes/docs/integrations/neovim/+page.md: Neovim setup usingharper-ls, plus optional and common config tweaks.packages/web/src/routes/docs/integrations/helix/+page.md: Helix setup usingharper-ls, plus optional and common config tweaks.packages/web/src/routes/docs/integrations/emacs/+page.md: Emacs setup usingharper-ls, plus optional and common config tweaks.packages/web/src/routes/docs/integrations/zed/+page.md: Zed extension entry point and link to canonical extension README.packages/web/src/routes/docs/integrations/sublime-text/+page.md: Sublime Text setup withharper-lsand LSP package configuration.packages/web/src/routes/docs/harperjs/introduction/+page.md:harper.jsmission, package overview, and installation starting point.packages/web/src/routes/docs/harperjs/linting/+page.md: Coreharper.jslint workflow and linter usage patterns.packages/web/src/routes/docs/harperjs/spans/+page.md: Explains span objects and how to use them to locate/handle lint ranges.packages/web/src/routes/docs/harperjs/configurerules/+page.md: How to programmatically read and setLintConfigto enable/disable rules.packages/web/src/routes/docs/harperjs/node/+page.md: Node.js-specific usage notes, especiallyLocalLintervsWorkerLinter.packages/web/src/routes/docs/harperjs/CDN/+page.md: Browser/CDN usage via unpkg and ESM import patterns.packages/web/src/routes/docs/contributors/introduction/+page.md: Contributor onboarding overview and links to architecture/testing/rule-authoring docs.packages/web/src/routes/docs/contributors/environment/+page.md: Local development environment setup across Rust, Node/pnpm, and optional Nix shell.packages/web/src/routes/docs/contributors/committing/+page.md: Commit message conventions and commit hygiene requirements.packages/web/src/routes/docs/contributors/architecture/+page.md: System architecture and roles of core components likeharper-core,harper-ls, andharper.js.packages/web/src/routes/docs/contributors/dictionary/+page.md: Process for adding or updating curated dictionary entries.packages/web/src/routes/docs/contributors/testing-strategy/+page.md: Harper's risk-driven testing strategy, covering automated checks, production feedback, manual testing, and testability.packages/web/src/routes/docs/contributors/author-a-rule/+page.md: Step-by-step workflow for implementing and testing new grammar rules.packages/web/src/routes/docs/contributors/visual-studio-code/+page.md: How to run, debug, test, and package the VS Code extension locally.packages/web/src/routes/docs/contributors/chrome-extension/+page.md: Internal architecture and local development notes for the browser extensions.packages/web/src/routes/docs/contributors/desktop/+page.md: Placeholder for Harper Desktop contributor documentation.packages/web/src/routes/docs/contributors/website/+page.md: Local development, preview, and validation for writewithharper.com (SvelteKit/SveltePress).packages/web/src/routes/docs/contributors/wordpress/+page.md: How to build and run the WordPress plugin locally.packages/web/src/routes/docs/contributors/obsidian/+page.md: Obsidian-plugin contributor workflow and plugin-specific constraints.packages/web/src/routes/docs/contributors/review/+page.md: PR reviewer playbook, including ways to fetch artifacts and test patches locally.packages/web/src/routes/docs/contributors/local-stats/+page.md: Local stats logging model,stats.txtformat, locations, and privacy behavior.packages/web/src/routes/docs/contributors/brill/+page.md: Brief explanation of Harper’s Brill-tagging approach and further reading link.packages/web/src/routes/docs/contributors/faq/+page.md: Contributor FAQ for conceptual distinctions (for exampleLintervsPatternLinter).
Documentation Route Helpers (Non-+page.md)
packages/web/src/routes/docs/about/+page.ts: Route behavior helper (ssr = false) for the About page.packages/web/src/routes/docs/harperjs/CDN/example/+server.ts: Serves the HTML example used by theharper.jsCDN documentation page.
External Sidebar Targets (No Local Source File)
https://docs.rs/harper-core/latest/harper_core//docs/harperjs/ref/index.html(generated API reference target)
Projects Contained in This Repository
harper-core: The core grammar checking engine. This is a dependency to pretty much everything related to Harper.harper-ls: A Language Server compatible with a number of text editors, including Neovim, Zed, and Helix. See above linked documentation for more details.harper-cli: A command-line binary for debugging Harper's core engine and markup language support.harper-comments: Provides parsers for a number of programming languages to support linting their comments.harper-wasm: The WebAssembly build target that powers browser and JavaScript integrations such asharper.js.packages/lint-framework: A package containing the tooling necessary to read/write/highlight text on the web for the purpose of linting.packages/components: Shared Svelte component package used by web-facing packages.packages/harper-editor: Shared Svelte editor package used by web-facing packages and Harper Desktop.packages/web: The Harper website, including documentation and a live demo that uses thelint-framework.packages/harper.js: The JavaScript package that usesharper-wasmto lint text from websites or Node.js processes.packages/chrome-plugin: The Harper Chrome Extension - uses thelint-framework. Also support Firefox.packages/obsidian-pluginpackages/wordpress-pluginpackages/vscode-plugin: The Harper Visual Studio Code plugin. Usesharper-ls.harper-desktop: The Harper Desktop app. It is a Tauri v2 + SvelteKit SPA with an offline editor, settings UI, tray/service control, and native overlay highlighter.
There are of course projects in this repository not listed above. If relevant, feel free to poke around.
Harper Desktop
Read the Desktop contributor documentation for the app's architecture and its relationship to the Cargo workspace.
Commands
- Use
pnpmfor frontend packages;harper-desktop/package.jsonpinspnpm@10.10.0. - Dev app:
just dev-desktopfrom repo root. It builds shared web packages, runscargo tauri dev, and Tauri then runspnpm devon port1420. - Start the highlighter process directly:
just dev-desktop-highlighterfrom repo root. - Frontend checks:
pnpm checkfromharper-desktop. - Frontend build only:
pnpm buildfromharper-desktop. - Full desktop checks:
just check-desktopfrom repo root. - Bundle builds match CI:
just build-desktop-linuxorjust build-desktop-macos. just build-desktop-linuxbuilds deb/rpm/appimage bundles.just build-desktop-macosbuilds app/dmg bundles.
Architecture
- It is a SvelteKit SPA inside Tauri v2.
- SSR is disabled in
harper-desktop/src/routes/+layout.ts. harper-desktop/svelte.config.jsusesadapter-staticwithfallback: "index.html".- Main Rust entrypoint is
harper-desktop/src-tauri/src/main.rs, which callsharper_desktop_lib::run(). - CLI behavior is in
harper-desktop/src-tauri/src/lib.rs: no subcommand runs the normal Tauri app;highlighterruns the native overlay highlighter. - Tauri config lives in
harper-desktop/src-tauri/tauri.conf.json. - Tauri capabilities live in
harper-desktop/src-tauri/capabilities/default.json. - The main Svelte route is
harper-desktop/src/routes/+page.svelte; it switches between the settings UI and editor UI. - The editor UI lives in
harper-desktop/src/lib/EditorView.svelteand uses workspace dependencies onharper.jsandharper-editor. - The settings UI lives under
harper-desktop/src/lib/settings/. - Rust uses local workspace dependencies from
harper-desktop/src-tauri/Cargo.toml, includingharper-coreandharper-dictionary-wordlist. - The Tauri app starts a tray/menu-bar controlled highlighter service on launch and can open editor/settings windows from the tray.
- Editor and settings windows hide on close instead of exiting; quit is handled through the tray menu.
Highlighter Architecture
- The highlighter is Rust/egui/winit code under
harper-desktop/src-tauri/src/highlighter/. Highlighteris the public entry point for the overlay system.Windowowns native window/GPU plumbing.WindowManagerowns the winit event loop, monitor windows, cursor hit-testing, and popup selection.RenderStateowns highlight rendering, popup drawing, markdown rendering cache, and popup action dispatch.RenderStateusesActionableLintvalues fromharper-desktop/src-tauri/src/rect.rs.ActionableLintstores lint geometry, the HarperLint, and source text needed for suggestion application and popup actions.- Suggestion popup actions currently include close, apply suggestion, ignore lint, add to dictionary, disable rule, and refresh config.
- Popup hover text is implemented in
RenderStatebutton helpers. - The highlighter read interval is set in
run_highlighter()withwith_read_interval(Duration::from_millis(16)).
OS Integration
- OS integration is behind
harper-desktop/src-tauri/src/os_broker.rs. - macOS uses
harper-desktop/src-tauri/src/mac_broker.rs. - non-macOS currently uses
NoopBroker. - macOS highlighter focus handling depends on
MacBroker.last_focused; clicking the overlay can make the highlighter process focused, so accessibility reads fall back to the last non-highlighter PID. - macOS integrations are bundle-ID based and controlled by persisted
Integrationentries. - Highlighter stdout is reserved for JSON-line IPC. Diagnostics in highlighter paths should use
eprintln!, notprintln!.
IPC And App State
- Tauri app state lives in
harper-desktop/src-tauri/src/config.rs. Configcurrently storesmutable_dictionary: MutableDictionary,dialect: Dialect,ignored_lints: IgnoredLints,lint_config: FlatConfig, andintegrations: Vec<Integration>.Config::new()usesMutableDictionary::new(),Dialect::American,IgnoredLints::new(),FlatConfig::new_curated(), and curated default integrations.- Config is persisted under the system config directory in a
harper-desktopfolder. Main settings are serialized toconfig.json; the mutable dictionary is stored separately asdictionary.txt. Config::load_from_system()loads the serialized config and then hydrates the mutable dictionary with the selected dialect.- The Tauri app owns shared config as
Arc<Mutex<Config>>. run_tauri()loads persisted config, createsHighlighterService, starts the highlighter service, and creates the tray/menu-bar UI.- The highlighter process is spawned through
harper-desktop/src-tauri/src/highlighter_process.rs. - IPC is implemented under
harper-desktop/src-tauri/src/communication/. - IPC uses newline-delimited JSON over child stdin/stdout.
- The Tauri app is the protocol server.
- The highlighter process is the protocol client.
- Protocol messages live in
harper-desktop/src-tauri/src/communication/message.rs. - Supported requests include
GetLintConfig,GetDictionary,GetDialect,GetIgnoredLints,GetIntegrations,SetLintConfig,IgnoreLint,AddToDictionary,AddIntegration,RemoveIntegration, andSetIntegrationEnabled. - Supported responses include
GetLintConfig,GetDictionary,GetDialect,GetIgnoredLints,GetIntegrations, andAck. IgnoredLintsis transferred as whole serialized state and merged server-side.AddToDictionarysends only the word; Rust appends it withDictWordMetadata::default().- The highlighter uses a Tokio current-thread runtime to call async IPC client methods from synchronous UI callbacks.
- That runtime is bridge plumbing only; it is not used for linting or UI rendering.
Dictionary And Linting Gotchas
- Keep dictionary construction centralized through
Config::dictionary_from_user_dictionary(user_dictionary: MutableDictionary) -> Arc<MergedDictionary>andConfig::create_dictionary(). - Keep linter construction centralized through
Config::create_linter(). - The same merged dictionary source must be used for both
Document::new_markdown_default(text, &dictionary)andLintGroup::new_curated(dictionary, dialect). - Do not use
Document::new_markdown_default_curated(text)in the main highlighter lint callback when user dictionary words should suppress spelling lints. - Harper spelling lint behavior depends on document token metadata, so a linter with the updated dictionary is not enough if the
Documentwas built with the curated dictionary only. RenderStatemay still use curated document construction for localized source extraction where dictionary membership does not matter.
Frontend Integration
- Tauri commands in
harper-desktop/src-tauri/src/lib.rsincludeget_lint_config,get_dialect,set_dialect,set_lint_config,get_dictionary,set_dictionary,ignore_lint,add_to_dictionary,get_integrations,add_integration,remove_integration, andset_integration_enabled. - JS helper lives in
harper-desktop/src/lib/client.ts. - JS helper class is named
Clientand exposes static methods for lint config, dialect, dictionary, ignored lints, dictionary additions, and integrations. Client.ignoreLint(...)uses Harper JS ignored-lints export data and invokes the Rust command.Client.addToDictionary(word)sends only the word to Rust.- Vite's dev server must stay on port
1420;harper-desktop/vite.config.jsusesstrictPort: truebecause Tauri expects that port. - Vite intentionally ignores
src-tauri/**during frontend file watching.
Repo-Specific Gotchas
- CI installs
wasm-pack,tauri-cli, andcargo-hackwithcargo binstall, then runs the relevant rootjusttask. - Avoid mixing behavior fixes with structural refactors in the highlighter; popup/UI, IPC, dictionary behavior, config persistence, settings UI, and OS-coordinate fixes are easier to review separately.
Known Review Findings
- Secondary-monitor highlighter coordinates may be wrong. Accessibility rectangles appear to be global screen coordinates, while each overlay window's egui origin is local to that monitor/window. Translate by monitor/window origin or render through one virtual-desktop-sized overlay.
- macOS text range lookup may be wrong after emoji or other non-BMP characters. Harper spans are char-based, while macOS accessibility ranges are NSString/UTF-16 based. Convert spans before calling
AXBoundsForRangeParameterizedAttribute.
On Writing New Rules
When asked to write a new rule, keep these guidelines in mind:
- The user is almost always expecting you to write it to a file. Which file and where is up to you to find out.
- You should include at least 15 total tests, covering a wide variety of cases. Cover false-positives, false negatives, true positives, and if relevant, true negatives.
- You should run any and all tests to ensure that you do no break existing behavior and that your new rule runs the way you expect. At minimum, that means
just test-rust. Make sure to check the snapshots for changes. - After adding a new rule, update
harper-core/default_config.jsonso it is enabled in the curated default config. - Built-in Weir rules can be grouped by putting related
.weirfiles in a directory underharper-core/src/linting/weir_rules; the directory name becomes the single public rule name. - If the rule is related to a closed compound noun, see if you can just add an entry to the existing closed compound linter.
Unless you are specifically requested to write the rule in a specific way, choose the language (Rust or Weir) and methodology that fits the task.
ALWAYS run extensive bullet tests with cargo run --bin harper-cli --release -- lint <TEXT> to make sure the new rule isn't already covered by Harper.
Workflow for Writing Weir Rules
- Draft the core expression
- Encode the match with
expr mainusing words, sequences, alternatives, filters, exceptions, POS tags, wildcards, or punctuation. - Keep the expression minimal but precise; avoid overmatching.
- If a wordlist is needed, include it as its own expression, used with an expression reference.
- Add rule metadata
let message,let description,let kind,let becomes(andlet strategyif needed).- Use
strategy "Exact"when casing must be normalized; otherwise default behavior orMatchCaseas appropriate.
- Add tests (required)
- Include at least 15 tests.
- Tests must cover: true positives, false positives, false negatives, and (if relevant) true negatives.
- Prefer a mix of casing, punctuation, whitespace, and nearby-token variations.
- Sanity-check edge cases
- Ensure exceptions do not block valid matches.
- Ensure replacements are correct and not destructive.
- Run the tests.
- Fix any issues that arise.
Output Format
Write a Weir rule to a new file with a name of your choosing, including expr main, let fields, and tests. Make sure it has the extension .weir.
Tips
Before finishing your turn, run just format or cargo fmt if you have made any changes. This can help diffs if a human decides to make a commit.
Try to write in a functional style. Minimize adding state whenever it is possible while also respecting the user's query. If additional state is necessary, please centralize it to increase visibility.
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about Automattic/harper
- Better Stack“Harper: The Free, Private Grammarly Alternative Built in Rust”YouTube · Jul 22, 2026 · 31k views
- Forkcast“Grammarly sends everything you type to their servers #RustLang #SystemsProgramming”YouTube · Aug 29, 2026 · 1.1k views
- GithubTrends“Grammarly Charges $30 - Harper Does It Free 📝 #Shorts”YouTube · Jun 30, 2026 · 996 views
- Somya Nayak“Somebody open sourced Grammarly and it has over 15k stars on GitHub.”YouTube · Oct 10, 2026 · 324 views
- Repo Rundown“Private, Fast Grammar Checks - Harper #github #opensource #coding #ai #developers #shorts #trending”YouTube · Jul 24, 2026 · 320 views
The biggest 5 of 108 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 108
Talked about on GitHub, Bluesky, YouTube, the web and Hacker News (108 times).
On GitHub · 50
- Mar 30, 2025add harper-ls as a client — emacs-lsp/lsp-mode5 reactions · 15 comments
- Feb 11, 2025harper: 0.19.1 -> 0.20.0, only publish harper-ls — NixOS/nixpkgs4 reactions · 1 comment
- Oct 26, 2025Update Request: harper 0.34.1 → 0.70.0 — NixOS/nixpkgs3 reactions · 2 comments
- Oct 22, 2025harper: 0.68.0 -> 0.70.0 — NixOS/nixpkgs2 reactions · 2 comments
- Jun 13, 2025harper: 0.41.0 -> 0.42.0 — NixOS/nixpkgs2 reactions · 1 comment
45 more on GitHub
- Jun 3, 2025`UriExt::to_file_path` is crashing on a missing authority field. — tower-lsp-community/tower-lsp-server2 reactions · 3 comments
- May 6, 2025Harper integration — futo-org/android-keyboard2 reactions · 1 comment
- Apr 9, 2025Harper integration for grammar checking — saga-soft/novelWriter2 reactions · 7 comments
- Feb 26, 2025harper: 0.22.0 -> 0.25.1 — NixOS/nixpkgs2 reactions · 2 comments
- Dec 30, 2024feat: Update Harper's Supported Languages — neovim/nvim-lspconfig2 reactions · 2 comments
- Jun 24, 2026harper: 2.5.0 -> 2.6.0 — NixOS/nixpkgs1 reaction · 1 comment
- Mar 13, 2026Add to Dictionary — MarkEdit-app/MarkEdit-proofreading1 reaction
- Mar 13, 2026Reduce the bundle size — MarkEdit-app/MarkEdit-proofreading1 reaction
- Mar 13, 2026Polish the user interfaces — MarkEdit-app/MarkEdit-proofreading1 reaction
- Mar 13, 2026Harper prototype — MarkEdit-app/MarkEdit-proofreading1 reaction
- Mar 2, 2026feat(harper): add harper-cli config to hk builtin config — jdx/hk1 reaction · 2 comments
- Feb 12, 2026Rules: add a grammar checking rule powered by `harper-core` (Harper) — rvben/rumdl1 reaction · 1 comment
- Jan 22, 2026harper: 1.4.1 -> 1.5.1 — NixOS/nixpkgs1 reaction · 17 comments
- Dec 4, 2025feat: Add harper-ls as user defined ls — redhat-developer/lsp4ij1 reaction
- Dec 1, 2025Cache parsed tree-sitter nodes to avoid recomputing tree on lsp action — neocmakelsp/neocmakelsp1 reaction · 2 comments
- Nov 18, 2025Synchronize Dark Mode With System — SveltePress/sveltepress1 reaction
- Nov 14, 2025harper: 0.71.0 -> 1.0.0 — NixOS/nixpkgs1 reaction · 6 comments
- Oct 17, 2025Release new version and upload to crates.io — gbprod/tree-sitter-gitcommit1 reaction
- Sep 7, 2025please add harper support — sonnyp/Eloquent1 reaction · 3 comments
- Aug 18, 2025harper: 0.57.0 -> 0.58.0 — NixOS/nixpkgs1 reaction
- Aug 14, 2025harper: 0.56.0 -> 0.57.0 — NixOS/nixpkgs1 reaction
- May 27, 2025harper: 0.38.0 -> 0.40.0 — NixOS/nixpkgs1 reaction · 1 comment
- Feb 11, 2025harper: 0.19.1 -> 0.20.0 — NixOS/nixpkgs1 reaction
- Jan 23, 2025harper: 0.16.0 -> 0.17.0 — NixOS/nixpkgs1 reaction
- Oct 28, 2026Bump the minor-and-patch group across 1 directory with 8 updates — ian-hoang/resumezip0 reactions
- Oct 27, 2026harper-desktop: 2.13.0 -> 3.0.0 — NixOS/nixpkgs0 reactions
- Oct 27, 2026harper 3.0.0 — Homebrew/homebrew-core0 reactions · 1 comment
- Oct 26, 2026build(deps): bump the rust-deps group across 1 directory with 12 updates — KaiErikNiermann/LangCheck0 reactions · 2 comments
- Oct 26, 2026Bump harper-core from 1.7.0 to 2.11.0 in /engine — jn-aman/parzr0 reactions · 1 comment
- Oct 25, 2026deps: Bump the cargo-minor group across 1 directory with 11 updates — leavesofgrass/textweaver0 reactions
- Oct 24, 2026Bump harper.js from 2.10.0 to 2.13.0 — Bigsy/weirsmith0 reactions
- Oct 22, 2026Bump harper.js from 2.10.0 to 2.13.0 — yannickYamo/atelier0 reactions
- Oct 22, 2026Bump the rust-dependencies group across 1 directory with 5 updates — jere344/grammalocal0 reactions
- Oct 21, 2026build(deps-dev): bump the development-dependencies group with 2 updates — ZenNotes/zennotesandroid0 reactions
- Oct 21, 2026chore(deps-dev): bump harper.js from 2.10.0 to 2.13.0 in the development-dependencies group — ZenNotes/zennotesios0 reactions
- Oct 19, 2026Bump harper-core from 1.7.0 to 2.13.0 in /engine — jn-aman/parzr0 reactions · 2 comments
- Oct 19, 2026chore(deps): bump harper.js from 2.10.0 to 2.13.0 — lucasfth/portfolio0 reactions · 2 comments
- Oct 19, 2026build(deps): bump harper-core from 2.11.0 to 2.13.0 — hippietrail/harper-c0 reactions
- Oct 19, 2026deps(cargo)(deps): bump harper-core from 2.11.0 to 2.13.0 in /src-tauri — waleedmandour/scholarscribe0 reactions · 1 comment
- Oct 16, 2026harper 2.13.0 — Homebrew/homebrew-core0 reactions · 1 comment
- Oct 16, 2026harper: 2.12.0 -> 2.13.0 — NixOS/nixpkgs0 reactions · 2 comments
- Oct 11, 2026Add native right-click suggestions and 2026 terminology dictionary — BenderFendor/obsidian_spellcheck0 reactions
- Oct 6, 2026Embed https://github.com/Automattic/harper for prose linting? — joodaloop/joodalint0 reactions
- Oct 5, 2026deps(rust): Bump harper-core from v2.11.0 to v2.12.0 in /GrammarEngine — PhilipSchmid/textwarden0 reactions
- Oct 4, 2026Spelling suggestions come only from the REP table and there's no replace action; dictionary affix-expanded at load — BarMal/Serenity0 reactions · 1 comment
On Bluesky · 35
- Aug 19, 2025Saw @imlunahey.com star this repo earlier on GitHub and been trying out the Firefox extension today 👀. Liking it so far, been on the… — @pds.dad22 likes and reposts · 1 reply
- Dec 10, 2024Have you tried github.com/Automattic/h... in VS Code yet? I'm finding it OK. I wish I could do like "this word is fine stop flagging it."… — @chriscoyier.net12 likes and reposts · 2 replies
- Aug 30, 2026Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★14808 https://github.com/Automattic/harper — @rusttrending.bsky.social5 likes and reposts
- Jun 22, 2025Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★5578 https://github.com/Automattic/harper — @rusttrending.bsky.social4 likes and reposts
- Mar 2, 2025Automattic / harper: The Grammar Checker for Developers ★3446 https://github.com/Automattic/harper — @rusttrending.bsky.social4 likes and reposts
30 more on Bluesky
- Sep 19, 2026📦 Automattic / harper ⭐ 15,638 (+97) 🗒 Rust Offline, privacy-first grammar checker. Fast, open-source, Rust-powered — @github-trending-rs.bsky.social3 likes and reposts
- Sep 6, 2025Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★8031 https://github.com/Automattic/harper — @rusttrending.bsky.social3 likes and reposts
- Jun 23, 2025Rustで実装された英文法チェックツール。ローカルで完結して動くのでプライバシーに配慮。VSCode/Neovim/Emacs/Obsidianなどの拡張機能も用意されている — @matsuu.bsky.social3 likes and reposts
- Oct 19, 2026📦 Automattic / harper ⭐ 16,741 (+78) 🗒 Rust Offline, privacy-first grammar checker. Fast, open-source, Rust-powered — @github-trending-rs.bsky.social2 likes and reposts
- Sep 13, 2026♻️ RustTrending: Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★15343 github.com/Automattic/… — @klau.si2 likes and reposts
- Sep 13, 2026Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★15343 https://github.com/Automattic/harper — @rusttrending.bsky.social2 likes and reposts
- Sep 9, 2026🔥 Hot Repo! 🔥 (100+ new stars) 📦 Automattic / harper ⭐ 15,174 (+147) 🗒 Rust Offline, privacy-first grammar checker. Fast, open-source,… — @github-trending-rs.bsky.social2 likes and reposts
- Jul 23, 2026🎉 Celebrating! 🎉 (500+ new stars) 📦 Automattic / harper ⭐ 11,840 (+590) 🗒 Rust Offline, privacy-first grammar checker. Fast,… — @github-trending.bsky.social2 likes and reposts · 1 reply
- Feb 26, 2026«Harper» Offline, privacy-first grammar checker. Fast, open-source, Rust-powered. → github.com/Automattic/harper — @remvze.bsky.social2 likes and reposts
- Feb 11, 2026Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★9800 https://github.com/Automattic/harper — @rusttrending.bsky.social2 likes and reposts
- Jan 17, 2026Just found out about Harper. Open source Grammarly written in Rust. github.com/Automattic/h... — @sudonomad.bsky.social2 likes and reposts · 1 reply
- Jan 17, 2026Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★9211 https://github.com/Automattic/harper — @rusttrending.bsky.social2 likes and reposts
- Sep 8, 2025Found out this free and open-source replacement to Grammarly. It's called Harper. I have been using it for a week works beautifully and all… — @vibin-sh.bsky.social2 likes and reposts · 1 reply
- May 22, 2025Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★4304 https://github.com/Automattic/harper — @rusttrending.bsky.social2 likes and reposts
- Apr 24, 2025Automattic / harper: The Grammar Checker for Developers ★3999 https://github.com/Automattic/harper — @rusttrending.bsky.social2 likes and reposts
- Oct 15, 2026📦 Automattic / harper ⭐ 16,433 (+37) 🗒 Rust Offline, privacy-first grammar checker. Fast, open-source, Rust-powered — @github-trending-rs.bsky.social1 likes and repost
- Sep 28, 2026A fast offline grammar checker is a bet on human-loop latency. Writing tools are judged one keystroke at a time. A smarter remote system… — @iam.slys.dev1 likes and repost · 1 reply
- Aug 15, 2026📦 Automattic / harper ⭐ 14,442 (+32) 🗒 Rust Offline, privacy-first grammar checker. Fast, open-source, Rust-powered — @github-trending-rs.bsky.social1 likes and repost
- Aug 9, 2026Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★14288 https://github.com/Automattic/harper — @rusttrending.bsky.social1 likes and repost
- Jul 24, 2026🌐 github.com/Automattic/... #devtools #privacy — @michabbb.bsky.social1 likes and repost
- Jul 23, 2025@blueb@remlit.site :wowza: https://github.com/Automattic/harper — @rexo.st.transbus.social1 likes and repost
- Jul 12, 2025Automattic / harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered ★6881 https://github.com/Automattic/harper — @rusttrending.bsky.social1 likes and repost
- Jul 11, 2025Harper: Offline, privacy-first English grammar checker. Fast, open-source, Rust-powered https://github.com/Automattic/harper — @nono2357.bsky.social1 likes and repost
- May 20, 2025之前有看到一个新的语法检查工具,不过不确定表现如何 github.com/Automattic/h... — @zephyrwong.bsky.social1 likes and repost
- Jan 2, 2025Automattic / harper: The Grammar Checker for Developers ★2673 https://github.com/Automattic/harper — @rusttrending.bsky.social1 likes and repost
- Dec 4, 2024Automattic / harper: The Grammar Checker for Developers ★2039 https://github.com/Automattic/harper — @rusttrending.bsky.social1 likes and repost
- Sep 28, 2026עוד משהו שנתקלתי בו, כשחיפשתי אלטרנטיבה ל־LanguageTool (כלי קוד פתוח מעולה ומקומי להצעות שיפור לכתיבה במגוון שפות — איות, דקדוק, סגנון… — @ruxotves.hed.im.ap.brid.gy0 likes and reposts · 1 reply
- Jul 24, 2026a grammar checker that never phones home. harper is an offline, privacy-first grammar checker in Rust. Milliseconds, on device, your text… — @epicvibecoder.bsky.social0 likes and reposts · 1 reply
- Jul 24, 2026📦 cargo install --locked --git github.com/Automattic/... harper-cli, or scoop install harper on Windows. — @michabbb.bsky.social0 likes and reposts · 1 reply
- Jul 23, 2026🎉 Celebrating! 🎉 (500+ new stars) 📦 Automattic / harper ⭐ 11,840 (+590) 🗒 Rust Offline, privacy-first grammar checker. Fast,… — @github-trending-rs.bsky.social0 likes and reposts · 1 reply
On YouTube · 16
- Jul 22, 2026Harper: The Free, Private Grammarly Alternative Built in Rust — Better Stack31k views · 80 comments
- Aug 29, 2026Grammarly sends everything you type to their servers #RustLang #SystemsProgramming — Forkcast1.1k views · 2 comments
- Jun 30, 2026Grammarly Charges $30 - Harper Does It Free 📝 #Shorts — GithubTrends996 views
- Oct 10, 2026Somebody open sourced Grammarly and it has over 15k stars on GitHub. — Somya Nayak324 views · 3 comments
- Jul 24, 2026Private, Fast Grammar Checks - Harper #github #opensource #coding #ai #developers #shorts #trending — Repo Rundown320 views
11 more on YouTube
- Jul 24, 2026Grammarly는 잊어라: 오프라인 문법 검사기 Harper — Repocast | GitHub 일일 브리핑317 views · 1 comment
- Jul 24, 2026GitHub - Automattic/harper: Offline, privacy-first grammar checker. Fast, open-source, Rust-powered — GitHub Daily Trend AI Podcast257 views · 1 comment
- Sep 29, 2026Harper GitHub Explained: Offline Grammar Checking for Code, Docs, and Comments — Alex Hitt193 views
- Oct 9, 2026Grammarly Premium Alternative for FREE?! — How to Windows120 views
- Oct 22, 2026Free Grammarly Alternative: Harper Grammar Checker — RocketLauncher Tools117 views
- Oct 8, 2026A free, private Grammarly alternative from the WordPress.com team #shorts — AI dabbler68 views
- Oct 18, 2026Harper: offline, privacy‑first grammar checker — Next Horizon61 views · 1 comment
- Jul 24, 2026Unlock Private Writing 🤐 — Vijayakumar J40 views · 1 comment
- Jul 26, 2026FREE Grammarly Alternative: harper saves $12/mo — DevTrends Daily32 views · 1 comment
- Oct 12, 2026Free Alternative to Grammarly (2026): 5 Free Checkers Tested — The Lever Labsays it tested it27 views · 1 comment
- Jul 24, 2026Automattic/harper - Gource visualisation — Gourcer12 views
On the web · 5
- Jan 19, 2026Harper, My New Grammar Checker — chriswiegman.com
- Jul 24, 2025I Found a New Open Source Grammar Checker Tool And ... — itsfoss.com
- Jul 22, 2025Harper Is A Grammar Checker That Is On-device And Open Source — gadgeteer.co.za
- Feb 23, 2025Harper - English grammar checker - LinuxLinks — linuxlinks.com
- Nov 21, 2024Welcoming Harper - Matt Mullenweg — ma.tt
On Hacker News · 2
- Jun 30, 2025Harper: Offline, privacy-first grammar checker. Fast, open-source, Rust4 points
- Jul 14, 2026harper2 points
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

