{"id":51051644,"url":"https://github.com/bugthesystem/dygit","last_synced_at":"2026-06-22T17:32:35.491Z","repository":{"id":361859371,"uuid":"1255763405","full_name":"bugthesystem/dygit","owner":"bugthesystem","description":"Did you get it? — An AI IDE plugin that quietly fixes messy prompts — typos, dropped words, thumb-typed, half-awake — so Claude gets it the first time","archived":false,"fork":false,"pushed_at":"2026-06-01T15:54:02.000Z","size":1662,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T13:33:44.189Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bugthesystem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-01T06:39:36.000Z","updated_at":"2026-06-02T16:03:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bugthesystem/dygit","commit_stats":null,"previous_names":["bugthesystem/dygit"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bugthesystem/dygit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugthesystem%2Fdygit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugthesystem%2Fdygit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugthesystem%2Fdygit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugthesystem%2Fdygit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bugthesystem","download_url":"https://codeload.github.com/bugthesystem/dygit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugthesystem%2Fdygit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34659896,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-22T17:32:35.413Z","updated_at":"2026-06-22T17:32:35.475Z","avatar_url":"https://github.com/bugthesystem.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" width=\"80\" height=\"80\" alt=\"did-you-get-it\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003edid-you-get-it\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Fixes typos in your prompts before your AI editor sees them. Locally, no AI, no token cost.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Works in Claude Code, Cursor, and OpenCode.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/bugthesystem/dygit/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/bugthesystem/dygit?label=release\" alt=\"release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT\"\u003e\n\u003c/p\u003e\n\n---\n\nYou type:\n\n```\nfix teh aut hbug wehn usr lgs ut\n```\n\nThe model reads:\n\n```\nfix the auth bug when user logs out\n```\n\nYour original text stays in the transcript. Nothing is sent anywhere.\n\n## How it works\n\nA small Rust binary runs on each prompt and corrects it in two passes:\n\n1. **A curated table** of unambiguous keyboard slips — `teh → the`, `wehn → when`,\n   `usr → user` — fixed instantly, offline.\n2. **[symspell]** against an 82k-word frequency dictionary for everything else.\n   Real words are in the dictionary, so they're left alone: `form`, `route`, and\n   `stable` are never \"corrected\" into something else.\n\nA space-repair pass also re-joins split tokens (`aut hbug → auth bug`), but only\nwhen both halves are real words. Ambiguous input is left untouched — the binary\nwon't guess.\n\nIn Claude Code and Cursor the cleaned reading is passed to the model as\nside-channel context, so your original prompt stays visible. In OpenCode (which has\nno such channel) the message is rewritten inline, and only for high-confidence\nfixes.\n\nThe 82k-word dictionary takes ~½s to load, so a resident daemon loads it once and\nanswers over a Unix socket in under a millisecond. Until it's warm, the table\ncovers you. On any error the binary stays silent and your prompt goes through\nuntouched.\n\n## Why\n\n- **No AI in the spell-check.** It's a lookup table and an edit-distance algorithm.\n  The model is never asked to fix a typo.\n- **No token cost.** Correction is local computation. A messy prompt adds a short\n  hint to the request you were already sending; a clean prompt adds nothing.\n- **Private.** Runs on your machine. No network, no telemetry, no API key.\n- **One binary, three editors.** Same engine behind every integration.\n\n## Install\n\nGet the binary (macOS \u0026 Linux, arm64 + x64):\n\n```sh\nbrew tap bugthesystem/dygit https://github.com/bugthesystem/dygit\nbrew install dygi\n```\n\nOr [build from source](#build). Then wire it into your editor.\n\n### Claude Code\n\n```sh\nclaude plugin marketplace add bugthesystem/dygit\nclaude plugin install did-you-get-it@dygit-local\n```\n\nInstalls the prompt hook and four slash commands ([below](#commands)).\n\n### Cursor\n\nCursor 1.7+ has an equivalent prompt hook. Point `.cursor/hooks.json` (project) or\n`~/.cursor/hooks.json` (global) at the wrapper:\n\n```jsonc\n{\n  \"version\": 1,\n  \"hooks\": {\n    \"beforeSubmitPrompt\": [\n      { \"command\": \"bash /absolute/path/to/dygit/hooks/run.sh\" }\n    ]\n  }\n}\n```\n\nA ready-to-copy `.cursor/hooks.json` ships in this repo.\n\n### OpenCode\n\n```sh\ncp opencode/dygi.js ~/.config/opencode/plugins/    # or .opencode/plugins/ per project\n```\n\nOpenCode rewrites the message inline (no side-channel), so it only acts on\nhigh-confidence fixes. See [`opencode/README.md`](opencode/README.md).\n\n### Editor support\n\n| Editor | Status | Mechanism |\n|---|---|---|\n| Claude Code | full | `UserPromptSubmit` hook → `additionalContext` |\n| Cursor | full | `beforeSubmitPrompt` hook → `additionalContext` |\n| OpenCode | full | `chat.message` plugin → inline rewrite (high-confidence only) |\n| VS Code | not yet ([#1][i1]) | the Chat API has no pre-send hook; participants only fire on explicit `@mention` |\n| Windsurf | not yet ([#2][i2]) | the `pre_user_prompt` hook can block or log, but cannot modify the prompt |\n\nThe binary is editor-agnostic — if VS Code or Windsurf add a pre-send hook that can\ninject context or rewrite the prompt, wiring them up is a small shim. Both are\ntracked and **up for grabs** — see [#1][i1] and [#2][i2].\n\n[i1]: https://github.com/bugthesystem/dygit/issues/1\n[i2]: https://github.com/bugthesystem/dygit/issues/2\n\n## Commands\n\nClaude Code only:\n\n| Command | Does |\n|---|---|\n| `/did-you-get-it:history [N]` | recent cleanups, `original → cleaned` |\n| `/did-you-get-it:stats` | totals, top tokens, interpretation rate |\n| `/did-you-get-it:toggle [on·off·verbose·quiet·aggressive·gentle]` | settings (no arg shows state) |\n| `/did-you-get-it:undo` | last original prompt, verbatim, to re-send |\n\nState lives in `~/.claude/plugins/data/did-you-get-it/`.\n\nThe binary also works standalone:\n\n```sh\necho \"fix teh bug\" | dygi correct\n# {\"original\":\"fix teh bug\",\"cleaned\":\"fix the bug\",\"verdict\":\"trivial\",\"changed\":true}\n```\n\n## Build\n\n```sh\n./scripts/build-all.sh          # all platforms (needs cross toolchains)\n```\n\nBinaries land in `bin/`; the hook picks the right one from `uname`. CI builds all\nfour platforms on every tag.\n\n\u003e macOS strips a binary's adhoc signature when it's copied, and the kernel then\n\u003e kills it on launch. Re-sign with `codesign --force --sign - \u003cbinary\u003e`;\n\u003e `build-all.sh` does this for the darwin targets.\n\n## License\n\n[MIT](LICENSE) © bugthesystem\n\n[symspell]: https://crates.io/crates/symspell\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbugthesystem%2Fdygit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbugthesystem%2Fdygit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbugthesystem%2Fdygit/lists"}