English | 한국어
Drop into Telegram. Auto-save as wiki. Wake up to a project dashboard.
Send anything to Telegram Saved Messages — a link, a thought, a PDF, a photo. Monogram classifies it with a 5-stage LLM pipeline and atomically commits it to a private GitHub repo as structured markdown. Then it renders the vault as an auto-generated, encrypted dashboard on GCP.
Your commits auto-organize into a Kanban. Your links become a wiki. Your mornings get a briefing. Same vault, three views — Obsidian, the dashboard, and Claude Desktop via MCP.
Dark, information-dense, password-protected, client-side decrypted. Runs from a static bucket ($0 / month on GCS free tier), a self-hosted server, or not at all (MCP-only mode). Design reference: docs/design/webui-mockup.html.
┌──────────────────────────────────────────────────────────────┐
│ INPUTS │
│ Telegram Saved Messages · Obsidian plugin · MCP │
└────────────────────────┬─────────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────────┐
│ PIPELINE (5 stages · per-stage latency logged) │
│ Orchestrator → Classifier → Extractor │
│ → Verifier → Writer │
└────────────────────────┬─────────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────────┐
│ VAULT (git) BACKUP (separate PAT) │
│ <user>/mono ⟶ <user>/mono-backup │
└────────────────────────┬─────────────────────────────────────┘
│
┌─────────┬───────┴───────┬────────────┐
▼ ▼ ▼ ▼
Morning Weekly Web UI MCP server
brief rollup (dashboard) (Claude / Cursor)
┌──────────────────────────────────────────────────────────────┐
│ OBSERVABILITY │ EVAL HARNESS (optional) │
│ log/pipeline.jsonl │ cassette replay · harvest loop │
│ /stats · CLI │ 3-layer kill-switch │
└──────────────────────────────────────────────────────────────┘
Six horizontal planes. Inputs → pipeline → vault/backup → consumer surfaces. Observability and eval sit below, cross-cutting. Full writeup: docs/architecture.md.
Python 3.10+, a GitHub account, a Telegram account, one LLM API key (Gemini free tier is sufficient).
pip install mono-gram
monogram init # interactive wizard
monogram auth # one-time Telegram auth
monogram run # listener + bot (leave running)The pip package is
mono-gram; the CLI command remainsmonogram. The Python import path is alsomonogram—from monogram import ....
Drop something into Saved Messages. Within seconds a commit appears on your vault repo. End-to-end walkthrough (GCP free tier → PyPI): deploying.md.
Optional extras:
pip install 'mono-gram[ingestion-all]' # YouTube, arXiv, PDF, Office, HWP
pip install 'mono-gram[eval]' # cassette-replay eval harnessOne vault, three ways to deploy the dashboard:
| Mode | Where it runs | When to pick it |
|---|---|---|
| GCS | Static bucket, client-side decrypt | Default. Bookmarkable URL, $0 at personal scale. |
| Self-host | Local Flask or any static host | Air-gapped / private network. |
| MCP-only | No web face — access via Claude Desktop / Cursor | Terminal-centric workflow. |
Password-protected. Content is encrypted at rest; the host only ever holds ciphertext. Regenerated on morning / weekly runs. Setup: docs/setup/gcp-webui.md (~5 min).
- Atomic writes (opt-in) —
write_atomic()lands every path in one commit via the GitHub Git Tree API. The default write path commits per file. - SSRF-hardened URL ingestion — every hop validated, including CGNAT + cloud metadata ranges.
- Credential safety by construction — classifier routing plus a writer-level secret-shape redaction backstop.
- Observability — one JSONL line per run, p50/p95/p99 on demand,
/statson Telegram. - Backup isolation — separate PAT + monthly restore drill in CI.
- LLM pluggability — Gemini / Anthropic / OpenAI / Ollama / custom, per-tier.
- Eval harness — cassette replay at zero LLM cost; harvest loop (off by default) grows fixtures from your real drops.
- Kill-switch — three independent layers, first match wins.
Each is a short section in docs/.
run · morning · weekly · digest · search · stats
backup · mcp-serve · eval · migrate
Details: monogram --help or docs/agents.md.
Drop URLs, PDFs, Office docs — they're extracted before the pipeline sees them. Full table + fallback chain in docs/ingestion.md. HWP is hardened against CVE-2024-12425/12426 and CVE-2025-1080; see SECURITY.md.
- Not a chat bot — no conversational turn-taking.
- Not a search engine —
monogram searchis grep + scope filters. Semantic search in v1.1. - Not multi-user — one Telegram account, one vault, one person.
- Not a replacement for Obsidian/Notion/Logseq — it's the ingest path. Your vault renders natively in any markdown editor.
- v0.8 (current) — core pipeline, ingestion, hardening, observability
- v1.0 — PyPI release after dogfood + RC soak
- v1.1 — news digest, MCP client mode, BM25 + embeddings search
Roadmap: see CHANGELOG.md for shipped features.
- deploying.md — GCP + GitHub + LLM provider setup, end-to-end
- docs/architecture.md — full topology
- docs/agents.md — per-stage schemas and prompts
- docs/setup/gcp-webui.md — dashboard deployment
- docs/setup/llm-providers.md — provider preset configs
- docs/setup/mcp-clients.md — Claude Desktop / Cursor integration
- docs/eval.md — eval harness + kill-switch design
- SECURITY.md — threat model + disclosure
- CONTRIBUTING.md — how to help
MIT. See LICENSE.

