qingmingyiyang/Incremind

Incremind

通过经历增量积累记忆、修正认识、逐渐形成理解的认知系统(Accumulate memory, revise knowledge and gradually form a cognitive system of understanding through incremental experience.)

待分类agentagent-skillsai-agents

English · 简体中文

The Incremind bear

Incremind

A second brain that remembers what is new.

Give it the material you choose. It organizes and archives it, extracts what adds to what you already know, and turns proposed insights into long-term memory only after you confirm them.

Quick start · Features · Evaluation · Usage · Architecture · Privacy · Development

Workbench: three sources organized, assigned to projects, and used to propose new insights

Watch the introduction

A 2:45 walkthrough of adding material, confirming new insights, and asking a follow-up question. Chinese narration with Chinese and English subtitles · 1080p60.

https://github.com/user-attachments/assets/8f51499d-bbfb-47a2-9ab0-91193313f1f0

Download video · English subtitles (SRT) · English subtitles (VTT)

Why I am building it

I want a second brain that can work alongside me over time.

The idea comes from everyday research. Whenever I ask AI a question or give it a task about the same project, I have to explain the background, my existing judgments, and the material I have already found all over again. Knowledge accumulates, but conversations often start from scratch.

Incremind is designed around two goals:

  1. Turn things I share into lasting knowledge. Accept articles, personal judgments, recordings, videos, and ideas captured on the go; organize them by project and scene; and turn them into knowledge I can revisit and insights I can confirm.
  2. Use that knowledge to understand questions and complete tasks. Identify what I am asking, find the relevant projects and scenes, and give the model their existing insights, sources, and context so it can answer everyday questions and handle routine tasks with less repeated explanation.

Saving articles and videos does not automatically make their contents useful or memorable. Incremind therefore focuses on what each new source adds:

  • Compare new material with existing insights. Extract three kinds of changes: additions such as new conditions, examples, or practices; differences from an existing claim; and new methods. Material that repeats what you already know adds a supporting source to the existing insight rather than creating another entry.
  • Store methods with their conditions of use. Each insight says when it applies, so relevant methods can be recalled when you ask a question or work on a task.
  • Let you decide what becomes established knowledge. Extracted insights start as pending confirmation. A single click on the receipt activates them. Confirmation, edits, and forgetting take effect immediately; further inference runs in the background.
  • Remember and forget in a human-like way. Frequently used knowledge becomes stronger, while unused knowledge gradually leaves automatic recall. Originals remain in the Library and can be found and restored at any time.

For example, an introductory article on spaced repetition might produce an insight about reviewing on days 1, 2, 4, 7, and 15. A later article on active recall and adaptive intervals should add only the relevant differences and methods: adjust intervals to difficulty, and try answering before revealing the answer.

Features

StatusFeatureWhat it does
✅One input boxAutomatically handles remembering, asking, and doing tasks. Mixed requests, such as a reminder followed by a question, are split and handled separately.
✅Automatic organizationBuilds memory in layers: original → organized note + summary → insight. Supports text, links, PDFs, and DOCX files.
✅Automatic project assignmentWithout an explicit #Project, assigns material to the most relevant existing project or creates one for a new topic. Everyday items stay in the Everyday space. Assignment can be undone with one click.
✅Incremental insightsCompares material with existing insights and proposes additions, differences, and new methods for confirmation on the receipt.
✅Answers with citationsUses eligible insights, summaries, organized notes, and originals as evidence; citations open the original source. Questions in Everyday can be routed to the relevant project.
🧪Agentic retrievalThe model decides whether to search or read again, can consult applicable skills enabled for the current project and configured web search, and asks for missing conditions before continuing in the same conversation. See Agentic RAG (Chinese) for the S1–S4 stages and validation scope.
✅Task executionUses project memory, confirmed profile facts, and Library lookup to create output documents, which you can continue revising or regenerate. Real DeepSeek initial-draft and continuation runs have verified note facts, version history, and source provenance.
✅LibraryBrowse insights, summaries, organized notes, and originals; confirm, edit, forget, or restore insights. Recover unsaved note edits in the same browser, with revision checks when saving. View saved revision metadata from the editor menu.
✅Privacy controlsKeeps data on the computer or server hosting the application, excludes private projects from external model requests, and records a receipt for each external call.
🧪More input formatsImage OCR, audio and video transcription, and Bilibili favorites import; requires the corresponding models to be configured.
🧪Forgetting and daily organizationAdjusts recall weights by usage and a forgetting curve. Daily organization proposes patterns from recurring material for your confirmation.
🧪Local embeddingsInstall EmbeddingGemma from Settings, approximately 1.5 GB, for semantic retrieval without a network connection.
🧪Claude Code, Codex, and DeepSeek HarnessAll three clients can access memory tools through plugins. Workbench delegation saves new drafts; server-side delegation is currently limited to DeepSeek Harness. See installation requirements and validation limits in the agent guide (Chinese).
🧪Servers and multiple usersHome or cloud server deployment, device pairing, backup, and recovery. See the server guide (Chinese).

✅ Basic usage paths are implemented. 🧪 Optional dependencies or further real-environment validation are required. The table below states the actual validation scope; the icons do not establish coverage of every scenario.

Evaluation and verification

Server holdout answer quality, evidence recall, latency, and recorded tokens

The same frozen 48 questions were run twice on a server with 4 logical CPUs and 7.35 GiB memory, using real DeepSeek Flash and CPU EmbeddingGemma 2 through the normal Workbench ask workflow. The dataset contains four conversations, 116 sessions, and 2,536 messages; it has no conversation or question-text overlap with the development set.

MetricInitial retrieve@7Repair retrieve@8
Attempted questions48 / 4848 / 48
Correct / partially correct / wrong1 / 0 / 2922 / 11 / 5
Clarifications / failures / unpublished18 / 0 / 02 / 8 / 0
Mean evidence Recall, 47 eligible questions2.13%65.97%
All evidence found1 / 4726 / 47
Mean / median / P95 request time, all attempts18.494 / 15.623 / 25.369 s108.704 / 91.646 / 211.124 s
Known input / output tokens125,994 / 5,9881,078,134 / 32,089
Unknown-usage calls01
Physical model requests155192

Both batches used compose@30 / ladder@15 / rerank@2. The repair makes original material reachable when upper memory layers are empty; retrieve@8 is now the default. Two independent agents reviewed frozen answers against the complete original conversations. Recall measures evidence in the last dispatched answer input, with one invalid source annotation retained as null and excluded from its 47-question denominator. Time covers each complete server-side Workbench request, including failures and retries. The repair token count is a known subtotal; its complete total remains null because one transport failure has unknown usage. All 347 model attempts have terminal records. The eight Workbench 502 responses and all quality failures are retained.

The evaluation guide (Chinese) records grading, source annotation issues, CPU encoding, failures, and reproduction commands. The aggregate JSON and tools/rag_report.py reproduce this chart without model calls. Presentation follows the OpenViking RAG report. Monetary cost was not recorded. tools/rag_dataset.py freezes the original inputs; tools/rag_holdout.py runs the normal application workflow on the server.

Development questions, functional acceptance and earlier experiments

RAG30 development answer quality, latency, and recorded token usage

Fixed development setObserved result
Source review on 2026-10-2110 correct · 2 partially correct · 0 wrong · 0 unpublished
Questions / conversation sessions12 / 19
Median total / retrieval latency, all 12 attempts22.160 / 14.292 s
Recorded input / output tokens335,444 / 12,498
Physical model requests36

RAG30-20261011 used DeepSeek Flash, local EmbeddingGemma 2, and compose@30 / ladder@15 / retrieve@5 / rerank@2. The review checked frozen answers against all source messages with no new answer requests. These questions were repeatedly used during development. Supported unknown answers can count as correct; partial answers omit required facts. Its original aggregate JSON remains available.

Real DeepSeek acceptance on 2026-10-15 used two synthetic scenarios with pre-indexed originals:

ScopeObserved result
Final attempt, retrieve@7Three Workbench inputs returned HTTP 200; 17 functional checks passed, including retrieval, reading, clarification, and continuation after a reply without a question mark.
All three attempts38 real model requests; 51,797 input / 4,877 output tokens, including the earlier @6 decision failure and @7 follow-up failure. Unknown usage: 0. Monetary cost was not calculated.

This acceptance run covers retrieval, reading, clarification, and continuation in two synthetic scenarios. Live web search, AI organization after upload, and vector quality need separate evaluation. See the actual attempts, timings, and validation limits (Chinese).

Engineering verification below is separate from answer quality:

AreaEnvironment and scopeObserved result
Agentic RAG isolated controls (retrieve@6)Full application factory using the then-active defaults without policy overrides; temporary SQLite and fixed local HTTP model responses31 assertions passed for repeated retrieval, layered reading, clarification continuity, unconfigured web search, and idempotency. These fixed-response controls do not measure live model or web-search quality.
Built-in task recallProject retrieval, storage, read proofs, drafts, and receipts; synthetic model HTTP21 distinct controls passed, including profile and Library selection, prior-source revocation during retrieval, and a declared final draft. See scope and retained failures (Chinese). No new paid model requests.
DeepSeek Harness task to draftIsolated data root on Ubuntu 22.04; real Harness and DeepSeek Flash, including authenticated MCP memory toolsAfter a fix, one real task passed 29 checks. Both real attempts used 4,017 input / 1,226 output tokens in total; the first MCP tool-call failure is retained.
Correction after Hy-ASRReal SQLite, Turns, and confirmation; simulated ASR delivery and model transport30 new checks and 13 existing targeted checks passed; one pre-existing comment-fetch failure is retained. Real recognition and correction quality await evaluation.
Server CPU embeddingsUbuntu 22.04 instance, real model assets, and device pairingLoading, encoding, unloading, and reloading verified. GPU and standalone vector-service integration remain unverified.

The material-analysis candidate has confirmed L1 notes for 7/19 sources; the next source failed quotation validation. No new 12-question answer evaluation was run. Candidates compose@31, @32 / ladder@16 produced wrong or unpublished answers in retests; the current defaults are compose@33 / ladder@15.

The RAG pilot report (Chinese) retains earlier protocols and results.

Quick start

Requirements:

  • Windows 10 or 11.
  • Python 3.12. Select Add python.exe to PATH during installation.
  • Node.js: 20.x ≥ 20.19.0, 22.x ≥ 22.13.0, or ≥ 24.0.0. Version 22.x ≥ 22.13.0 is recommended.
  • A model API key. DeepSeek is the suggested provider; OpenAI-compatible endpoints are also supported.

Three steps:

  1. Clone the repository into a short path, such as D:\incremind. Deep directory paths can encounter the Windows 260-character path limit.

    git clone https://github.com/qingmingyiyang/Incremind.git incremind
    
  2. Double-click start.bat in the repository. The first run downloads and installs dependencies and takes several minutes. Later launches take about a minute. Your browser opens at http://127.0.0.1:4173. Closing the terminal window stops the application.

  3. Open Settings → Models and enter the endpoint URL, model name, and API key. The application interface currently uses Chinese; the names in this guide are English translations of its controls.

Send the example files in samples/ to the Workbench in order to try organization, project assignment, and incremental insights. The sample material is in Chinese.

Data location, launch options, and backups
  • Data is stored in the repository's runtime/ directory by default and is excluded from Git.
  • Choose another location: start.bat -DataRoot D:\IncremindData.
  • Close the running launcher before specifying a data location. Omitting -DataRoot reuses the running application.
  • Start without opening a browser: start.bat -NoBrowser.
  • Startup logs are in logs/.
  • To back up data, stop the application and copy the entire data directory, or use tools/backup.py. See the backup and recovery section of the server guide (Chinese).
  • Settings → Data → Backup creates an online snapshot that includes managed originals. Restore it to a new directory with tools/backup.py; retain separately any authorized local files outside the data directory.
Developers: start the backend and frontend separately

Set up the dependencies from the repository root:

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-web.txt -r requirements-dev.txt
cd src/frontend
npm ci
cd ../..

Run each command below in a separate PowerShell terminal at the repository root:

.\run-web.ps1

The backend runs at http://127.0.0.1:8001. This script fixes the data root to runtime/.

.\run-ui.ps1

The Vite development server runs at http://127.0.0.1:4173 and proxies /api requests to port 8001.

For experiments with a temporary data directory, start the backend directly:

$env:CHRIPTMAS_APP_ROOT = "$PWD\work\try-root"
$env:PYTHONPATH = "$PWD\src"
.\.venv\Scripts\python.exe -m uvicorn backend.memory_app.app:app --host 127.0.0.1 --port 8001

One-click startup is currently available for Windows. For Linux server deployment, see the server guide (Chinese).

Recommended synchronization: use local development commits as the code source, and publish filtered code changes along the public repository's existing clean AGPL history. Update servers to a fixed release, record deployment-version.json, back up code before restarting, check health, and retain a rollback path. Do not push private development history, runtime/, credentials, model configuration, or personal material from the server. Handle data backups and migration separately.

Load or unload the vector model on your computer, or use a standalone private server for vector computation while keeping the library on your computer. The standalone vector service and full application deployment are separate options. See Private server vectors (Chinese) for configuration and Linux templates. Self-hosted mode still follows the vector egress switch and privacy rules; it fills the cache on demand during questions. Real-server integration remains unverified.

Full server deployment keeps both the application and its data on the server. Users share the server's local vector model while retaining separate libraries and caches. The model starts unloaded; an administrator controls loading and unloading. See Server deployment (Chinese) for CPU/CUDA configuration, model installation, and device pairing. Installation, device pairing, CPU vector loading, encoding, unloading, and reloading, trusted HTTPS for the public IP address, and multi-user API isolation have been verified on an Ubuntu 22.04 instance. GPU and standalone vector-service integration remain unverified.

Usage

The Workbench provides a single input box.

InputResult
Paste text or a link, or drop a fileRemember: create an organized note and summary, assign a project, and propose insights for confirmation.
Ask a questionAsk: answer using your memory, with citations.
Request a document or another piece of workDo: create an output document using relevant memory.
Combine several requestsSplit them into parts and handle each separately.
Begin with #ProjectName or #ProjectName/SceneSpecify the assignment or retrieval scope. Otherwise, the system infers it.

While Ask or built-in Do is running, use the square Stop button on its receipt. Once it shows Stopped, Continue resumes the same task and keeps completed work. Model costs already incurred remain recorded.

After a note used in a clarification is edited or forgotten, new input uses the current materials. The original clarification and receipt remain available in the conversation.

Scene entry points and cross-project question suggestions preserve saved project and scene names containing spaces, slashes, or #.

If a file was accepted before a connection loss, resend the attachment still shown on the page to recover its original receipt. Once accepted, selecting the file again starts a new submission.

File uploads support UTF-8 TXT, Markdown (.md), and CSV, with or without a BOM. CSV keeps its original quotes, commas, and line breaks. PDF and DOCX files are also supported. DOCX extraction follows the order of paragraphs and tables, including nested tables. After a file is accepted, the receipt's More menu opens its full original text and download while organization is unfinished. Image groups list every original for download. Upload errors identify password-protected, text-free, or damaged documents and retain the text and attachment so you can replace the file and retry.

Unsaved Workbench note edits recover in the same browser after opening another original, navigating to the Library, refreshing, or reopening the browser. Saving checks the original revision; conflicts let you choose the content before saving again. Background task updates keep the selected source quotation highlighted.

Use the editor's download button to export a saved note or output as Markdown, HTML, DOCX, or PPTX. Save edits and resolve conflicts first; each file uses the exact saved revision.

Forgotten organized notes remain readable. Restore a note to edit or move it; its existing local draft is available again after restoration.

On a receipt, use ✓ to confirm an insight or ✕ to dismiss it. The project assignment receipt also offers an undo action.

Splitting or merging handwritten insights from the same scene keeps their scene for browsing and questions.

The Library groups insights, summaries, organized notes, and originals by project. Follow each layer down to its source evidence, or confirm, edit, forget, and restore insights here. Keyboard focus stays in the detail panel as you move between layers; Escape closes it and returns to the original list entry. Nested panels close one level at a time. If another client changes an insight during a split or merge, reload its current revision while keeping your text and selections, then submit explicitly.

Opening an insight's versions returns focus to its menu button. Tab enters the history, and Escape closes the detail panel.

Moving an organized note preserves its original source. If insight extraction fails, use Retry beside its assignment. After restoring the model configuration, it extracts insights from the same material and updates the original conversation and task list. Undo restores the previous project assignment.

Library and memo dates use your browser's local time zone. Date-only facts retain their recorded calendar date.

Administrators can edit a user's quota while disabling or restoring that account; unsaved quota fields remain available until explicitly saved or the account form is closed.

Sharing a result from a multipart turn includes that part's original question, answer, and selected citations.

When a method's sources change, you can refresh them, check the handwritten content, and save a new version without a model call. Review that version explicitly before exporting its ZIP. Refreshing restores focus to its button when focus has been lost, while preserving any control you selected during the request.

Inbox project suggestions file the complete suggested group, including members hidden by search. Retry in the same panel continues the accepted batch after a lost response.

Insight actions in multipart turns use the part's project. Confirming or discarding an insight immediately updates that part's receipt.

Opening an output's version list keeps keyboard focus in its panel. Escape closes the output and returns to its entry point.

Switching an editor between Markdown source and the organized view returns focus to its editor menu. Tab and Escape continue within the current panel.

Originals accepted through an external agent appear in the Library's Originals layer. You can open th