Skip to main content

Own your algorithm: a personal newsroom whose agent composes a print-ready paper from sources and preferences you own as files.

Project description

Morning Paper wordmark with a terminal composing a printed edition

Morning Paper

Own your algorithm. Your personal newsroom.


Your feeds already trained an algorithm you cannot see. Morning Paper helps you build one you can inspect, edit, and print.

An agent composes a newspaper from sources and preferences you own as files. The morning-paper CLI renders it to a print-ready PDF. The product is the paper on the desk: calm, finite, source-backed, and easy to mark up.

It gets better the way an editor gets better. You read the paper, give notes in natural language, and the agent turns stable feedback into durable newsroom files such as EDITORIAL.md, VISUALS.md, SOURCES.md, DELIVERY.md, and TASTELOG.md.

Set Up With An Agent

Use a strong reasoning model and paste this into Claude Code or Codex:

Install Morning Paper on this machine.

Morning Paper is an owned algorithm: an agent composes a newspaper from sources
and preferences I keep as files, and the `morning-paper` CLI renders it to a
print-ready PDF. Success is a real demo PDF on disk and open on my screen, not
just a successful package install.

Do this end to end:
1. Install the latest `morning-paper[pretty]`.
2. Confirm `morning-paper --version` matches the latest version on PyPI.
3. Run `morning-paper doctor --strict` and fix what it flags until the
   typewriter renderer and render self-test pass.
4. Run `morning-paper demo --open`.
5. If install chose the wrong Python or an old package, prefer:
   `uv tool install --python 3.13 "morning-paper[pretty]"`.

Stop when the demo PDF exists and is open on my screen. Show me the exact
commands that worked, the installed version, and the PDF path.

Do not set up my private newsroom yet. First prove the engine prints.

After the demo PDF is open, install the plugin and say: set up my morning paper.

  • Claude Code/plugin marketplace add dmthepm/morning-paper, then /plugin install morning-paper@morning-paper
  • Codexcodex plugin marketplace add dmthepm/morning-paper, then codex plugin add morning-paper@morning-paper

The plugin carries the setup, edition, and writing skills. The engine package alone renders papers; the plugin teaches the agent how to create and operate your private newsroom.

Manual Install

uv tool install --python 3.13 "morning-paper[pretty]"
morning-paper --version
morning-paper doctor --strict
morning-paper demo --open

pipx install --python 3.13 "morning-paper[pretty]" is the main fallback. Use pip only inside a virtual environment. On macOS, the print stack may also need brew install pango gdk-pixbuf.

What It Does

  • Renders a demo paper with no config or network.
  • Scaffolds a private newsroom repo with durable preferences and setup state.
  • Stages URLs or local files into a dated queue with page estimates.
  • Builds daily editions from configured sources and staged material.
  • Lets local collector scripts bring in anything else: folders, exports, Obsidian vaults, GitHub activity, business systems, research reports, or agent-produced files.
  • Typesets markdown through print style packs and chart directives.
  • Reviews a finished edition for editorial problems before delivery.
  • Works without an LLM key; the agent experience comes from Claude Code or Codex.

No database. No Docker. No hosted account required. No fabricated filler: a missing source prints "not configured" or "nothing today."

Sources

Morning Paper should meet your sources where they already live: the work that needs your attention, the people trying to reach you, the tabs you saved, the feeds you chose, the repos and tickets that changed, and the exports or folders your tools already produce. The source layer is intentionally plural: files, URLs, folders, inboxes, APIs, local scrapes, and agent-generated reports all become staged markdown before the editor decides what deserves ink.

Examples:

  • email newsletters, Slack channels, Discord threads, or contributor notes;
  • GitHub activity, Linear tickets, Main Branch updates, or other work systems;
  • Twitter/X, YouTube, TikTok, Instagram, podcast, or browser-history exports;
  • folders, synced files, Obsidian vaults, saved articles, and local reports;
  • one-off URLs staged for tomorrow's paper.

Article extraction is replaceable plumbing. The current engine has registered extractors, but the product promise is not "use this scraper." Local extraction keeps URL capture on your machine; remote readers or browser/API scrapes should be explicit choices recorded in the staged item. The promise is: stage source-backed material honestly, record when extraction was partial or remote, and let the editor decide what earns space.

See docs/collectors.md for the staging contract. See docs/source-conversion.md for small converter recipes when the local drop folder contains CSV, JSON, PDFs, vaults, work exports, or social/video history.

Daily Routine

Prefer the native recurring primitive of the agent host you already use. Morning Paper should not invent a second scheduling system unless you ask for a local fallback.

Copy one of these into the host:

Set up a Claude Code routine that builds my Morning Paper each weekday morning.
Use the Morning Paper edition skill in my private newsroom, render the PDF, open
or deliver it the way my DELIVERY.md says, and tell me only if the run failed or
needs my attention. If you are in the Claude Code CLI, use /schedule to create
the routine.
Set up a Codex automation that builds my Morning Paper each weekday morning.
Use this project/newsroom, run the Morning Paper edition workflow, render the
PDF, and report the PDF path plus anything that needs my attention.
Set up a scheduled task for my Morning Paper. Each weekday morning, check
whether today's paper was produced or remind me to run the Morning Paper
edition workflow in my newsroom. If you have an approved way to access the
newsroom runner, use it; otherwise do not pretend you rendered the PDF.

Claude Code calls this a routine. Codex calls it an automation. ChatGPT calls it a scheduled task. The important distinction: Codex and Claude can run inside the project/newsroom; ChatGPT tasks are useful for reminders or connected workflows, but may not have access to project files and should not claim local PDF work unless the local runner is actually available. If those are not available or you specifically want a machine-local fallback, the CLI still has morning-paper routine install|status|uninstall; use it deliberately, not by default.

Styles

morning-paper styles lists the print family:

Style What it is
broadsheet The newspaper you read
brief A dense operator brief
field-card A boxed reference card
zine A half-letter photocopier handout
morning-paper render draft.md --style broadsheet --palette color

For Agents

Read AGENTS.md first. The short version:

  • agent composes, code renders;
  • use doctor --strict as proof, not vibes;
  • write setup and edition state to files before long work;
  • use edition apply-feedback to record durable reader feedback;
  • never put private newsroom facts in this public repo.

Useful CLI verbs: newsroom, sources, stage, queue, edition, estimate, render, review, local-fallback routine, doctor. sources check auto-detects a scaffolded newsroom when run from its root; use --newsroom <path> when checking from somewhere else.

Docs

Development

git clone https://github.com/dmthepm/morning-paper.git
cd morning-paper
pip install -e ".[dev,pretty]"
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 PYTHONPATH=src python -m pytest tests/
python scripts/setup_scaffold_smoke.py --isolated
python scripts/fresh_friend_smoke.py
python scripts/dogfood_newsroom_smoke.py
python scripts/five_edition_loop_smoke.py
python scripts/source_shape_intake_smoke.py
python scripts/host_plugin_smoke.py
python3 scripts/release_candidate_check.py --outdir /tmp/morning-paper-dist --install-check

License

MIT

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

morning_paper-0.8.6.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

morning_paper-0.8.6-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file morning_paper-0.8.6.tar.gz.

File metadata

  • Download URL: morning_paper-0.8.6.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for morning_paper-0.8.6.tar.gz
Algorithm Hash digest
SHA256 49dc874405820d46530ad4fa593b54cdf1c865a36dca9bc6d531a143a827f616
MD5 5b4af78871eb94cf7693898992435cac
BLAKE2b-256 e65a44f826d6a2f5e6ce5c72c6a202d90a1663630a2328a016ee54cf0ce056a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for morning_paper-0.8.6.tar.gz:

Publisher: publish.yml on dmthepm/morning-paper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file morning_paper-0.8.6-py3-none-any.whl.

File metadata

  • Download URL: morning_paper-0.8.6-py3-none-any.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for morning_paper-0.8.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0699f34cc19adb18bbaebfc88881c842615e3f1f7342e18e3d1afb38d148872d
MD5 86bd486c56946fd380b15e2a0ac87359
BLAKE2b-256 70f6835ee16ef4a7e78f5a308a476d9994a019b2fefb17580541f285bdf2e6f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for morning_paper-0.8.6-py3-none-any.whl:

Publisher: publish.yml on dmthepm/morning-paper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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