Skip to main content

LLM tools for summarizing web content into structured Obsidian notes.

Project description

cryptic

GitHub Actions Workflow Status Docker Image Version PyPI - Version License

The Cryptics have a fearful reputation, and yet this one – the first specimen I’ve ever seen – seems . . . ‘Imbecilic?’ -- Words of Radiance

Cryptic runs a persistent service that watches directories for incoming markdown files with some basic frontmatter and a body containing the raw HTML content of a website. The content is shipped off to an LLM provider (any OpenAI compatible endpoint), categorized, and summarized, with different summarizations and metadata extraction depending on the category. It uses structured output for reliability, and the entire prompt (other than the system prompt) is defined in the pydantic models. The results are then written out to finalized Markdown in configured output directories.

It's designed to pair with Obsidian Headless Sync and Obsidian Web Clipper. Web Clipper can do LLM processing out of the box, but the output formatting is somewhat limiting; an independent service allows much more flexibility in prompt design and output constraints.

I've included a basic webclipper template for reference in this repository.

Installation

From PyPI:

pip install cryptic-md

From source, clone and run:

poetry install

Set OPENAI_API_KEY, and optionally OPENAI_BASE_URL, in the environment or in a .env file in the project root.

Configuration

Create ~/.config/cryptic/config.yaml:

openai:
  models:
    - gpt-5.4-mini
  default_model: gpt-5.4-mini
  default_reasoning: medium

service:
  vaults:
    personal:
      input_dir: ~/Obsidian/Personal/cryptic-staging
      output_dir: ~/Obsidian/Personal/cryptic-processed
      originals_dir: ~/Obsidian/cryptic-originals
  max_concurrent: 3
  max_tries: 3
  pickup_delay_seconds: 3.0

Override the config path per-invocation with --config /path/to/config.yaml.

Usage

Process a single note in place:

cryptic process note --note path/to/note.md

Run the service against the configured directories:

cryptic service

Drain the input directory once and exit (useful for batch runs):

cryptic service --once

Common flags available on both commands:

  • --model NAME — pick a model from openai.models.
  • --reasoning {low,medium,high,xhigh} — set reasoning effort.
  • --config PATH — use an alternate config file.

Docker

Pre-built images are published to Docker Hub at camillescott/cryptic. The included compose.yaml is the simplest way to run the service:

# Provider API key
export OPENAI_API_KEY=sk-...
# To use a different provider endpoint
export OPENAI_BASE_URL=my.openwebui.local/api
docker compose up -d

It bind-mounts ./vaults/vaults (your Obsidian tree) and ./config/config (a directory containing config.yaml). Paths inside config.yaml must be rooted at /vaults, for example /vaults/personal/cryptic-staging.

To build the image locally instead of pulling:

docker build -t cryptic .

inotify works across bind mounts on Linux hosts. On Docker Desktop for macOS or Windows, host filesystem events don't propagate into the container.


Portions of this project's code have been written with agentic coding tools.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cryptic_md-1.1.2.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cryptic_md-1.1.2-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file cryptic_md-1.1.2.tar.gz.

File metadata

  • Download URL: cryptic_md-1.1.2.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.1 Linux/6.17.0-1013-azure

File hashes

Hashes for cryptic_md-1.1.2.tar.gz
Algorithm Hash digest
SHA256 0e1b435d3e04d0f9cf6517fd095b65502a1c020b9e3a83ed46f214f17bc87674
MD5 27265fade9314b8b9920a0f284a539d1
BLAKE2b-256 62a64a5389d6d9ed4588f9f1cd030aabcf3edd71ab8c08e4831ec8d88e52bf0d

See more details on using hashes here.

File details

Details for the file cryptic_md-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: cryptic_md-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.1 Linux/6.17.0-1013-azure

File hashes

Hashes for cryptic_md-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0e412283afc1d7463647f2e99129a0649d9d829f92cf1d9d3023eb3fb7d16eb5
MD5 fb227c55cdf68720602383be5b0a6ee0
BLAKE2b-256 fe0db31991513503edeb7c0f36ffd6a75fe8f1a3c4ff481385e7f3adebd1b8de

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page