VictorTaelin/uniichat
About VictorTaelin/uniichat
VictorTaelin/uniichat is an open-source project on GitHub, mainly written in TypeScript. It currently holds 605 stars and 63 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
Git Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
UniiChat ========
▶ Watch the announcement video
This repo is vibe-coded. AI agents wrote nearly all of it, and AI agents reviewed it. Read it, run it and fork it as such: expect bugs.
UniiChat is an AI agent with one chat that never ends. There is no "new chat" button: you talk to the same agent for days, weeks, years, and it remembers. The hosted version is at https://uniichat.com. This is its source, to run your own server on your own API keys.
How it works ------------
- One chat, a memory tree. Every message is summarized into one line,
- Zoom. The agent can open any line into the two it was made from,
- Built in the background. Summaries are written by a cheaper model
- Every window is a view. The server owns the chat. A browser tab, or
unii in a terminal, shows it live; any of them can send a message,
stop the work, or change the model.
- Agents and tools. The agent runs a shell, reads and edits files,
unii is open
(each is a device it can name). It can spawn subagents, which work in
the background and report back as messages.
- Import. Bring your past Claude and ChatGPT chats (Claude Code and
The design is in the header comment of each file. Start with Memory.ts (the tree and the view), Server.ts (the chat, turns, workers) and AskAI.ts (model calls and the cache).
Run it ------
You need Bun and an Anthropic API key (or an OpenAI one, below).
export ANTHROPIC_API_KEY=sk-ant-... bun Server.ts # http://127.0.0.1:8788, data in ~/.unii
Then open http://127.0.0.1:8788 and type your email. With no mail key set, the server prints the sign-in link in its output: open it. Or chat from a terminal:
bun Term.ts http://127.0.0.1:8788
It asks for your email, the server prints a link, and the page it opens
asks for the code the terminal shows. bun Term.ts help lists the rest.
Other commands:
bun run test # the tests, each file on its own
bun run web # rebuilds web/app.js from web/src
bun build --compile Term.ts --outfile unii
# one unii executable; unii serve
# runs the server it carries
Your chats live in ~/.unii/users/, one JSON line per message (main/) and per summary (tree/). They are the memory: back them up.
Config ------
~/.unii/config.json (optional; the dir is $UNII_DIR). Each key may
also be set as the variable UNII_:
site: the server's origin, for sign-in links (default
vendors: what the server offers, comma-separated:claude-api
openai-api.
models: the models offered, by label (Pick.ts; default all).pick: what a chat runs on until it picks another,
vendor:model:effort:speed (default claude-api:sonnet-5.5:medium:slow).
compactor: what writes the summaries (default
claude-api:haiku-5.5:high:slow).
agents: what subagents run on (default: the chat's pick).work: the agents' working dirs on each device (default
rules: a file appended to every system prompt.after: a shell command run after each turn.workers: how many processes serve the users (default none: one
Server.ts only routes, behind a proxy that
honors its x-unii-worker header (Server.ts explains).
apple,apns: the iOS app's App ID and push key id (ios/).
ANTHROPIC_API_KEY,
OPENAI_API_KEY, RESEND_API_KEY (to email sign-in links; none: they
print), APNS_KEY.
With only an OpenAI key, set vendors, pick and compactor to
openai-api models, e.g. `UNII_VENDORS=openai-api
UNII_PICK=openai-api:gpt-6.1-sol:medium:slow
UNII_COMPACTOR=openai-api:gpt-6-luna:high:slow`.
A self-hosted server is free: it bills no one, shows no prices, and calls only the model vendors. Billing.ts is the one place a hosted server plugs in its billing (uniichat.com sells credits; this repo has none).
The unii terminal
-------------------
web/install.sh (served at /install.sh) runs the official installer,
which installs the released unii executable. unii alone opens
uniichat.com; unii opens any server. Run with
UNII_COMPUTER=1 on a Mac, the agent may use its screen (it compiles
Computer.swift with swiftc; macOS asks for Screen Recording and
Accessibility).
Telemetry: once a day the unii terminal asks bend-lang.com's /check
for the latest version (Term.ts update_check), sending its version, OS
and CPU type, no account and no id; it also says whether this computer
has ever self-hosted (set for good the first time it runs unii serve
or opens a server other than uniichat.com). It is the one call a
self-hosted UniiChat makes to us. UNII_NO_TELEMETRY=1 turns it off.
License -------
Apache-2.0 (LICENSE). Copyright 2026 Higher Order Company.