## The workflow it closes

Without this CLI, the workflow from "produce content" to "have content in canvas" requires three manual steps from the user: open canvas, drop files, ingest each one. With this CLI, Claude Code closes the loop programmatically: the user receives one HTML file, opens it, the canvas boots with all content already in the Tree.

## The three commands

### memeroot validate

Check region files for well-formedness, stable IDs, and Memeroot conventions before signing.

    $ memeroot validate control.xml tod.xml toe.xml
    ✓ control.xml  <control id="REV-001"> · 1842b
    ✓ tod.xml      <test-of-design id="TOD-REV-001-2026Q1"> · 2410b
    ✓ toe.xml      <test-of-operating-effectiveness id="TOE-REV-001-2026Q1"> · 3104b

    3 ok · 0 failed · 0 warnings

Checks: well-formed XML · root element with id matching `[A-Za-z][A-Za-z0-9_-]{1,127}` · root is a known Memeroot region kind · no fake `<signature>` elements · no absolute file paths · no unfilled `[NEEDS INPUT:…]` placeholders. Exit code 0 = pass, 1 = at least one failure.

### memeroot bundle

Combine multiple region files into a single `<workspace>` XML.

    $ memeroot bundle control.xml tod.xml toe.xml -o packet.xml --title "REV-001 audit"
    ✓ wrote packet.xml (8412b · 3 regions · id WS-2026-05-23-mphr...)

Each input is validated first; bundle aborts on any failure. The workspace wrapper carries metadata (generation timestamp, source filenames, region count). Inputs that are already workspace bundles can be nested.

### memeroot package

Produce a single-file HTML containing the Memeroot canvas with regions pre-loaded.

    $ memeroot package control.xml tod.xml toe.xml -o audit-packet.html --title "REV-001 Q1 audit"
    ✓ wrote audit-packet.html (149312b · canvas + 3 region file(s) + bootstrap)
      open in a browser; canvas boots with content pre-loaded

Wraps the bundled workspace with the canvas HTML template, plus a small bootstrap script that auto-injects content into the canvas's ingest endpoint on page load. The recipient opens `audit-packet.html`, sees the canvas boot, sees a confirmation banner ("✓ packet loaded · N bytes"), and finds the regions already in the Tree tab ready for signing.

## Install

    $ unzip memeroot-cli.zip
    $ cd memeroot-cli/
    $ npm install -g .
    # Or use directly: node bin/memeroot ...

    $ memeroot help
    memeroot — Memeroot canvas ↔ Claude Code bridge CLI
    Commands:
      memeroot validate <file>...           — check files for well-formedness, ids, conventions
      memeroot bundle <file>... -o out.xml  — combine region files into one workspace.xml
      memeroot package <file>... -o out.html — produce single-file canvas with regions pre-loaded

Requires Node.js 18+. No runtime dependencies; the CLI is pure Node.js using only built-in modules. The canvas template bundled with the package is the same single-file `MR-CANVAS-v0.8.html` the Memeroot ecosystem uses.

## Composition with the memeroot-bridge skill

The CLI is designed to be invoked by Claude Code itself, via the bash tool, when the `memeroot-bridge` skill is active. Typical session:

    User: "Document the REV-001 control for SOX Q1; output as Memeroot packet."

    Claude Code:
      [ regulated-document-author + memeroot-bridge skills activate ]

      # Produces three structured region files
      $ cat > control.xml << 'XML'
        <control id="REV-001">...</control>
        XML
      $ cat > tod.xml << 'XML'
        <test-of-design id="TOD-REV-001-2026Q1">...</test-of-design>
        XML
      $ cat > toe.xml << 'XML'
        <test-of-operating-effectiveness id="TOE-REV-001-2026Q1">...
        XML

      # Self-validates before packaging
      $ memeroot validate *.xml
      ✓ 3 ok · 0 failed · 0 warnings

      # Packages as single HTML deliverable
      $ memeroot package *.xml -o audit-packet.html --title "REV-001 Q1 audit"
      ✓ wrote audit-packet.html

      → User receives audit-packet.html
      → Opens it in browser
      → Canvas boots, three regions in the Tree, banner: "✓ packet loaded"
      → User signs in Sign tab as the appropriate identity
      → Bundles for distribution to external auditor

The natural-language → multi-signed audit packet pipeline is now fully automated end-to-end with these four pieces working together: Claude Code, regulated-document-author skill, memeroot-bridge skill, memeroot-cli.