Personal productivity desktop app for Windows — notes, tasks, projects, deliverables and calendar in one…
Horizon
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
A personal productivity desktop app for Windows, built with Python and PySide6 (Qt).
Manage notes, tasks, projects, deliverables, and calendar — all in one place, stored locally in SQLite.
---
Features
- **Notes** — Rich Markdown editor with live preview, version history, tags, and folder organization
- **Tasks** — Kanban-style task management with subtasks, priorities, buckets, and states
- **Projects** — Group notes, tasks, folders, and deliverables per project
- **Deliverables** — Track work outputs with templates and state lifecycle
- **Tags** — Auto-extracted #hashtags from note/task body, searchable globally
- **Full-text search** — FTS5-powered search across notes, tasks, and projects
- **Calendar** — Outlook calendar integration (reads meetings via win32com), with day-by-day navigation
- **Themes** — Single built-in theme (terminal), defined as JSON in src/horizon/themes/
- **HTTP API** — Local REST API for external integrations (port stored in ~/.horizon/api.port)
- **MCP server** — Model Context Protocol server for AI agent integration
---
Requirements
- Python 3.11+
- Windows (required for pywin32 hotkeys and Outlook calendar integration)
---
Setup
The SQLite database is created automatically on first launch at ~/.horizon/horizon.db.
No manual schema initialization is needed.
---
Running
On Windows you can also double-click Lancer-Horizon.bat at the repo root.
It launches the app without a console using the repo's .venv; on first run it creates that
virtual environment and installs Horizon in editable mode (it reinstalls if .venv points at
another checkout).
Only one instance of Horizon can run at a time: a second launch shows a warning and exits.
The local HTTP API starts automatically alongside the app (default port in ~/.horizon/api.port).
To run the MCP server separately (for AI agent integration):
---
Building a Windows executable
Every push to main and every pull request triggers
.github/workflows/build.yml, which freezes the app with
PyInstaller on a Windows runner and uploads Horizon- -win64.zip as a workflow
artifact. Tagging a commit v* additionally attaches that zip to a GitHub Release.
To reproduce the build locally:
The build is --onedir, not --onefile: the app loads its resources into a
QWebEngineView through file:// URLs, which onefile re-extracts to a temp directory on
every launch. Expect roughly 570 MB unpacked (~210 MB zipped), most of it QtWebEngine.
Dependencies are constrained at two levels: pyproject.toml carries
version bounds so a fresh pip install -e . cannot pull an incompatible release (mcp 2.x
dropped the low-level API mcp_server.py uses), while
requirements-build.txt pins exact versions so two builds of the