reasonix 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,22 +3,26 @@
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <em>Cache-first agent loop for DeepSeek V4 — terminal-native, MCP first-class, no LangChain.</em>
6
+ <strong>English</strong> · <a href="./README.zh-CN.md">简体中文</a> · <a href="https://esengine.github.io/reasonix/">Website</a>
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
- <strong>English</strong> · <a href="./README.zh-CN.md">简体中文</a> · <a href="https://esengine.github.io/reasonix/">Website</a>
10
+ <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg" alt="npm version"/></a>
11
+ <a href="https://github.com/esengine/reasonix/actions/workflows/ci.yml"><img src="https://github.com/esengine/reasonix/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
12
+ <a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg" alt="license"/></a>
13
+ <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/dm/reasonix.svg" alt="downloads"/></a>
14
+ <a href="./package.json"><img src="https://img.shields.io/node/v/reasonix.svg" alt="node"/></a>
15
+ <a href="https://github.com/esengine/reasonix/stargazers"><img src="https://img.shields.io/github/stars/esengine/reasonix.svg?style=flat&logo=github&label=stars" alt="GitHub stars"/></a>
16
+ <a href="https://github.com/esengine/reasonix/discussions"><img src="https://img.shields.io/github/discussions/esengine/reasonix.svg?logo=github&label=discussions" alt="Discussions"/></a>
11
17
  </p>
12
18
 
13
- # Reasonix
14
-
15
- [![npm version](https://img.shields.io/npm/v/reasonix.svg)](https://www.npmjs.com/package/reasonix)
16
- [![CI](https://github.com/esengine/reasonix/actions/workflows/ci.yml/badge.svg)](https://github.com/esengine/reasonix/actions/workflows/ci.yml)
17
- [![license](https://img.shields.io/npm/l/reasonix.svg)](./LICENSE)
18
- [![downloads](https://img.shields.io/npm/dm/reasonix.svg)](https://www.npmjs.com/package/reasonix)
19
- [![node](https://img.shields.io/node/v/reasonix.svg)](./package.json)
19
+ <p align="center">
20
+ <strong>A DeepSeek-native AI coding agent for your terminal.</strong> Engineered around DeepSeek's prefix-cache, so the savings are real and the loop stays cheap enough to leave on.
21
+ </p>
20
22
 
21
- **A DeepSeek-native AI coding agent for your terminal.** ~30× cheaper per task than Claude Code, engineered around DeepSeek's prefix-cache so the savings are real (94% live cache hit, not theoretical). MIT-licensed, no IDE lock-in, MCP first-class.
23
+ <p align="center">
24
+ <img src="docs/assets/hero-stats.svg" alt="94% live prefix-cache hit · ~30× cheaper per task vs Claude Code · MIT terminal-native" width="860"/>
25
+ </p>
22
26
 
23
27
  ---
24
28
 
@@ -26,50 +30,29 @@
26
30
 
27
31
  ```bash
28
32
  cd my-project
29
- npx reasonix code
33
+ npx reasonix code # paste a DeepSeek API key on first run; persists after
30
34
  ```
31
35
 
32
- First run: paste a [DeepSeek API key](https://platform.deepseek.com/api_keys), pick a preset, optionally select MCP servers. Every run after drops you straight in.
33
-
34
- ```
35
- reasonix code › fix the case-sensitivity bug in findByEmail
36
-
37
- assistant
38
- ▸ tool<search_files> → src/users.ts, src/users.test.ts
39
- ▸ tool<read_file> → src/users.ts (412 chars)
40
-
41
- src/users.ts
42
- <<<<<<< SEARCH
43
- return users.find(u => u.email === email);
44
- =======
45
- const needle = email.toLowerCase();
46
- return users.find(u => u.email.toLowerCase() === needle);
47
- >>>>>>> REPLACE
48
-
49
- ▸ 1 pending edit · /apply to write, /discard to drop
50
- ```
36
+ <p align="center">
37
+ <img src="docs/assets/hero-terminal.svg" alt="Reasonix code mode — assistant proposes a SEARCH/REPLACE edit; nothing on disk until /apply" width="860"/>
38
+ </p>
51
39
 
52
- Edits stay in memory until you type `/apply` — nothing hits disk by default. Requires Node ≥ 20.10. Tested on macOS, Linux, and Windows (PowerShell, Git Bash, Windows Terminal).
40
+ Requires Node ≥ 22. Tested on macOS, Linux, and Windows (PowerShell, Git Bash, Windows Terminal). Get a [DeepSeek API key →](https://platform.deepseek.com/api_keys) · `reasonix code --help` for flags.
53
41
 
54
42
  ---
55
43
 
56
44
  ## How it compares
57
45
 
58
- | | Reasonix | Claude Code | Cursor | Aider |
59
- |----------------------------------|------------------|-----------------|--------------------|------------------|
60
- | Backend | DeepSeek V4 | Anthropic | OpenAI / Anthropic | any (OpenRouter) |
61
- | **Cost / typical task** | **~¥0.01–0.04** | ~¥0.40–4 | ¥150/mo + usage | varies |
62
- | Surface | terminal | terminal + IDE | IDE (Electron) | terminal |
63
- | License | **MIT** | closed | closed | Apache 2 |
64
- | **DeepSeek prefix-cache hit** | **94%** (live) | n/a | n/a | ~33% (baseline) |
65
- | Plan mode (read-only audit gate) | yes | yes | | yes |
66
- | Edit review (`/apply`, no auto-write) | yes | yes | partial | yes |
67
- | MCP servers | first-class | first-class | | — |
68
- | User-authored skills | yes | yes | — | — |
69
- | Embedded web dashboard | yes | — | n/a (IDE) | — |
70
- | Hooks (`PreToolUse`, etc.) | yes | yes | — | — |
71
- | Sandbox boundary | strict | yes | partial | yes |
72
- | Persistent per-workspace sessions | yes | partial | n/a | — |
46
+ | | Reasonix | Claude Code | Cursor | Aider |
47
+ |-----------------------------------|------------------|-----------------|--------------------|------------------|
48
+ | Backend | DeepSeek V4 | Anthropic | OpenAI / Anthropic | any (OpenRouter) |
49
+ | **Cost / typical task** | **~¥0.01–0.04** | ~¥0.40–4 | ¥150/mo + usage | varies |
50
+ | License | **MIT** | closed | closed | Apache 2 |
51
+ | **DeepSeek prefix-cache hit** | **94%** (live) | n/a | n/a | ~33% (baseline) |
52
+ | Embedded web dashboard | yes | | n/a (IDE) | — |
53
+ | Persistent per-workspace sessions | yes | partial | n/a | |
54
+
55
+ Plan mode, edit review, MCP, skills, hooks, and sandboxing are all `yes` for Reasonix and most peers see the feature grid below for what they actually do here.
73
56
 
74
57
  Numbers from `benchmarks/tau-bench-lite` (8 multi-turn tasks × 3 repeats, live `deepseek-chat`). [Committed transcripts →](./benchmarks/)
75
58
 
@@ -99,59 +82,30 @@ Cache stability isn't a feature you turn on; it's an invariant the loop is desig
99
82
 
100
83
  ## What's in the box
101
84
 
102
- ### Cache-first agent loop
103
- Loop preserves prefix stability across tool dispatches. R1-style reasoning supported, with a scavenge pass that pulls escaped tool calls back out of `<think>` blocks. Tool-call repair handles malformed args before they hit dispatch. `/effort` lets you step reasoning depth down for cheap turns.
104
-
105
- ### Tool registry
106
- Native: `read_file`, `write_file`, `edit_file` (SEARCH/REPLACE), `list_directory`, `search_files`, `grep_files`, `run_command`, `run_background`, `web_search`, `web_fetch`. All sandboxed to the launch directory. **MCP first-class** — `--mcp 'name=cmd args'` adds external servers (stdio / Streamable HTTP / SSE), tools merge into the registry under a prefix.
107
-
108
- ### Plan mode + edit review
109
- `/plan` enters a read-only audit gate where the model can't dispatch edits until you approve a written plan. Edits emerge as SEARCH/REPLACE blocks; nothing hits disk until `/apply`. `/walk` steps through pending edits one at a time. `/discard` drops them all.
110
-
111
- ### Sessions, scoped per workspace
112
- Sessions persist in `~/.reasonix/sessions/` and are filtered by launch directory. `--new` preserves the previous session under a timestamped name; `--resume` finds the latest. `/sessions` switches mid-chat without quitting.
113
-
114
- ### Embedded web dashboard
115
- `/dashboard` opens a localhost SPA mirroring the running TUI — chat (with full composer fallback when the TUI's renderer breaks down on legacy PowerShell), editor (file tree + CodeMirror), Sessions / Plans / Usage / Tools / MCP / Memory / Hooks / Settings. Token-gated, CSRF-checked, ephemeral. [Design mockup →](./design/agent-dashboard.html)
116
-
117
- ### Hooks
118
- Configurable shell scripts that fire on `PreToolUse`, `PostToolUse`, `UserPromptSubmit`, `Stop`, `Notification`, `SessionEnd`. Lives in `.reasonix/settings.json` (per-project) or `~/.reasonix/settings.json` (per-user). The harness executes them — not the model.
119
-
120
- ### Memory + skills
121
- Two layers: project-scoped `REASONIX.md` (committed, repo conventions) and user-scoped `~/.reasonix/memory/` (per-user, the model can write to it via the `remember` tool). Skills are user-authored prompt packs with optional sub-agent execution.
122
-
123
- ### Permissions
124
- `allow` / `ask` / `deny` patterns on commands and tools. `npm publish` defaults to `ask`; `rm -rf *` and `git push --force *` default to `deny`. Approved-once decisions can be remembered for a prefix.
85
+ <p align="center">
86
+ <img src="docs/assets/feature-grid.svg" alt="Feature grid cache-first loop, plan mode, MCP first-class, sessions and dashboard, hooks, memory and skills" width="860"/>
87
+ </p>
125
88
 
126
- [Full feature docs on the website →](https://esengine.github.io/reasonix/) · [Architecture →](./docs/ARCHITECTURE.md) · [TUI design mockup →](./design/agent-tui-terminal.html)
89
+ Permissions (`allow` / `ask` / `deny`), tool-call repair (flatten · scavenge · truncation · storm), and `/effort` for cheap turns round out the loop. [Architecture →](./docs/ARCHITECTURE.md) · [Dashboard mockup →](https://esengine.github.io/reasonix/design/agent-dashboard.html) · [TUI mockup →](https://esengine.github.io/reasonix/design/agent-tui-terminal.html) · [Website →](https://esengine.github.io/reasonix/)
127
90
 
128
91
  ---
129
92
 
130
93
  ## Contributing
131
94
 
132
- Reasonix is solo-maintained but designed to grow. Scoped starter issues:
133
-
134
- - [#15 — `reasonix doctor --json` flag](https://github.com/esengine/reasonix/issues/15) · CLI · 2-3h
135
- - [#16 — `web_search` / `web_fetch` actionable error messages](https://github.com/esengine/reasonix/issues/16) · tools · 2-3h
136
- - [#17 — Slash command "did you mean?" suggestion](https://github.com/esengine/reasonix/issues/17) · TUI · 2-3h
137
- - [#18 — Unit tests for `clipboard.ts`](https://github.com/esengine/reasonix/issues/18) · tests · 2-3h
138
-
139
- Each has background, code pointers, acceptance criteria, hints. Browse all [`good first issue`](https://github.com/esengine/reasonix/labels/good%20first%20issue)s.
95
+ Reasonix is solo-maintained but designed to grow. Scoped 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.
140
96
 
141
97
  **Open Discussions** — opinions wanted:
142
98
  - [#20 · CLI / TUI design](https://github.com/esengine/reasonix/discussions/20) — what's broken, what's missing, what would you change?
143
- - [#21 · Dashboard design](https://github.com/esengine/reasonix/discussions/21) — react against the [proposed mockup](./design/agent-dashboard.html)
99
+ - [#21 · Dashboard design](https://github.com/esengine/reasonix/discussions/21) — react against the [proposed mockup](https://esengine.github.io/reasonix/design/agent-dashboard.html)
144
100
  - [#22 · Future feature wishlist](https://github.com/esengine/reasonix/discussions/22) — what would you build into Reasonix next?
145
101
 
146
- **Before your first PR**: read [`CONTRIBUTING.md`](./CONTRIBUTING.md). Short, strict project rules (comments, errors, libraries-over-hand-rolled); `tests/comment-policy.test.ts` enforces the comment ones and `npm run verify` is the pre-push gate.
102
+ **Before your first PR**: read [`CONTRIBUTING.md`](./CONTRIBUTING.md) — short, strict project 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).
147
103
 
148
- ```bash
149
- git clone https://github.com/esengine/reasonix.git
150
- cd reasonix
151
- npm install
152
- npm run dev code # run from source via tsx
153
- npm run verify # lint + typecheck + 1665 tests
154
- ```
104
+ ### Contributors
105
+
106
+ <a href="https://github.com/esengine/reasonix/graphs/contributors">
107
+ <img src="https://contrib.rocks/image?repo=esengine/reasonix" alt="Contributors to esengine/reasonix"/>
108
+ </a>
155
109
 
156
110
  ---
157
111
 
@@ -160,7 +114,7 @@ npm run verify # lint + typecheck + 1665 tests
160
114
  - **Multi-provider flexibility.** DeepSeek-only on purpose — every layer is tuned around DeepSeek's specific cache mechanic and pricing. Coupling to one backend is the feature.
161
115
  - **IDE integration.** Terminal-first; the diff lives in `git diff`, the file tree in `ls`. The dashboard is a companion, not a Cursor replacement.
162
116
  - **Hardest-leaderboard reasoning.** Claude Opus still wins some benchmarks. DeepSeek V4 is competitive on coding; if your work is "solve this PhD proof" rather than "fix this auth bug," start with Claude.
163
- - **Air-gapped / fully-free.** DeepSeek's API has free credit on signup but isn't free forever. For air-gapped, see Aider + Ollama or [Continue](https://continue.dev).
117
+ - **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).
164
118
 
165
119
  ---
166
120
 
package/README.zh-CN.md CHANGED
@@ -3,22 +3,26 @@
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <em>为 DeepSeek V4 打造的缓存优先 agent 循环 — 终端原生、原生 MCP、不依赖 LangChain。</em>
6
+ <a href="./README.md">English</a> · <strong>简体中文</strong> · <a href="https://esengine.github.io/reasonix/">官方网站</a>
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
- <a href="./README.md">English</a> · <strong>简体中文</strong> · <a href="https://esengine.github.io/reasonix/">官方网站</a>
10
+ <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg" alt="npm version"/></a>
11
+ <a href="https://github.com/esengine/reasonix/actions/workflows/ci.yml"><img src="https://github.com/esengine/reasonix/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
12
+ <a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg" alt="license"/></a>
13
+ <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/dm/reasonix.svg" alt="downloads"/></a>
14
+ <a href="./package.json"><img src="https://img.shields.io/node/v/reasonix.svg" alt="node"/></a>
15
+ <a href="https://github.com/esengine/reasonix/stargazers"><img src="https://img.shields.io/github/stars/esengine/reasonix.svg?style=flat&logo=github&label=stars" alt="GitHub stars"/></a>
16
+ <a href="https://github.com/esengine/reasonix/discussions"><img src="https://img.shields.io/github/discussions/esengine/reasonix.svg?logo=github&label=discussions" alt="Discussions"/></a>
11
17
  </p>
12
18
 
13
- # Reasonix
14
-
15
- [![npm version](https://img.shields.io/npm/v/reasonix.svg)](https://www.npmjs.com/package/reasonix)
16
- [![CI](https://github.com/esengine/reasonix/actions/workflows/ci.yml/badge.svg)](https://github.com/esengine/reasonix/actions/workflows/ci.yml)
17
- [![license](https://img.shields.io/npm/l/reasonix.svg)](./LICENSE)
18
- [![downloads](https://img.shields.io/npm/dm/reasonix.svg)](https://www.npmjs.com/package/reasonix)
19
- [![node](https://img.shields.io/node/v/reasonix.svg)](./package.json)
19
+ <p align="center">
20
+ <strong>DeepSeek 原生的终端 AI 编程代理。</strong> 围绕 DeepSeek 的前缀缓存机制打造——省钱是真省,loop 便宜到可以一直开着。
21
+ </p>
20
22
 
21
- **DeepSeek 原生的终端 AI 编程代理。** 单次任务成本约为 Claude Code 的 1/30,整个循环围绕 DeepSeek 的前缀缓存机制打造,所以省钱是真省(94% 真实命中率,不是理论值)。MIT 许可,不绑 IDE,原生支持 MCP。
23
+ <p align="center">
24
+ <img src="docs/assets/hero-stats.zh-CN.svg" alt="94% 实测前缀缓存命中 · 单任务比 Claude Code 便宜 ~30 倍 · MIT 终端原生" width="860"/>
25
+ </p>
22
26
 
23
27
  ---
24
28
 
@@ -26,50 +30,29 @@
26
30
 
27
31
  ```bash
28
32
  cd my-project
29
- npx reasonix code
33
+ npx reasonix code # 首次运行粘贴 DeepSeek API Key,之后会记住
30
34
  ```
31
35
 
32
- 首次运行:粘贴一个 [DeepSeek API Key](https://platform.deepseek.com/api_keys)、选预设、可选地多选 MCP 服务器。之后每次直接进入。
33
-
34
- ```
35
- reasonix code › 修一下 findByEmail 对大小写敏感的登录 bug
36
-
37
- assistant
38
- ▸ tool<search_files> → src/users.ts, src/users.test.ts
39
- ▸ tool<read_file> → src/users.ts (412 chars)
40
-
41
- src/users.ts
42
- <<<<<<< SEARCH
43
- return users.find(u => u.email === email);
44
- =======
45
- const needle = email.toLowerCase();
46
- return users.find(u => u.email.toLowerCase() === needle);
47
- >>>>>>> REPLACE
48
-
49
- ▸ 1 处待应用编辑 · /apply 写入 · /discard 丢弃
50
- ```
36
+ <p align="center">
37
+ <img src="docs/assets/hero-terminal.zh-CN.svg" alt="Reasonix code 模式预览 — 助手提出 SEARCH/REPLACE 编辑,未 /apply 不落盘" width="860"/>
38
+ </p>
51
39
 
52
- `/apply`,磁盘不会被改。要求 Node ≥ 20.10。已在 macOS、Linux、Windows(PowerShell · Git Bash · Windows Terminal)测过。
40
+ 要求 Node ≥ 22。已在 macOS、Linux、Windows(PowerShell · Git Bash · Windows Terminal)测过。[去拿 DeepSeek API Key →](https://platform.deepseek.com/api_keys) · 完整 flag 看 `reasonix code --help`。
53
41
 
54
42
  ---
55
43
 
56
44
  ## 横向对比
57
45
 
58
- | | Reasonix | Claude Code | Cursor | Aider |
59
- |----------------------------------|-------------------|-----------------|--------------------|-------------------|
60
- | 后端 | DeepSeek V4 | Anthropic | OpenAI / Anthropic | 任意(OpenRouter)|
61
- | **单任务成本** | **~¥0.01–0.04** | ~¥0.40–4 | ¥150/月 + 用量 | 不一 |
62
- | 运行环境 | 终端 | 终端 + IDE | IDE (Electron) | 终端 |
63
- | 协议 | **MIT** | 闭源 | 闭源 | Apache 2 |
64
- | **DeepSeek 前缀缓存命中** | **94%**(实测) | 不适用 | 不适用 | ~33%(基线) |
65
- | 计划模式(只读审计闸) | 支持 | 支持 | | 支持 |
66
- | 编辑审查(`/apply`,不自动落盘) | 支持 | 支持 | 部分 | 支持 |
67
- | MCP servers | 一等公民 | 一等公民 | — | — |
68
- | 用户自定义 skill | 支持 | 支持 | — | — |
69
- | 内嵌 web 仪表盘 | 支持 | — | 不适用 (IDE) | — |
70
- | Hooks(`PreToolUse` 等) | 支持 | 支持 | — | — |
71
- | 沙箱边界 | 严格 | 支持 | 部分 | 支持 |
72
- | 持久化的工作区会话 | 支持 | 部分 | 不适用 | — |
46
+ | | Reasonix | Claude Code | Cursor | Aider |
47
+ |----------------------------|-------------------|-----------------|--------------------|-------------------|
48
+ | 后端 | DeepSeek V4 | Anthropic | OpenAI / Anthropic | 任意(OpenRouter)|
49
+ | **单任务成本** | **~¥0.01–0.04** | ~¥0.40–4 | ¥150/月 + 用量 | 不一 |
50
+ | 协议 | **MIT** | 闭源 | 闭源 | Apache 2 |
51
+ | **DeepSeek 前缀缓存命中** | **94%**(实测) | 不适用 | 不适用 | ~33%(基线) |
52
+ | 内嵌 web 仪表盘 | 支持 | | 不适用 (IDE) | |
53
+ | 持久化的工作区会话 | 支持 | 部分 | 不适用 | |
54
+
55
+ 计划模式、编辑审查、MCP、skill、Hooks、沙箱在 Reasonix 和大多数同类里都是"支持"——具体怎么做的看下面的功能一览。
73
56
 
74
57
  数据来自 `benchmarks/tau-bench-lite`(8 个多轮任务 × 3 次重放,真实 `deepseek-chat`)。[完整 transcript →](./benchmarks/)
75
58
 
@@ -99,59 +82,30 @@ src/users.ts
99
82
 
100
83
  ## 功能一览
101
84
 
102
- ### 缓存优先的 agent 循环
103
- 跨工具调用保持前缀稳定。支持 R1 风格的推理,配 `scavenge` pass 把逃逸到 `<think>` 块里的 tool call 拉回来。`ToolCallRepair` 在 dispatch 前修复畸形参数。`/effort` 让你给便宜回合降推理深度。
104
-
105
- ### 工具注册表
106
- 原生:`read_file`、`write_file`、`edit_file`(SEARCH/REPLACE)、`list_directory`、`search_files`、`grep_files`、`run_command`、`run_background`、`web_search`、`web_fetch`。全部沙箱在启动目录内。**MCP 一等公民** —— `--mcp 'name=cmd args'` 加外部服务器(stdio / Streamable HTTP / SSE),工具按前缀合入注册表。
107
-
108
- ### 计划模式 + 编辑审查
109
- `/plan` 进只读审计闸,模型在你批准书面计划之前不能下发编辑。编辑以 SEARCH/REPLACE 块的形式出现;不 `/apply` 不落盘。`/walk` 一次过一处编辑。`/discard` 全部丢弃。
110
-
111
- ### 工作区作用域的会话
112
- 会话存在 `~/.reasonix/sessions/`,按启动目录过滤。`--new` 会用时间戳保留旧会话;`--resume` 找最新的。会话中途用 `/sessions` 切换,不必退出。
113
-
114
- ### 内嵌 web 仪表盘
115
- `/dashboard` 打开一个本地 SPA,镜像运行中的 TUI —— chat(在老 PowerShell 上 TUI 渲染崩了时也能完整接管)、editor(文件树 + CodeMirror)、Sessions / Plans / Usage / Tools / MCP / Memory / Hooks / Settings。token 鉴权、CSRF 校验、临时端口。[设计稿 →](./design/agent-dashboard.html)
116
-
117
- ### Hooks
118
- 可配置的 shell 脚本,在 `PreToolUse`、`PostToolUse`、`UserPromptSubmit`、`Stop`、`Notification`、`SessionEnd` 触发。配置在 `.reasonix/settings.json`(项目级)或 `~/.reasonix/settings.json`(用户级)。harness 来执行,不是模型。
119
-
120
- ### Memory + Skills
121
- 两层:项目作用域的 `REASONIX.md`(提交进 git,写仓库约定),和用户作用域的 `~/.reasonix/memory/`(私有,模型可以通过 `remember` 工具自己写)。Skills 是用户编写的 prompt 包,可选用 sub-agent 执行。
122
-
123
- ### 权限
124
- `allow` / `ask` / `deny` 模式匹配命令和工具。`npm publish` 默认 `ask`;`rm -rf *` 和 `git push --force *` 默认 `deny`。"批准一次"的决定可以按前缀记住。
85
+ <p align="center">
86
+ <img src="docs/assets/feature-grid.zh-CN.svg" alt="功能一览 缓存优先循环、计划模式、MCP 一等公民、会话与仪表盘、Hooks、Memory Skills" width="860"/>
87
+ </p>
125
88
 
126
- [官网完整文档 →](https://esengine.github.io/reasonix/) · [架构文档 →](./docs/ARCHITECTURE.md) · [TUI 设计稿 →](./design/agent-tui-terminal.html)
89
+ 权限系统(`allow` / `ask` / `deny`)、tool-call repair(flatten · scavenge · truncation · storm)、`/effort` 给便宜回合降档——一起把整个 loop 兜起来。[架构文档 →](./docs/ARCHITECTURE.md) · [Dashboard 设计稿 →](https://esengine.github.io/reasonix/design/agent-dashboard.html) · [TUI 设计稿 →](https://esengine.github.io/reasonix/design/agent-tui-terminal.html) · [官网 →](https://esengine.github.io/reasonix/)
127
90
 
128
91
  ---
129
92
 
130
93
  ## 参与贡献
131
94
 
132
- Reasonix 现在主要是单人维护,但是为协作设计的。给新手准备的几个 issue
133
-
134
- - [#15 — 给 `reasonix doctor` 加 `--json` flag](https://github.com/esengine/reasonix/issues/15) · CLI · 2-3 小时
135
- - [#16 — 让 `web_search` / `web_fetch` 的错误信息可执行](https://github.com/esengine/reasonix/issues/16) · tools · 2-3 小时
136
- - [#17 — Slash 命令的 "did you mean?" 建议](https://github.com/esengine/reasonix/issues/17) · TUI · 2-3 小时
137
- - [#18 — `clipboard.ts` 的单元测试](https://github.com/esengine/reasonix/issues/18) · 测试 · 2-3 小时
138
-
139
- 每个 issue 都有背景说明、代码定位、验收标准、提示。所有 [`good first issue`](https://github.com/esengine/reasonix/labels/good%20first%20issue) 在这。
95
+ Reasonix 现在主要是单人维护,但是为协作设计的。给新手准备的入门 issue —— 每个都带背景说明、代码定位、验收标准、提示 —— 全部挂在 [`good first issue`](https://github.com/esengine/reasonix/labels/good%20first%20issue) 标签下。挑任意一个还没人认领的就行。
140
96
 
141
97
  **正在征集意见的 Discussions:**
142
98
  - [#20 · CLI / TUI 设计](https://github.com/esengine/reasonix/discussions/20) — 哪里坏了、哪里少东西、哪里你会怎么改?
143
- - [#21 · Dashboard 设计](https://github.com/esengine/reasonix/discussions/21) — 对着[设计稿](./design/agent-dashboard.html)拍砖
99
+ - [#21 · Dashboard 设计](https://github.com/esengine/reasonix/discussions/21) — 对着[设计稿](https://esengine.github.io/reasonix/design/agent-dashboard.html)拍砖
144
100
  - [#22 · 未来功能愿望单](https://github.com/esengine/reasonix/discussions/22) — 你希望 Reasonix 长出什么功能?
145
101
 
146
- **第一次提 PR 之前**:先读 [`CONTRIBUTING.md`](./CONTRIBUTING.md)。短小、严格的项目规则(注释、错误处理、用现成库不手写);`tests/comment-policy.test.ts` 静态强制执行注释那部分,`npm run verify` 是 push 前的闸。
102
+ **第一次提 PR 之前**:先读 [`CONTRIBUTING.md`](./CONTRIBUTING.md) —— 短小、严格的项目规则(注释、错误处理、用现成库不手写)。`tests/comment-policy.test.ts` 静态强制执行注释那部分,`npm run verify` 是 push 前的闸。参与本项目即同意 [行为准则](./CODE_OF_CONDUCT.md)。安全相关问题请走 [SECURITY.md](./SECURITY.md)。
147
103
 
148
- ```bash
149
- git clone https://github.com/esengine/reasonix.git
150
- cd reasonix
151
- npm install
152
- npm run dev code # 用 tsx 从源码跑
153
- npm run verify # lint + typecheck + 1665 个测试
154
- ```
104
+ ### 贡献者
105
+
106
+ <a href="https://github.com/esengine/reasonix/graphs/contributors">
107
+ <img src="https://contrib.rocks/image?repo=esengine/reasonix" alt="esengine/reasonix 贡献者"/>
108
+ </a>
155
109
 
156
110
  ---
157
111
 
@@ -160,7 +114,7 @@ npm run verify # lint + typecheck + 1665 个测试
160
114
  - **多供应商灵活性。** 故意只做 DeepSeek —— 每一层都为 DeepSeek 特定的缓存机制和定价调过。绑死一个后端是 feature,不是要克服的限制。
161
115
  - **IDE 集成。** 终端优先;diff 在 `git diff`,文件树在 `ls`。仪表盘是 TUI 的伴生,不是 Cursor 的替代。
162
116
  - **追最难的 reasoning 榜单。** Claude Opus 在某些榜单上还是赢家。DeepSeek V4 在编程任务上有竞争力;如果你的工作是"解一个 PhD 级证明"而不是"修个 auth bug",先用 Claude。
163
- - **完全离线 / 永远免费。** DeepSeek API 注册送免费额度,但不会一直免费。要离线,看 Aider + Ollama 或 [Continue](https://continue.dev)。
117
+ - **完全离线 / 永远免费。** Reasonix 需要付费的 DeepSeek API Key。要离线 / 零成本,看 Aider + Ollama 或 [Continue](https://continue.dev)。
164
118
 
165
119
  ---
166
120
 
package/dashboard/app.css CHANGED
@@ -1,4 +1,4 @@
1
- /* Reasonix dashboard styles — anchored to design/agent-dashboard.html.
1
+ /* Reasonix dashboard styles — anchored to docs/design/agent-dashboard.html.
2
2
  * Re-import: extract the <style> block from the design mockup verbatim.
3
3
  * Doc-chrome selectors (.page / .toc / .section / .subsec / .mock) are
4
4
  * unused in the live dashboard but kept so the CSS stays in lockstep