---
title: authoring
description: "The authoring block of the CLI's guide."
---

## 1. The block, verbatim

Every write authors the article in exactly one of two ways, and supplying both or neither is refused. Either you write prose and the template owns the markup (`--claim` is the one load-bearing sentence and becomes the `<mark>` claim span and `files.gist`, and each `--body` is one paragraph after it) or you supply `--article-html` and own the markup yourself. On a `memhtml apply` line the prose form is the `body` field, whose first sentence becomes the claim, and the markup form is `article_html`. When you supply markup you own two constraints. It must contain EXACTLY ONE `<mark>`, and that `<mark>` must sit in the article's first `<p>` or `<li>` and not inside an `<aside>` or `<details>`. The claim leads the article and is never a caveat or behind a fold. And the first `<time datetime>` in your markup becomes the memory's event time, which is what recency ranks on, so a memory about something that happened last year should say so rather than being ranked as today's news. Markup is checked before anything is written: the store renders your article, runs the format check, and refuses with the list of violations before it creates a file, stages it, or commits. A refused write leaves the tree byte-identical, so a failed attempt costs nothing and you can fix the markup and retry. Code goes in the prose path as a fenced block: a body paragraph that is entirely a ` fence becomes <figure><pre><code>, whitespace preserved verbatim, and the fence's info string (`ts) is stamped as data-lang and promoted to a `lang:ts` entity, so `memhtml list --entity lang:ts` finds every memory carrying TypeScript. A blank line inside a fence does NOT split paragraphs. On the markup path write the same \<figure>\<pre>\<code data-lang="ts"> yourself; never `class` (forbidden) and never `lang=` (that attribute names human languages).

## 2. Commands it names

* [`memhtml apply`](/reference/commands/apply/)
* [`memhtml list`](/reference/commands/list/)

## 3. Provenance

A loader generates this page from `apps/cli/src/commands.ts` while the site builds, so no file in the repository holds it: the block is authored beside `COMMANDS` and is served verbatim by `memhtml manifest`, so this page and the live answer are the same bytes. Change the registry and this page changes with it.