Skip to main content

CriticMarkup-aware markdown viewer for the terminal

Project description


     ██████  ██ ████████ ████████ ██    ██ ▄█████ ████████ ██████
     ██   ██ ██ ██       ██       ██    ██ ▀▀▀▄▄▄ ██       ██   ██
     ██   ██ ██ ██████   ██████   ██    ██ █████▀ ██████   ██████
     ██   ██ ██ ██       ██       ██    ██       █ ██       ██  ██
     ██████  ██ ██       ██        ██████  ██████▀ ████████ ██   ██

CriticMarkup-aware markdown viewer for the terminal.

Getting Started

Installation

pip install diffuser-cli

Or with uv:

uv tool install diffuser-cli

Quick Example

Given a markdown file with CriticMarkup annotations:

The system processed the data and {~~returned results to~>delivered results
back to~~} the user.{>>"Delivered back" is more active and specific.<<}

Render it in the terminal with color-coded annotations:

diffuser view my-document.md

Background & Rationale

When AI agents suggest changes to writing, they typically rewrite the whole file. The original is gone. If you disagree with one sentence, tough luck -- you're diffing walls of prose in a terminal.

CriticMarkup solves this. It's a plain-text syntax for editorial annotations that sits inside the document without destroying what was already there. {++add this++}, {--remove this--}, {~~old~>new~~} -- five simple marks that let an agent suggest changes while preserving every word of the original.

What was missing was a way to view these annotations clearly from the command line. Rich terminal rendering, color-coded by change type, without leaving the shell. That's what diffuser does.

How It Works

diffuser preprocesses CriticMarkup syntax into Rich markup, then delegates all markdown rendering to the rich library. No custom HTML parser, no browser -- just your terminal.

CriticMarkup Syntax

Syntax Meaning
{++text++} Insertion
{--text--} Deletion
{~~old~>new~~} Substitution
{==text==} Highlight
{>>text<<} Comment

Full specification: http://criticmarkup.com/spec.php

Agent Skill

diffuser ships with a skill that teaches AI agents how to use CriticMarkup when editing your writing. Install it with the skills CLI:

npx skills add shakedlokits/diffuser

Or view the skill content directly:

diffuser skill

The skill instructs the agent to annotate files in-place using CriticMarkup syntax, never deleting or replacing original text directly.

Development

Setup

git clone https://github.com/shakedlokits/diffuser.git
cd diffuser
uv sync

Running

uv run diffuser view my-document.md

Running Tests

uv run pytest

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

diffuser_cli-0.1.0.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

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

diffuser_cli-0.1.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file diffuser_cli-0.1.0.tar.gz.

File metadata

  • Download URL: diffuser_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for diffuser_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 508e51e8fb8f20f57f94066b83edf53a176c84acbc4be773714a9de8e17c3c58
MD5 f6054721a7b17b6f470c82ddcfbd0b11
BLAKE2b-256 e75d1da5cb563296e2c02c4e983a7a0e772a4a968aaec0b19a28c1e82fd0ff75

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffuser_cli-0.1.0.tar.gz:

Publisher: release.yml on shakedlokits/diffuser

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

File details

Details for the file diffuser_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: diffuser_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for diffuser_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20c337ea3c2adc9f73f82cdd57b578448508dce7a36108c01f40bb5cdc3b7465
MD5 a8fa457cf0d4aed7a34ece2d5855642d
BLAKE2b-256 3faff53ab590ac3dae413c6c7bbfc6e10498bb6d0902b877d5bfe23d3a5ae31a

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffuser_cli-0.1.0-py3-none-any.whl:

Publisher: release.yml on shakedlokits/diffuser

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