
orrery
Orrery — a local, private agent operating system. Every model and agent (Claude, Codex, Ollama, OmniRoute + any OpenAI-compatible gateway) orbiting one dashboard: goal mode, mastermind, kanban, content studio, a 3D memory galaxy over your Obsidian vault, and knowledge grounding. No API keys.
A local Agent Operating System
Quick start · What it does · Architecture · Security · Issues
🪐 Orrery — a local Agent Operating System
An orrery is a mechanical model of the solar system. This one models your AI: every model and agent orbiting one dashboard you control.
Orrery is a single-file-simple, local-first control room for AI agents. It runs on your machine, uses the logins you already pay for (no API keys handed around), and puts every engine, agent, and automation behind one screen — with a memory that compounds because it reads and writes your Obsidian vault.
No accounts. No cloud. No paywall. npm start and open a browser tab.
Why
Using AI today means juggling tabs — one for Claude, one for Codex, one for a local model, prompts scattered, nothing saved, your assistant starting from zero every session. Orrery collapses that into one dashboard where:
- every model is one click away and swappable mid-task,
- agents run in the background and report into one place,
- everything they produce is saved, previewable, and fed back into memory,
- and your Obsidian vault + knowledge graph ground every answer in your context.
Engines — bring your own logins, no API keys
Orrery never asks for or stores an Anthropic/OpenAI API key. Each engine authenticates itself:
| Tier | Engine | Auth | Best for |
|---|---|---|---|
| Sol | claude CLI | your Claude Code login (keychain) | frontier reasoning & code |
| Terra | codex CLI | ChatGPT OAuth (~/.codex) | everyday driver, sandboxed |
| Luna | Ollama | none — local & free | fast, private, zero-cost |
| Custom | any OpenAI-compatible gateway | your key (stored locally, 0600) | OmniRoute, OpenRouter, Groq, GLM, Kimi, MiniMax, vLLM… |
OmniRoute & other gateways: Settings → Third-party APIs has one-click presets. Anything that speaks POST /v1/chat/completions (SSE streaming) works — point Orrery at your OmniRoute gateway and it routes through whatever free/paid models it fronts.
Launch Orrery from your own terminal so the
claude/codexCLIs can read your login. Ollama and custom gateways work anywhere.
flowchart LR
UI["Dashboard UI\n(public/, galaxy.js)"] -->|WebSocket + REST| Server["server.mjs\nExpress + WebSocket"]
Server --> Engines["lib/engines.mjs"]
Engines -->|Sol| Claude["claude CLI\n(keychain login)"]
Engines -->|Terra| Codex["codex CLI\n(ChatGPT OAuth)"]
Engines -->|Luna| Ollama["Ollama\n(local, free)"]
Engines -->|Custom| Gateway["OpenAI-compatible gateway\n(OmniRoute, OpenRouter, ...)"]
Server --> Knowledge["lib/knowledge.mjs"]
Knowledge --> Vault["lib/vault.mjs\nObsidian vault"]
Knowledge --> Graphify["lib/graphify.mjs\ngraphify graph"]
Server --> Writeback["lib/writeback.mjs\nThe Loop"]
Writeback --> Vault
What it does
- 🛰️ Mission Control — streaming chat with any engine or named agent; a 🧠 Knowledge toggle grounds the reply in your vault + graph.
- ◎ Mastermind — put one question to several models in parallel; compare answers side by side, then fuse the best.
- ⟳ Goal Mode — hand it a goal and walk away. It loops in a sandboxed folder until the agent declares done; an optional judge model can verify each round.
- ☰ Kanban — drop a card, hand it to an agent; cards move themselves through the board as the agent works.
- ⏱ Routines — agents on a timer (daily news sweep, weekly audit, scheduled builds).
- ▣ Builds — every file an agent generates, previewable in one click.
- ✧ Agent Roster — 29 named specialists (orchestrator, judge, SEO office, video, content studio…). Click one to brief it.
- ◈ Content Studio — faceless YouTube producer, X/Twitter composer, Reddit scout, blog publisher, viral radar, content factory, lead-gen, backlink outreach. Social agents draft only and emit the exact post command — nothing posts on its own.
- ✦ Memory Galaxy — your Obsidian vault as a 3D star map: every note a star, every link a constellation, recent notes burning brightest. Drag to orbit, scroll to zoom, click a star to open the note.
- ⌘ Knowledge — search your vault and graphify graphs side by side; the same retrieval grounds agents.
- ♻️ The Loop — the compounding piece: when a goal completes, its outcome is written back into your vault as a structured note (frontmatter + tags +
[[wikilinks]]), so the next session starts smarter. Plus a journal and self-authored SOPs.
Quick start
git clone https://github.com/danielarif26/orrery.git
cd orrery
npm install
npm start # → http://localhost:4477
Open http://localhost:4477 in your browser.
- Ollama (free tier): install from ollama.com, then
ollama pull qwen2.5:7b-instruct(any model works). - Sol/Terra: log into the
claudeand/orcodexCLIs, and start Orrery from that same terminal. - Custom gateway: Settings → Third-party APIs → pick a preset (OmniRoute/OpenRouter/…) or add your own.
Grounding in your notes (optional)
Point Orrery at an Obsidian vault (default ~/openrouter/ObsidianMind) and, if you use graphify, a graphify-out/graph.json. The Memory Galaxy, Knowledge search, and the 🧠 grounding toggle all read from them; The Loop writes back to them.
Architecture
server.mjs Express + WebSocket · static UI · REST API · streaming chat
lib/engines.mjs drivers: claude (stream-json), codex (exec --json),
ollama (HTTP), custom (OpenAI-compatible SSE) + concurrency cap
lib/goals.mjs goal loop runner, per-goal sandbox dirs, run logs
lib/routines.mjs timer-scheduled goals
lib/agents.mjs the 29-agent roster (system prompts + engine + tools)
lib/memory.mjs append-only JSONL event log + keyword graph
lib/vault.mjs Obsidian vault → star map + full-text search
lib/graphify.mjs knowledge-graph search (parses small graphs, ripgrep-scans large)
lib/knowledge.mjs merges vault + graph into a grounding context pack
lib/writeback.mjs The Loop — structured note write-back, journal, SOPs
public/ vanilla SPA (no build step) + galaxy.js (3D canvas star map)
No build step, no framework, no database. Plain Node + vanilla JS.
Security
Orrery acts with your CLI logins and can run autonomous agents, so it is locked to your machine:
- Bound to
127.0.0.1with a per-boot token injected into the served HTML; every API route and the WebSocket require it. - Host allowlist (blocks DNS-rebinding) and Origin check (blocks cross-site fetch/WebSocket), so a random web page you visit can't reach it.
- Custom API keys live in
data/engines-custom.json(0600, gitignored), are masked in every response, and are never written into a goal's files. /workspacenever serves goal metadata/logs/dotfiles and carries a strict CSP; AI-generated previews run sandboxed with no network.- CLI args are
---terminated (no flag injection); model ids are slug-validated; concurrent agent processes are capped (AGENTOS_MAX_CONCURRENT, default 6).
Auto-approve goals run the agent with permissions skipped inside the goal directory. For codex that's a real OS sandbox; for claude it is not — use codex or a container for untrusted autonomous work.
Do not expose the port to a network.
Notes & limits
- The
claude/codextiers only work when Orrery is launched from a terminal where those CLIs are logged in. - The Ollama tier is chat-only (no file tools), so Ollama goals produce text, not files. For file-producing pipelines use Sol/Terra or a tool-capable gateway.
- Social agents are draft-only by design — they read via the
twitter/rdt/opencliCLIs (status in Settings → Channels) and hand you the post command.
Author
Orrery is mine — I'm S M Arifuzzaman, building it alongside client IT and web-dev work in Paris. I write about what I'm building at smarifuzzaman.online.
License
MIT. Built for people who want to own their AI stack instead of renting a dashboard.
Made by S M Arifuzzaman
🐦 X ·
📸 Instagram ·
▶️ YouTube (SecretAIHub)
How to Install
- Download the dashboard markdown file from GitHub
- Drop it into your vault (anywhere)
- Install the Homepage plugin and point it at the file
- Enable any listed CSS snippets for the intended look
Stats
Stars
1
Forks
0
License
MIT
Last updated 23d ago