{"id":49675513,"url":"https://github.com/esengine/deepseek-reasonix","last_synced_at":"2026-05-09T05:13:29.825Z","repository":{"id":352823606,"uuid":"1216785679","full_name":"esengine/deepseek-reasonix","owner":"esengine","description":"DeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.","archived":false,"fork":false,"pushed_at":"2026-05-06T08:59:03.000Z","size":6364,"stargazers_count":387,"open_issues_count":18,"forks_count":24,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-06T09:14:45.021Z","etag":null,"topics":["agent","agent-framework","ai-agent","ai-coding","cli","coding-agent","deepseek","developer-tools","ink","llm","prompt-caching","r1","terminal","tool-use","tui","typescript"],"latest_commit_sha":null,"homepage":"https://esengine.github.io/deepseek-reasonix/","language":"TypeScript","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/esengine.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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},"funding":{"github":"esengine"}},"created_at":"2026-04-21T08:27:02.000Z","updated_at":"2026-05-06T09:01:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/esengine/deepseek-reasonix","commit_stats":null,"previous_names":["esengine/reasonix","esengine/deepseek-reasonix"],"tags_count":86,"template":false,"template_full_name":null,"purl":"pkg:github/esengine/deepseek-reasonix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esengine%2Fdeepseek-reasonix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esengine%2Fdeepseek-reasonix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esengine%2Fdeepseek-reasonix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esengine%2Fdeepseek-reasonix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esengine","download_url":"https://codeload.github.com/esengine/deepseek-reasonix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esengine%2Fdeepseek-reasonix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32719572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T00:29:05.620Z","status":"online","status_checked_at":"2026-05-07T02:00:07.170Z","response_time":62,"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":["agent","agent-framework","ai-agent","ai-coding","cli","coding-agent","deepseek","developer-tools","ink","llm","prompt-caching","r1","terminal","tool-use","tui","typescript"],"created_at":"2026-05-07T02:01:25.121Z","updated_at":"2026-05-09T05:13:29.811Z","avatar_url":"https://github.com/esengine.png","language":"TypeScript","funding_links":["https://github.com/sponsors/esengine"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/logo.svg\" alt=\"Reasonix\" width=\"640\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eEnglish\u003c/strong\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"./README.zh-CN.md\"\u003e简体中文\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://esengine.github.io/DeepSeek-Reasonix/\"\u003eWebsite\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"./docs/ARCHITECTURE.md\"\u003eArchitecture\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"./benchmarks/\"\u003eBenchmarks\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/reasonix\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\" alt=\"npm version\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/esengine/reasonix/ci.yml?style=flat-square\u0026label=ci\u0026color=0d1117\u0026labelColor=161b22\" alt=\"CI\"/\u003e\u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\" alt=\"license\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/reasonix\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\" alt=\"downloads\"/\u003e\u003c/a\u003e\n  \u003ca href=\"./package.json\"\u003e\u003cimg src=\"https://img.shields.io/node/v/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\" alt=\"node\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/esengine/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\u0026logo=github\" alt=\"GitHub stars\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/graphs/contributors\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors/esengine/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\u0026logo=github\" alt=\"contributors\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/discussions\"\u003e\u003cimg src=\"https://img.shields.io/github/discussions/esengine/reasonix.svg?style=flat-square\u0026color=0d1117\u0026labelColor=161b22\u0026logo=github\" alt=\"Discussions\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n\u003ch3 align=\"center\"\u003eA DeepSeek-native AI coding agent for your terminal.\u003c/h3\u003e\n\u003cp align=\"center\"\u003eEngineered around prefix-cache stability — so token costs stay low across long sessions, and you can leave it running.\u003c/p\u003e\n\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/hero-terminal.svg\" alt=\"Reasonix code mode — assistant proposes a SEARCH/REPLACE edit; nothing on disk until /apply\" width=\"860\"/\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n\u003e [!TIP]\n\u003e **Cache stability isn't a feature you turn on; it's an invariant the loop is designed around.** That's the whole reason Reasonix is DeepSeek-only — every layer is tuned to the byte-stable prefix-cache mechanic.\n\n\u003e [!NOTE]\n\u003e **Real user, single day (2026-05-01):** 435M input tokens, **99.82% cache hit**, ~$12 instead of the ~$61 the same workload would cost with no cache on `v4-flash` — see the [case study](./benchmarks/real-world-cache/README.md). DeepSeek provides the cacheable bytes; the four mechanisms in [Pillar 1](./docs/ARCHITECTURE.md#pillar-1--cache-first-loop) are how Reasonix keeps them cacheable across long sessions.\n\n\u003cbr/\u003e\n\n## Web search\n\nReasonix includes `web_search` and `web_fetch` tools. By default it uses **Mojeek** (no setup required). You can switch to a **self-hosted SearXNG** instance — a metasearch engine that aggregates whatever upstream engines your instance is configured for.\n\n### Switching engines (persists to disk)\n\nThe `/search-engine` slash command (alias `/se`) writes your choice to `~/.reasonix/config.json` immediately — it survives restarts:\n\n```\n/search-engine mojeek              # default, no external deps\n/search-engine searxng             # SearXNG at http://localhost:8080\n/search-engine searxng http://192.168.1.100:8888  # custom endpoint\n```\n\nEquivalent `~/.reasonix/config.json`:\n\n```json\n{\n  \"webSearchEngine\": \"searxng\",\n  \"webSearchEndpoint\": \"http://localhost:8080\"\n}\n```\n\nThe tool picks up the change on the next call — no restart needed.\n\n### Starting SearXNG\n\n```sh\npodman run -d --replace --name searxng -p 8080:8080 docker.io/searxng/searxng\n# or: docker run -d -p 8080:8080 searxng/searxng\n```\n\nVerify it's running:\n\n```sh\ncurl http://localhost:8080/search?q=test\n# → HTML search results page\n```\n\n\u003e **Note:** The endpoint must include the protocol (`http://`). `localhost:8080` alone will fail — the tool will show a clear error telling you to install SearXNG if the server is unreachable.\n\n\u003cbr/\u003e\n\n## Install\n\n```bash\ncd my-project\nnpx reasonix code   # paste a DeepSeek API key on first run; persists after\n```\n\nRequires Node ≥ 22. Tested on macOS · Linux · Windows (PowerShell · Git Bash · Windows Terminal). Get a [DeepSeek API key →](https://platform.deepseek.com/api_keys) · `reasonix code --help` for flags.\n\n`npx` is the recommended path — no global install, always picks up the latest version. If you'll use Reasonix daily and want `reasonix` on your `PATH`, run `reasonix update` once and it'll do the `npm install -g` for you.\n\n### Subcommand cheatsheet\n\n| Command | When to use |\n|---|---|\n| `reasonix code [dir]` | Coding agent rooted at a project. **Start here.** |\n| `reasonix chat` | Plain chat — no filesystem tools, just a conversation with persisted history. |\n| `reasonix run \"task\"` | One-shot, streams the answer to stdout. Good for shell pipes. |\n| `reasonix doctor` | Environment health check (Node version, API key, MCP wiring). |\n| `reasonix update` | Upgrade Reasonix itself. |\n\nOther subcommands (`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`) are listed in `reasonix --help` and on the [CLI reference](https://esengine.github.io/DeepSeek-Reasonix/#cli).\n\n**Working in a different folder:** Reasonix scopes filesystem tools to the launch directory. To work elsewhere, pass `--dir`:\n\n```bash\nnpx reasonix code --dir /path/to/project   # or use a relative path\n```\n\nMid-session switching isn't supported by design (the message log + memory paths get tangled with stale roots). Quit and relaunch with a new `--dir` to retarget. `/status` always shows the current pinned workspace.\n\n**Author your first skill:** Skills are markdown playbooks the model can invoke (`/skill \u003cname\u003e`). There's no remote registry yet — you author them directly:\n\n```bash\n/skill new my-skill          # scaffolds \u003cproject\u003e/.reasonix/skills/my-skill.md\n/skill new my-skill --global # or under ~/.reasonix/skills for cross-project use\n```\n\nEdit the file (`description:` frontmatter + body), then `/skill list` to see it. Add `runAs: subagent` to the frontmatter to spawn an isolated subagent loop instead of inlining the body.\n\n\u003cbr/\u003e\n\n## What makes Reasonix different\n\nThe loop is organized around three pillars. Each one solves a problem generic agent frameworks don't even see — because they were designed for a different cache mechanic.\n\n\u003csub align=\"center\"\u003e\n\nClick through to the full architecture writeup → [Pillar 1 — Cache-first loop](./docs/ARCHITECTURE.md#pillar-1--cache-first-loop) · [Pillar 2 — Tool-call repair](./docs/ARCHITECTURE.md#pillar-2--tool-call-repair) · [Pillar 3 — Cost control](./docs/ARCHITECTURE.md#pillar-3--cost-control-v06)\n\n\u003c/sub\u003e\n\n\u003cbr/\u003e\n\n## Capabilities\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/feature-grid.svg\" alt=\"Reasonix capabilities — cell-diff renderer, MCP, plan mode, permissions, dashboard, persistent sessions, hooks/skills/memory, semantic search, auto-checkpoints, /effort knob, transcript replay, event log\" width=\"880\"/\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n## How it compares\n\n|                                   | Reasonix         | Claude Code       | Cursor              | Aider              |\n|-----------------------------------|------------------|-------------------|---------------------|--------------------|\n| Backend                           | DeepSeek         | Anthropic         | OpenAI / Anthropic  | any (OpenRouter)   |\n| License                           | **MIT**          | closed            | closed              | Apache 2           |\n| Cost profile                      | **low per task** | premium           | subscription + use  | varies             |\n| DeepSeek prefix-cache             | **engineered**   | not applicable    | not applicable      | incidental         |\n| Embedded web dashboard            | yes              | —                 | n/a (IDE)           | —                  |\n| Configurable web search engine    | `/search-engine` | —             | —                   | —                  |\n| Persistent per-workspace sessions | yes              | partial           | n/a                 | —                  |\n| Plan mode · MCP · hooks · skills  | yes              | yes               | yes                 | partial            |\n| Web search (Mojeek + SearXNG)      | yes              | yes               | yes                 | yes                |\n| Open community development        | yes              | —                 | —                   | yes                |\n\nFor live cache-hit rates, costs, and methodology, see [`benchmarks/`](./benchmarks/) — the numbers move with model pricing, so they live with the harness, not in the README.\n\n\u003cbr/\u003e\n\n## Documentation\n\n- [**Architecture**](./docs/ARCHITECTURE.md) — three pillars: cache-first loop, tool-call repair, cost control\n- [**Benchmarks**](./benchmarks/) — τ-bench-lite harness, transcripts, cost methodology\n- [**Website**](https://esengine.github.io/DeepSeek-Reasonix/) — getting started, dashboard mockup, TUI mockup\n- [**Contributing**](./CONTRIBUTING.md) — comment policy, error-handling rules, library-over-hand-rolled\n- [**Code of Conduct**](./CODE_OF_CONDUCT.md) · [**Security policy**](./SECURITY.md)\n\n\u003cbr/\u003e\n\n## Community\n\n\u003e [!NOTE]\n\u003e Reasonix is open source and community-developed. The contributors wall below isn't decoration — every avatar is a real PR that shipped.\n\nScoped starter tickets — each with background, code pointers, acceptance criteria, and hints — live under the [`good first issue`](https://github.com/esengine/reasonix/labels/good%20first%20issue) label. Pick anything open.\n\n**Open Discussions — opinions wanted:**\n\n- [#20 · CLI / TUI design](https://github.com/esengine/reasonix/discussions/20) — what's broken, what's missing, what would you change?\n- [#21 · Dashboard design](https://github.com/esengine/reasonix/discussions/21) — react against the [proposed mockup](https://esengine.github.io/DeepSeek-Reasonix/design/agent-dashboard.html)\n- [#22 · Future feature wishlist](https://github.com/esengine/reasonix/discussions/22) — what would you build into Reasonix next?\n\n**Already using Reasonix and willing to help others discover it?** Publish blog posts, articles, screenshots, talks, or videos to [**Show and tell**](https://github.com/esengine/reasonix/discussions/categories/show-and-tell). The project has no marketing budget — community word of mouth is how new users find it. Sustained advocates earn the badge below, displayed next to the contributors wall once awarded:\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/discussions/categories/show-and-tell\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/REASONIX-📣%20ADVOCATE-c4b5fd?style=for-the-badge\u0026labelColor=0d1117\" alt=\"Reasonix Advocate badge — earned by sustained advocates\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n**Before your first PR**: read [`CONTRIBUTING.md`](./CONTRIBUTING.md) — short, strict rules (comments, errors, libraries-over-hand-rolled). `tests/comment-policy.test.ts` enforces the comment ones; `npm run verify` is the pre-push gate. By participating you agree to the [Code of Conduct](./CODE_OF_CONDUCT.md). Security issues → [SECURITY.md](./SECURITY.md).\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/esengine/reasonix/graphs/contributors\"\u003e\n    \u003cimg src=\"https://contrib.rocks/image?repo=esengine/reasonix\u0026max=100\u0026columns=12\" alt=\"Contributors to esengine/reasonix\" width=\"860\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n## Non-goals\n\n\u003e [!IMPORTANT]\n\u003e Reasonix is opinionated. Some things it deliberately *doesn't* do — listed here so you can pick the right tool for your work.\n\n- **Multi-provider flexibility.** DeepSeek-only on purpose. Coupling to one backend is the feature, not a limitation.\n- **IDE integration.** Terminal-first. The diff lives in `git diff`, the file tree in `ls`. The dashboard is a companion, not a Cursor replacement.\n- **Hardest-leaderboard reasoning.** Claude Opus still wins some benchmarks. DeepSeek is competitive on coding; if your work is \"solve this PhD proof\" rather than \"fix this auth bug,\" start with Claude.\n- **Air-gapped / fully-free.** Reasonix needs a paid DeepSeek API key. For air-gapped or zero-cost runs see Aider + Ollama or [Continue](https://continue.dev).\n\n\u003cbr/\u003e\n\n## Star History\n\n\u003ca href=\"https://www.star-history.com/?repos=esengine%2Freasonix\u0026type=timeline\u0026logscale=\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=esengine/reasonix\u0026type=timeline\u0026theme=dark\u0026logscale\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=esengine/reasonix\u0026type=timeline\u0026logscale\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=esengine/reasonix\u0026type=timeline\u0026logscale\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eMIT — see \u003ca href=\"./LICENSE\"\u003eLICENSE\u003c/a\u003e\u003c/sub\u003e\n  \u003cbr/\u003e\n  \u003csub\u003eBuilt by the community at \u003ca href=\"https://github.com/esengine/reasonix/graphs/contributors\"\u003eesengine/reasonix\u003c/a\u003e\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesengine%2Fdeepseek-reasonix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesengine%2Fdeepseek-reasonix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesengine%2Fdeepseek-reasonix/lists"}