A local-first AI knowledge & agent workspace
Hetu puts Markdown notes, chat and coding sessions on one data layer: SQLite + sqlite-vec (or PostgreSQL + pgvector) stores content and vectors, ASP.NET Core 10 serves the API and the agent loop, React 19 renders the UI, and a Tauri 2 shell ships installers and auto-update. Model calls only go to providers you configure.

One process, one database, two entry points
The Notes page is for writing and organizing; the Code page (/code) is for asking and doing. Both read and write the same SQLite/PostgreSQL database and share the knowledge base, graph, memories and task system. The desktop build starts the backend as a sidecar, with data in the OS user data directory.
Notes
Milkdown WYSIWYG plus a CodeMirror source view; select text to run AI actions (polish / translate / condense / expand / explain / custom); notebooks, tags, version history, share links, trash, Markdown export.
Agent workspace
Sessions and topics, SSE event stream, tool calls with approvals, five permission modes, reasoning effort, send queue and mid-run steering; distill a topic into a note.
Code sessions
Local or SSH repositories; current branch or an isolated worktree; local and remote branches with one-button Git sync; seven panels: files, changes, checkpoints, Git, PR, browser, terminal.
Retrieval and structure
Notes, files and URLs are chunked and embedded; the knowledge graph extracts entities and relations; Wiki generation turns a repository into docs; memories persist across sessions with Dream consolidation.
Organization and automation
Kanban board (tasks executed by agents with recorded run steps), visual workflows, background and cron-scheduled jobs, inbox notifications.
Extensions and models
Agents (prompt presets with tool allowlists and per-tool approval), skills (built-in, custom, on-disk), built-in tool toggles, MCP servers, multiple providers with per-scenario defaults, a compatibility proxy, usage and cost tracking.
Technical choices and boundaries
Everything below is a mechanism that actually runs in the codebase, not a concept slide.
| Topic | Implementation |
|---|---|
| Storage | SQLite by default (Data Source=hetu.db) with the sqlite-vec extension; switchable to PostgreSQL 16+ with pgvector via DatabaseProvider — same feature set |
| Paging and aggregation | List endpoints are paged and aggregated in the database (SQL COUNT + OFFSET/FETCH, GROUP BY for counts and summaries); knowledge-base status no longer loads whole tables |
| SQLite time ordering | The provider cannot order or aggregate DateTimeOffset in SQL; the repository ships GetPagedByDateAsync / CountByAsync / PruneAsync that project the sort key, order in memory and fetch the page by primary key |
| Read caching | Polled read-only status endpoints carry a short [ResponseCache] to avoid duplicate queries |
| Agent loop | SSE event stream (delta / thinking / tool call and result / steering / checkpoints / approvals / notices); queueing and mid-run steering; long work is recorded as TaskItem rows |
| Code isolation | git worktree per session, defaulting to .hetu-worktrees/<repo>/<worktree> next to the repository, with automatic cleanup by merge status and idle time |
| PR integration | Detects gh or glab from the origin remote; prints platform-specific install hints when the CLI is missing |
| Desktop | Tauri 2 shell with a backend sidecar; fat / slim installer channels; updates via GitHub with three mirror fallbacks; an installer hook kills leftover backend processes before overwriting files |
| Quality bar | Backend dotnet build and frontend eslint must be warning-free, and no suppression is accepted (pragma / eslint-disable / SuppressMessage) |
Deeper details (layering, request path, data model, performance work) are in Architecture.
Real UI (click for full size)
Every shot below is real local data. If a thumbnail is too small to read, click it.








Two ways to run it
Desktop build (no toolchain)
# Installers: Windows NSIS / MSI, Linux AppImage / deb
# https://github.com/wosledon/Hetu/releases/latest
#
# fat = bundles the .NET runtime (~100 MB+)
# slim = smaller, requires the .NET 10 runtimeClosing the window minimizes to the tray and the backend keeps running; use the tray menu to quit.
From source
git clone https://github.com/wosledon/Hetu
cd Hetu
pwsh ./scripts/start.ps1 # Windows
./scripts/start.sh # Linux / macOS
# frontend http://localhost:5174
# API http://localhost:5000/api
# docs http://localhost:5000/scalar/v1Requires .NET SDK 10.0+ and Node.js 20+.
One page per feature area
Each page covers the concrete knobs: configuration keys, panels, shortcuts and troubleshooting.