Self-hosted, four purpose-built AI helpers for organisation, creativity, and reflection.
One generic AI can't hold all the roles you need it to. Reflection needs patience. Creation needs guardrails and momentum. Knowledge needs structure. It's not that most tools can't do it, but this one is the one that helps my brain.
Your data shouldn't live on someone else's server. Companions runs on your machine. Your vault is plain markdown files. No cloud account, no subscription, no lock-in. All local.
Context gets lost when your tools don't talk to each other. All four agents share one vault. A calendar event from Tracker shows up if Mentor needs context. A draft from Shapeshifter becomes a wiki entry Keeper can find later.
Each ships with a default name, emoji, and character. Rename them and tune the personality during setup or any time from the dashboard.
| Persona | Character | |
|---|---|---|
| π¦ | Tracker | Precise and grounding. Holds your day's shape β tasks, calendar, rhythm, and reflection. |
| πΈ | Mentor | Patient, ADHD-aware. Slows you down. One step, one next action, never a wall of text. |
| π¦ | Shapeshifter | Bold, fast, a little mischievous. Infers intent and acts β it already built it before Mentor finished the first question. |
| π | Keeper | Organised, quietly curious. Tends the knowledge vault so you don't have to remember everything yourself. |
Two agents, one shared space. They're opposites by design β Mentor slows you down, Shapeshifter speeds you up. Which one you reach for depends on whether you need to understand something or build something.
![]() |
Shapeshifter's default output is not a chat reply. It's a persistent, structured workspace saved to your vault β a live app rendered inside the tab. |
Canvases are built from 10 composable blocks:
| Block | What it renders |
|---|---|
markdown |
Rich text β headers, bold, lists, inline code |
tasks |
Interactive checklist β tap to check off |
note |
Coloured callout box (amber, blue, green, red) |
code |
Syntax-highlighted code block |
links |
List of labelled URLs |
filetabs |
Tab strip loading different vault files |
button |
Tappable CTA β opens chat or a vault file |
input |
Multi-line text field saved back to the canvas |
section |
Horizontal divider with optional label |
html |
Sandboxed WebView β full HTML / CSS / JS rendered inline |
The html block is where it becomes a playground. Write a self-contained React component, a chart, a custom layout β anything. Shapeshifter generates it, the app renders it live.
vault/
raw/ quick captures β notes, clips, voice transcripts
wiki/ linked knowledge β Keeper-maintained articles
journal/ dated entries β Tracker reflections and logs
projects/ long-form work β plans, drafts, active projects
Plain markdown. No database. Open any file in any editor.
curl -fsSL https://raw.githubusercontent.com/sanieldoe/companions/main/install.sh | bashRequires Node β₯ 20, git, and npm. Clones the repo, installs dependencies, and builds the server, dashboard, and Expo web app. Then start the server and open the setup wizard in your browser. The wizard covers vault path, your name, server secret, LLM provider, persona names, and optional Google Calendar.
Manual:
git clone https://github.com/sanieldoe/companions.git
cd companions/server && npm install
cd ../web && npm install
cd ../app && npm install
cd ../server && npm run setup && npm startThen open http://localhost:3000/install.
The first-run wizard at /install gets the server into a usable state without hand-editing config files.
- Vault path β points Companions at an existing vault or creates a fresh one with the required folders
- Identity + auth β stores your name and server secret
- Model setup β sets the default local or cloud model and any provider credentials you need
- Personas β rename the four companions and pick their emoji before first use
- Google Calendar β optional OAuth setup for Tracker
- Pairing β once the server is configured, the dashboard exposes the pairing URL, QR code, and deep link for the mobile app
What it produces:
- a ready server
.env - a usable vault structure
- persona files updated with your chosen names and emoji
- the hosted routes for
/install,/dashboard, and/app
| Provider | Example |
|---|---|
| Anthropic | anthropic:claude-sonnet-4-6 |
| OpenAI | openai:gpt-4o |
| omlx (local) | openai-compat:http://localhost:8000/v1:Qwen3.6-35B-A3B-4bit |
| Ollama (local) | openai-compat:http://localhost:11434/v1:llama3.2 |
Change the model any time from the dashboard β no restart needed.
Companions runs well (for the cost of speed) on Apple Silicon with omlx β an OpenAI-compatible inference server built for Apple's unified memory architecture.
Chat model: Qwen3.6 35B A3B 4bit β a mixture-of-experts model with 35B total parameters and ~3.6B active per token. The 4-bit quantisation fits comfortably in 32 GB of unified memory (M1 Max) with room to spare, while the MoE architecture keeps reasoning quality high despite the reduced footprint.
Vision model: Gemma 4 E2B 4bit (Heretic-Uncensored) β Google's 2B effective-parameter edge model with a built-in 150M Vision Transformer encoder. Handles images, screenshots, and documents natively. The MLX 4-bit quantisation brings it to ~2β3 GB on-device with near-zero quality loss, running on the Neural Engine alongside the chat model.
DEFAULT_MODEL=openai-compat:http://localhost:8000/v1:Qwen3.6-35B-A3B-4bit
DEFAULT_MODEL_KEY=your-omlx-api-key
VISION_MODEL=openai-compat:http://localhost:8000/v1:gemma-4-E2B-Heretic-Uncensored-mlx-4bit
VISION_MODEL_KEY=your-omlx-api-key- Android: Download APK β sideload and scan the QR code from the setup wizard
- Web:
http://<your-server>/appβ full Expo web build, identical to Android. Works on desktop and iOS Safari over Tailscale. - Dashboard:
http://<your-server>/dashboardβ manage vault, models, personas, and updates
Recommended remote access: Tailscale β the wizard detects it automatically.
| Server | Node β₯ 20, Express, WebSocket, TypeScript |
| Agent engine | @mariozechner/pi-coding-agent |
| Mobile | Expo 55, React Native 0.83 |
| Web | Vite 6, React 19 |
| Knowledge | LanceDB + HuggingFace Transformers |
- Pi coding agent β the core agent engine
- Andrej Karpathy β inspiration for the Keeper wiki model
- Expo / EAS β Android build infrastructure
MIT β see LICENSE.










