cmf

Crates.iocmf
lib.rscmf
version0.1.0
created_at2026-01-18 08:19:06.264783+00
updated_at2026-01-18 08:19:06.264783+00
descriptionConversational Markdown Format - parse and convert LLM conversations
homepage
repositoryhttps://github.com/divanvisagie/conversational-markdown-format
max_upload_size
id2052021
size204,562
Divan Visagie (divanvisagie)

documentation

README

CMF - Conversational Markdown Format

A markdown-based interchange format for LLM conversations. User messages are blockquotes (>), assistant messages are plain markdown.

Installation

cargo install --path .

Usage

# Detect CMF content and count turns
cmf detect conversation.cmf

# Check conformance (silent on success)
cmf check conversation.cmf

# Convert to OpenAI Chat Completions format
cmf to-openai-chat conversation.cmf

# Convert to OpenAI Responses API format
cmf to-openai-responses conversation.cmf

Format

> @alice: Can you explain the steps?
Yes. First you need to set up your environment.

Second, assistant messages can be multi-paragraph.

 > Indent blockquotes to avoid parsing as user lines.

> Thanks!
Glad it helped.

Rules:

  • User lines start with > in column 1
  • Multi-user chats use > @username: prefix
  • Assistant content is everything between user blocks
  • Indent blockquotes ( > text) to escape them in assistant content

Library

use cmf::Document;

let doc = Document::parse(input);
for turn in &doc.turns {
    println!("User: {}", turn.user.content);
    println!("Assistant: {}", turn.assistant);
}

// Convert to OpenAI formats
let chat_messages = doc.to_openai_chat();
let responses_messages = doc.to_openai_responses();

License

BSD-3-Clause

Commit count: 0

cargo fmt