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.
Based on Victor Taelin's UniiChat source code.
- One chat, forever. No new chats or sessions. Every tab, phone and terminal shows the same live chat.
- A memory system that keeps everything. Messages are summarized into a tree that the agent sees every turn: recent messages in detail, older ones more broadly. It can zoom into any line, down to the original message.
- All your computers. Run
unii deviceon a machine and the agent can run commands and edit files there. - Subagents do the grunt work in the background and report back.
- Goals.
/goalkeeps UniiChat working until something is done. - Don't start from scratch. Import past conversations from either Claude Code, Codex or another UniiChat instance into your memory tree.
What this fork adds:
- Claude and ChatGPT plans as vendors (
claude-sub,openai-sub) beside API keys; profiles that fall back to the next model when one is out; auto-resume after hitting usage limits; a model per subagent. - Native Windows: server, devices and terminal, with a one-line PowerShell install.
- MCP servers per device.
- Skills read from the ~/.agents/skills folder.
- Scheduling tools to give your agent future or repeating tasks.
- Image and video viewing tools to let it see images and video files.
- Settings page where you can customize the system prompt and compaction prompt.
- Improved memory tree viewer to browse what your agent knows.
- Full markdown as GitHub draws it, in the web app and the terminal.
- Images, video, audio and HTML pages inline for the agent to show you things, or for you to show the agent.
- Conversation mode for when you want a short continuous back-and-forth without the agent forgetting anything you said.
- An installable web app (PWA) on phones and desktops: icons, an offline shell, Web Push for replies, a nav bar that shows on Android; the composer stays above a phone's keyboard.
- One owner per server, no accounts, email, billing, or anything
else exclusive to the uniichat.com version;
unii serve sessionsandunii serve sessions revoketo sign a lost device out. - Background services (
-d,stop,logs) that updates restart. - Subagent improvements: their own tab, a
stopthat ends one and its jobs, and a report when one hits a usage limit. - No telemetry or update checker:
unii updatewhen you want it. - Better defaults: Sonnet 5.5 medium does the compaction, seeing 4 KB of chat around each message (was Haiku 5.5 high with 32 KB), so summaries make up less.
Linux, macOS or WSL:
curl -fsSL https://github.com/arteeh/uniichat/releases/latest/download/install.sh | sh
Windows (PowerShell, no admin needed):
irm https://github.com/arteeh/uniichat/releases/latest/download/install.ps1 | iex
Either way you get one unii program (in ~/.local/bin, or
%LOCALAPPDATA%\Programs\unii on Windows). unii update installs the
newest release and restarts the background services on it.
- Start the server on the computer that keeps your chat:
unii serve -d. It runs in the background from then on, at http://127.0.0.1:8788, with its data in~/.unii(or$UNII_DIR). To use it from other devices, put it behind HTTPS (see Q&A) and setsitein Settings to that address. - Sign in.
unii serve linkon that computer prints a link that signs your browser in. Terminals and devices sign in with a link and a code you confirm in that browser. - Pick a model. In the web app, ☰ › Settings: add API keys. To use
your Claude or ChatGPT plan instead, run
unii serve claude loginorunii serve chatgpt loginon the server's computer, then pickclaude-suboropenai-sub. - Add your computers. On each one Unii may work on:
unii device -d https://your-server. Unii works in~/.unii/workthere. Want it working on the server's computer too? Run a device there as well.
MCP servers belong to a device: list them in that device's
~/.unii/config.json, in the same shape as Claude's mcpServers:
{ "mcp": { "blender": { "command": "uvx", "args": ["blender-mcp"] } } }
Unii sees them from its next turn, no restart. Switch them on or off in Settings.
In the background, -d runs the server or a device as a service of
your user (systemd on Linux, a Scheduled Task on Windows, a LaunchAgent
on macOS): it starts at login and restarts if it crashes.
unii serve stop / unii device stop removes it, logs -f follows its
output. On Linux, loginctl enable-linger keeps it running while you're
logged out. On Windows, sudo unii device -d offers to run it as
administrator, so Unii can control apps that run as admin; then
sudo unii device stop removes it.
Settings are mostly on the Settings page, including Unii's system
prompt and compaction prompt. They're kept in ~/.unii/config.json,
where UNII_<KEY> environment variables override them. One lives only
there: after, a shell command to run after each turn.
- Web: open the server's address. Install it as an app from your browser to get notifications when Unii replies.
- Terminal:
unii [url]./helplists its commands;/importbrings in this computer's Claude Code and Codex sessions. Without a url it uses$UNII_URL, else the last one, else http://127.0.0.1:8788. The terminal and devices keep their server and sign-in in~/.config/unii. - Conversation mode: the switch next to "fold all" (
/modein the terminal). From then on, your and Unii's messages stay word for word in Unii's memory, for a real discussion. It costs more per turn and turns itself off when the model's context window fills up. unii helplists every command.
From source (Bun): bun install, bun run web, bun Cli.ts <command>,
bun run build for a single unii program.
Back up ~/.unii first if you may want your chat back. Run
unii device stop and unii serve stop where you used -d, then:
- Linux, macOS:
rm ~/.local/bin/uniiandrm -rf ~/.unii ~/.config/unii. - Windows:
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\Programs\unii", "$HOME\.unii", "$HOME\.config\unii", and take%LOCALAPPDATA%\Programs\uniiout of your user Path.
Can Unii use my screen?
Not by itself: ask Unii to add a computer-use MCP server, such as cua-driver, to the device whose screen it should use.
I don't trust its unlimited tool calling. Can I sandbox Unii?
Yes, with Docker Sandboxes. Run
unii device inside the sandbox and on no other computer, pointed at
your server outside it (http://host.docker.internal:8788 if it runs on
the same PC), and let the sandbox reach it:
sbx policy allow network localhost:8788. That device's MCP servers
run in the sandbox too.
I don't trust its unlimited tool calling. Can I make it ask for permission on tool calls?
You enjoy pressing enter?
How can I reach UniiChat from outside my home network?
With Tailscale: ask Unii to set up Tailscale Serve on HTTPS port 443,
pointing at unii serve. Only your own Tailscale devices can reach it,
not the whole internet.
Can others use my server?
No: a server has one owner. Anthropic and OpenAI don't allow sharing a plan, either.
Upgrading from arteeh.16 or older?
Stop the server first (systemctl --user stop unii-serve), run the
installer, then start it again: it moves your data to the new layout.
The terminal no longer works on files itself: run unii device on each
computer Unii should work on.
Apache-2.0 (LICENSE). Copyright 2026 Higher Order Company. Copyright 2026 Maarten de Jong.