generate-cli-docs · git:20261003.2182c0d · 2026-10-03 · sha256 8403a001055517fc
generate-cli-docs git:20261003.2182c0dA
Immutable. This exact content never changes and is served at /api/v1/blob/8403a001055517fc.
---
name: generate-cli-docs
description: Regenerate the HTML docs site (CLI Reference, Configuration, content sections) from decorators, the pydantic config schema, and markdown source files
user_invocable: true
---
Regenerate the docs site from three sources:
- **CLI Reference** — generated from `@doc_ref` decorators on Typer commands
- **Configuration** — generated from `Field(..., description=...)` on the pydantic config schema in `mycelium-cli/src/mycelium/config.py`
- **Content sections** — generated from markdown files in `mycelium-cli/src/mycelium/docs/`
Steps:
1. Run: `cd mycelium-cli && uv run python ../docs/generate_docs.py`
2. Report what was generated
## Adding a new CLI command
If a CLI command was added or modified and doesn't have a `@doc_ref` decorator, add one:
```python
from mycelium.doc_ref import doc_ref
@doc_ref(
usage="mycelium <group> <command> <args>",
desc="One-line description. May contain <code>html</code>.",
group="room", # setup, room, memory, message, config, or "other"
)
@app.command()
def my_command(...): ...
```
Groups: setup, room, memory, message, config, other
## Adding a new config knob
Each pydantic field on a sub-model of `MyceliumConfig` becomes a row in the Configuration section of the docs. The only requirement is a non-empty `description=`:
```python
class NegotiationConfig(BaseModel):
"""Tunables for the CFN-mediated negotiation flow."""
n_steps: int = Field(
default=20,
description=(
"Maximum SAO rounds per session. Set to 0 to fall through to "
"CFN's auto-computed budget."
),
)
```
Whatever shows up in `description=` is what users will read. Spell it out — assume the reader doesn't know what SAO or CFN is. To add a brand new namespace:
1. Add a `<NewName>Config(BaseModel)` class with `Field(..., description=...)` on every field.
2. Wire it onto `MyceliumConfig` (e.g. `new_name: NewNameConfig = Field(default_factory=NewNameConfig)`).
3. Optionally add the namespace to `CONFIG_NAMESPACE_ORDER` in `docs/generate_docs.py` to control its position; otherwise it appends after the listed namespaces.
4. Re-run the generator.
## Markdown source
Markdown files in `mycelium-cli/src/mycelium/docs/` (`concepts/`, `guides/`, `reference/`) are converted to HTML and embedded in the right `<section>` of the page `SECTION_CONFIG` assigns them to. Sections in the existing HTML marked with `<!-- keep -->` are preserved verbatim (used for hand-crafted interactive components).
Then re-run the generator.