Advanced Markdown editor and presentation app for philosophical writing and teaching.
NightOwl is a desktop application built with Electron that combines a powerful Monaco-based Markdown editor with presentation capabilities, AI integration, and a unique "Babel Maze" exploration mode for navigating interconnected documents.
Part of the Machine Spirits project.
Download the latest release for your platform:
| Platform | Download |
|---|---|
| macOS (Intel) | NightOwl-x64.dmg |
| macOS (Apple Silicon) | NightOwl-arm64.dmg |
| Windows | NightOwl-Setup.exe |
| Linux | NightOwl.AppImage |
- Monaco Editor - Full-featured code editor with Markdown syntax highlighting and split preview
- Visual Markdown - Inline image previews, collapsible code blocks, wiki-style
[[links]] - Microfiche Preview - Scan long rendered documents as a paginated miniature grid, then select a frame to resume full-size reading at that section
- Presentation Mode - Create and present slides directly from Markdown
- PowerPoint Files - Preview complete PPTX decks through macOS Quick Look and open them directly in Microsoft PowerPoint (with system-open fallback elsewhere)
- Babel Maze - MUD-style exploration of interconnected Markdown documents
- AI Integration - Chat, summarization, and note extraction with multiple AI providers
- Citation Management - SQLite-backed citations plus page-linked PDF annotations and provenance-rich research notes
- Structured Records - Readable JSONL/CSV editing with optional task schemas, validation, and progress
- Graph Visualization - Force-directed graph of document relationships
- Bundled Features - App-native feature modules for presentation, preview, graph, maze, and feed workflows
# Clone the repository
git clone https://github.com/liammagee/night-owl.git
cd night-owl
# Install dependencies
npm ci
# Run in development mode
npm run electron-dev
# Or build for production
npm run distNightOwl uses signed-in command-line assistants for text AI by default:
- Install and sign in to Codex CLI and/or Claude CLI.
- Leave the assistant provider on
auto. NightOwl triescodex-cli, thenclaude-cli.
CLI requests run without tools in an isolated workspace. Direct API credentials are not inherited by these subprocesses. Automatic API fallback is off by default.
API providers remain available as explicit alternatives. To configure one:
- Copy
.env.exampleto.env - Add your API key(s) for the provider(s) you want to use:
# OpenAI - https://platform.openai.com/api-keys
OPENAI_API_KEY=sk-your-key-here
# Anthropic - https://console.anthropic.com/
ANTHROPIC_API_KEY=sk-ant-your-key-here
# Google Gemini - https://makersuite.google.com/app/apikey
GOOGLE_API_KEY=your-key-here
# Groq - https://console.groq.com/
GROQ_API_KEY=gsk_your-key-here
# OpenRouter - https://openrouter.ai/keys
OPENROUTER_API_KEY=sk-or-your-key-hereYou only need to configure the API providers you deliberately plan to use. Select a named provider in AI settings, or opt in to automatic API fallback.
The stateful tutor-stub CLI can also be launched from the Assistant terminal's tutor button. NightOwl auto-detects a sibling machinespirits-eval checkout; its path can be overridden in AI settings.
Configure AI behavior in the Settings dialog or via settings.json:
| Setting | Description | Default |
|---|---|---|
preferredProvider |
Which AI to use (auto, codex-cli, claude-cli, or a named API provider) |
auto |
providerPriority |
CLI order used by auto |
['codex-cli', 'claude-cli'] |
allowApiFallback |
Permit auto to use a configured API when both CLIs are unavailable |
false |
tutorStub.repositoryPath |
Optional path to a machinespirits-eval checkout |
auto-detect |
temperature |
Response creativity (0.0 - 2.0) | 0.7 |
maxTokens |
Maximum response length | 2000 |
Settings are stored in:
- macOS:
~/Library/Application Support/NightOwl/settings.json - Windows:
%APPDATA%/NightOwl/settings.json - Linux:
~/.config/NightOwl/settings.json
| Shortcut | Action |
|---|---|
Cmd/Ctrl+S |
Save |
Cmd/Ctrl+O |
Open file |
Cmd/Ctrl+P |
Quick file open |
Cmd/Ctrl+Shift+P |
Command palette |
Cmd/Ctrl+\ |
Toggle preview |
F5 |
Start presentation |
Cmd/Ctrl+Click |
Follow wiki link |
NightOwl follows Semantic Versioning:
- MAJOR (x.0.0): Breaking changes
- MINOR (0.x.0): New features, backwards compatible
- PATCH (0.0.x): Bug fixes
Pre-release versions use suffixes: 1.0.0-beta.1, 1.0.0-alpha.2
Found a bug or have a feature request?
- Check existing issues
- Create a new issue with:
- NightOwl version and OS
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
Contributions welcome! Start with CONTRIBUTING.md, the architecture map, and the build/release chain.
# Run the complete local branch gate
npm run ci:local
# Add distribution preflight for packaging changes
npm run ci:local:release
# Run deterministic startup/view performance budgets
npm run benchmark:performance
# After an unpacked build, verify packaged tutor-core storage
NIGHTOWL_PACKAGED_APP=dist/mac-arm64/NightOwl.app npm run test:e2e:packagedLive engineering status belongs in the source-controlled workplan board, not in architecture notes.
- Machine Spirits - AI-augmented Learning Management System
Built with Electron, Monaco Editor, and marked.