Skip to content
earnerbaymalayPublic

About

A private, local AI command centre that knows your notes. Runs on localhost — Ollama + Obsidian, no cloud, no telemetry.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

◎ Aether Hub

A private, local AI command centre that knows your notes.

Local-first · Ollama · Tailscale · Syncthing · Obsidian

Runs entirely on 127.0.0.1 — no cloud, no accounts, no telemetry.

Aether Hub — Overview


What it is

Aether Hub is a JARVIS-style control dashboard for your personal Linux workstation. It unifies a local AI model and your own knowledge base behind one calm interface: chat with a model running on your machine, and watch it draw on your Obsidian notes rendered as a living graph. Everything is served from a Flask process bound to loopback — your data never leaves the machine.

It is not a browser extension and has no runtime dependencies beyond the local services it talks to. Anything that isn't running simply shows as offline.


Quick start

One-line installer — creates the virtualenv, installs dependencies, and adds an app launcher:

./install.sh

Or the manual path:

cd server
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python3 server.py

Then open http://127.0.0.1:5000.

On every launch, run.sh creates server/venv on first run, installs requirements, and starts the server — so ./run.sh is all you need day to day.

Requirements: Python 3.10+ and python3-venv (sudo apt install python3-venv on Debian/Ubuntu/Mint). Ollama with a model is optional but required for Chat and Agents — the first-run wizard can pull one for you.


The five surfaces

Everyday tools first, power-user extras last.

Surface What it does
Chat Talk to your local model via Ollama. Pick a model per message; toggle tools for vault / files / browser.
Memory (your notes) Your Obsidian vault as a live graph — every note a node, every [[wikilink]] an edge. Search, filter, minimap, and one-click distil (summarise).
Overview At-a-glance status: active model plus live CPU / RAM / temperature / battery.
Agents Supervised, allow-listed background tasks. Each flows QUEUED → RUNNING → REVIEW → DONE, and every result waits for your approval.
Systems Live health tiles for local services, each with a one-click action.

Chat — private AI on your own hardware

Chat

Conversations run against a model served locally by Ollama. Nothing is sent to a cloud API; the model, the prompt, and the reply all stay on the machine.

Memory — your notes, as a constellation

Memory graph

Point Aether Hub at an Obsidian vault and it renders your notes as an interactive graph. Notes are nodes, [[wikilinks]] are edges, and unresolved links appear dimmed. Pan, zoom, search, filter by type, and open any node to read its snippet and connections.


Architecture

┌─────────────────────────────────────────────────────────────┐
│  Browser  →  app/index.dc.html  (single-page DCLogic app)    │
│     │                                                         │
│     │  GET  /api/state        ── live telemetry              │
│     │  GET  /api/models       ── installed Ollama models     │
│     │  GET  /api/vault/graph  ── Obsidian notes → graph       │
│     │  POST /api/chat         ── model chat        (token)   │
│     │  POST /api/action       ── system actions    (token)   │
│     │  POST /api/swarm/task   ── agent tasks        (token)   │
│     │  GET  /api/setup/status ── first-run detection          │
│     ▼                                                         │
│  server/server.py  (Flask, 127.0.0.1:5000)                   │
│     ├─ bg_task thread       → polls Ollama / Tailscale / …    │
│     ├─ swarm_worker thread  → runs allow-listed agent tasks   │
│     ├─ vault scanner        → notes + wikilinks → graph        │
│     └─ pull_models thread   → auto-pulls + pre-warms default   │
└─────────────────────────────────────────────────────────────┘
  • Frontend is a single index.dc.html on the small React-like DCLogic framework, with view logic and state in app/support.js. No build step.
  • Backend is a single server/server.py (Flask) with background threads for telemetry, the agent worker, and the vault scanner. Requirements: flask, flask-cors, requests, psutil.

Simple vs Advanced

A one-click toggle in the top bar switches modes. Simple shows just Chat, Memory and Overview — hiding Agents, Systems, the top-bar telemetry and the model rail for a clean, non-technical experience. Advanced reveals everything. Your choice is remembered between sessions.

First run

On first launch a setup wizard checks whether Ollama is running, whether a local model is installed, and whether your vault exists — with one-click buttons to pull a starter model and create a starter vault. It only appears when something needs attention; once you're set up, you go straight to Chat.

Configuration

Aether Hub works out of the box, but a few environment variables let you tune it:

Variable Default Purpose
AETHER_APP_DIR ../app (relative to server.py) Where the frontend is served from
AETHER_DEFAULT_MODEL dolphin-llama3:8b Model the wizard pre-warms / auto-pulls
Vault path ~/Obsidian/AetherVault Falls back to ~/Obsidian, then ~/Documents
Port / host 127.0.0.1:5000 Loopback only (edit server.py to change)

Private by design

  • Loopback-only. The Flask backend binds to 127.0.0.1:5000 and nothing else — it is not reachable from your network.
  • Per-launch token. Each launch mints a fresh token injected into the served page; state-changing requests (/api/chat, /api/action, /api/swarm/*) are refused without it.
  • Action allow-list. Agents and system actions run only from a fixed allow-list of safe, read-only operations — no arbitrary shell, no injection.
  • No telemetry. Aether Hub talks to nothing on the internet. Your notes and conversations stay on the machine.

Troubleshooting

  • ensurepip is not available / venv won't create — install the venv package: sudo apt install python3-venv (or python3.12-venv for a specific version), then re-run ./install.sh.
  • Port 5000 already in use — stop the old instance: lsof -ti:5000 | xargs -r kill.
  • Chat says a model isn't available — start Ollama (ollama serve) and pull one (ollama pull dolphin-llama3:8b), or use the first-run wizard's one-click pull.
  • A Systems tile shows offline — that service simply isn't running; start it and the tile turns green.
  • Memory graph is empty — point the vault at an Obsidian folder and add a couple of .md notes, or use the wizard's "Create starter vault".

Usage tips

  • Deep-link a view by hash: #chat-style routing uses the internal view keys #console, #memory, #core, #swarm, #systems — handy for bookmarks.
  • Theme it with the colour dots in the top bar; the choice persists.
  • Launch from your app menu — install.sh adds an "Aether Hub" entry, and can enable autostart-on-login (remove ~/.config/autostart/aether-hub.desktop to undo).

Roadmap

  • Richer Memory graph (backlinks pane, tag clustering)
  • More allow-listed Agent task types
  • Per-service quick actions in Systems
  • Optional light theme
  • Streaming chat responses

Contributing

Issues and pull requests are welcome. The stack is deliberately small — a single Flask file and a single-page frontend, no build step — so it's easy to run and hack on. Please keep the loopback-only, no-telemetry, allow-listed-actions posture intact for anything that touches the system.

License

MIT.

About

A private, local AI command centre that knows your notes. Runs on localhost — Ollama + Obsidian, no cloud, no telemetry.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages