Skip to content

HarimxChoi/monogram

Monogram

English | 한국어

Drop into Telegram. Auto-save as wiki. Wake up to a project dashboard.

tests eval License: MIT Python 3.10+

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.

Monogram dashboard — projects, wiki, life recent, commits

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.

Monogram walkthrough — capture, vault, dashboard, MCP

Architecture

┌──────────────────────────────────────────────────────────────┐
│  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.

Quickstart

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 remains monogram. The Python import path is also monogramfrom 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 harness

Web UI

One 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).

What you get

  • 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, /stats on 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/.

Commands

run · morning · weekly · digest · search · stats
backup · mcp-serve · eval · migrate

Details: monogram --help or docs/agents.md.

Ingestion

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.

What this is not

  • Not a chat bot — no conversational turn-taking.
  • Not a search engine — monogram search is 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.

Roadmap

  • 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.

Links

License

MIT. See LICENSE.

About

Personal knowledge pipeline. Telegram -> 5-stage LLM -> markdown vault -> encrypted dashboard. MCP-queryable.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors