ReMe/integrations/qoder/README.md
2026-10-26 20:32:17 +08:00

103 lines
4 KiB
Markdown

# ReMe memory for Qoder
[中文说明](./README_ZH.md)
Qoder supports installable plugins that bundle skills, MCP servers, hooks, and configuration. This
directory packages ReMe automatic recall, completed-turn recording, MCP memory tools, and the
`reme-memory` skill as one Qoder plugin.
## Requirements
- Qoder CLI 1.1.41 or newer with plugin support.
- Python 3.11 or newer as `python3` in the Qoder environment, with FastMCP 3.1 or newer.
- A running ReMe service exposing the MCP endpoint and the HTTP jobs `search` and `auto_memory`.
The default split development setup uses:
- MCP: `http://127.0.0.1:2333/mcp`
- HTTP Job API: `http://127.0.0.1:2334`
## Install
From this checkout:
```powershell
qodercli plugins marketplace add E:\path\to\ReMe\integrations\qoder
qodercli plugins install reme@reme-marketplace --scope user
```
Direct local installation is also supported:
```powershell
qodercli plugins install E:\path\to\ReMe\integrations\qoder\reme --scope user
```
Validate the package before installing:
```powershell
qodercli plugins validate E:\path\to\ReMe\integrations\qoder\reme --strict
```
## Configure
The plugin reads `%USERPROFILE%\.qoder\reme\config.json`, or
`${QODER_CONFIG_DIR}/reme/config.json` when `QODER_CONFIG_DIR` is set:
```powershell
New-Item -ItemType Directory -Force "$HOME\.qoder\reme"
Copy-Item integrations\qoder\reme\config.example.json "$HOME\.qoder\reme\config.json"
```
`mcp_url` controls the MCP tool connection. `api_url` controls the HTTP job API used by lifecycle
hooks. The two must not be conflated when the ReMe deployment uses separate ports.
Set `memory_interval` to `1` for immediate per-turn writes. The remaining keys and limits match the
Claude Code integration:
| Option | Default | Meaning |
| --- | --- | --- |
| `auto_recall` | `true` | Search before a user prompt |
| `auto_memory` | `true` | Capture and submit completed turns |
| `recall_limit` | `5` | Search result limit |
| `recall_min_score` | `0` | Minimum recall score |
| `recall_timeout` | `5` | Foreground timeout, at most 10 seconds |
| `request_timeout` | `600` | Memory write timeout, at most 600 seconds |
| `memory_interval` | `5` | Completed turns per batch |
| `shutdown_timeout` | `2` | Best-effort exit drain, at most 2 seconds |
| `context_max_chars` | `8000` | Maximum recalled context |
| `timezone` | `Asia/Shanghai` | Daily batch timezone |
## Lifecycle
`UserPromptSubmit` performs bounded recall and injects results as untrusted historical evidence.
At `Stop`, a synchronous hook captures the completed user/final-assistant pair into the local queue.
A parallel async hook submits captured batches to `POST {api_url}/auto_memory`. `SessionStart`
retries residual work and `SessionEnd` performs a short drain. Queue files are namespaced by service
endpoint and protected by per-session locks. Stable message IDs make repeated Stops idempotent.
Qoder transcript records use Claude-style `user` and `assistant` JSONL rows. Tool calls, tool
results, reasoning blocks, metadata messages, subagents, and injected `<reme-context>` are excluded.
The hook accepts complete final JSONL rows while Qoder finishes materializing the transcript.
## Migration from manual hooks
Remove any manually installed ReMe `UserPromptSubmit`, `Stop`, `SessionStart`, and `SessionEnd`
hooks from `settings.json`, and remove a manually configured `mcpServers.reme` entry. Keeping both
the plugin and manual installation active captures the same turn twice. Unrelated Qoder, Orca, and
memory-gate hooks should remain untouched.
## Verify
```powershell
qodercli plugins list
qodercli mcp list
```
Open a new Qoder conversation through CodexHost or directly. Success requires:
1. a `memory_saved` row in `%USERPROFILE%\.qoder\reme\hooks.log`;
2. the corresponding queue `.done` receipt;
3. one new `session/dialog/qoder-*.jsonl` file with a user and final-assistant row.
The service-owned `auto_dream` consolidation job remains enabled according to the ReMe service
configuration; the plugin does not start another scheduler.