← Registry

Concepts

Architecture Decisions

← Registry

CUSTOMIZE.md

Every EPS must include a CUSTOMIZE.md at its repository root. It is the single required artifact of the EPS contract.

What it is

CUSTOMIZE.md is a flat Markdown file that documents every port in the EPS — the named extension points where users make the harness their own. It's written for the person who just cloned the repo and wants to know: what do I actually change?

It must be:

  • Complete — every port is listed
  • Flat — one file, readable in one fetch (for both humans and LLMs)
  • Actionable — tells the user how to customize, not just what can be customized

Required structure

# <package-name> — Customization Guide

Brief description of what the harness does and who it's for.

## Ports

### `PORT_NAME`

**What it does:** Description.
**How to customize:** Instructions.

### `ANOTHER_PORT`

...

## Getting Started

How to clone, configure, and run.

epm init scaffolds this structure. The registry enforces that the file exists at publish time.

CUSTOMIZE.md vs developer docs

CUSTOMIZE.md is for users — people installing and personalizing the EPS.

If your EPS has an extension API, plugin system, or internal architecture worth documenting for developers who want to build on it, that belongs in an mdBook (see ADR-0012). CUSTOMIZE.md can be included as a chapter in the book, but must also remain as a standalone file at the root.

LLM-friendliness

One flat file, one fetch. An LLM answering "how do I change the transcription model in tech_talker?" can fetch CUSTOMIZE.md directly and get the answer without navigating a doc site. This is a design constraint, not a coincidence.