Skip to content

sanieldoe/companions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

65 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Companions logo

compAnIons

Self-hosted, four purpose-built AI helpers for organisation, creativity, and reflection.

License: MIT Node β‰₯ 20 Latest release BYO LLM


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.


The four personas

The four Companions personas

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.

🐦 Tracker β€” Daily rhythm and reflection

Tracker phrase and calendar

Weekly phrase β€” a short line to sit with and return to through the week

Calendar β€” pulls in Google Calendar events so the day has context and shape

Tracker todos and rhythms

To-dos β€” p1 / p2 / p3 priorities; incomplete tasks carry forward automatically

Rhythms β€” recurring commitments across any cadence: daily, every N days, every N weeks, weekly, monthly, annual

Tracker haiku

Haiku β€” three lines written fresh every evening as a reflective practice for the day


🐸🦊 Mentor & Shapeshifter

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.

πŸ’¬ Conversation

Chat tab β€” Mentor and Shapeshifter

The Chat tab lets you talk to either. Switch between them at any point.

Mentor One step at a time, one next action per response,Canvas only when you ask.

Shapeshifter infers your intent and acts. States one assumption in a line, then builds.

🎨 Canvas β€” React app playground

Shapeshifter canvas

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.


🐝 Keeper β€” Personal wiki

Keeper knowledge graph

Surfaces forgotten knowledge β€” prioritising older, reinforced memories you've likely lost track of.

Keeper raw captures

Drop in raw notes, voice dumps, or rough ideas. Keeper extracts the signal, organises it into the wiki, and keeps the index clean.

Keeper wiki

The wiki follows a Johnny Decimal structure so nothing gets lost in an undifferentiated pile:

01-identity Β· 02-knowledge Β· 03-projects Β· 04-areas Β· 05-relationships Β· 06-creativity Β· 07-systems Β· 08-resources Β· 09-media Β· 10-events Β· 11-questions Β· 99-archive


One vault, shared by all four

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.


Quick start

curl -fsSL https://raw.githubusercontent.com/sanieldoe/companions/main/install.sh | bash

Requires 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 start

Then open http://localhost:3000/install.


Setup wizard

Companions setup wizard

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

Dashboard

Companions dashboard personas panel

The dashboard at /dashboard is the control surface after setup. It is separate from the chat UI and is meant for server administration, model changes, and maintenance.

  • Personas β€” rename each persona, swap emoji, and edit the underlying prompt text
Companions dashboard models panel
  • Models β€” connect providers, store API keys, choose a default model, and override models per persona
Companions dashboard logs panel
  • Vault β€” inspect vault stats, change the vault path, and run backups
  • Logs β€” watch the live server log stream in the browser
  • Setup β€” copy connection details, generate QR/deep links for pairing, inspect version info, and run in-place updates

Bring your own model

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.

Running fully local on Apple Silicon

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

Mobile + web

  • 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.


Tech stack

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

Acknowledgements


MIT β€” see LICENSE.

About

Self hosted, four purposed built ai helpers for organisation, creativity and reflection.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages