Writing docs majo
Documentation writing standards for Mark's projects. Use when writing READMEs, changelogs, API docs, or user-facing documentation. Covers writing style, formatting, structure, and tone.From its SKILL.md
npx -y skills add markjoshwel/skills --skill writing-docs-majoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Unlicense OR 0BSD. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.5 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it
documentation writing standards
Standards for writing user-facing documentation, derived from analysis of 50+ documentation files across Mark's projects.
goal
Produce documentation that is clear, consistent with Mark's personal style, and readable as plaintext in a code editor—not just in preview mode.
when to use this skill
- Writing or editing README files
- Creating changelogs or release notes
- Drafting API documentation
- Writing installation or usage instructions
- Formatting user-facing documentation
do NOT use
- Code comments (use
mdf-majoorpython-majo) - Git commit messages (use
git-majo) - Internal technical notes or TODOs
- Generated API docs
testing checklist
- 100 character line length limit (except code/URLs)
- British spelling used throughout
- First person with lowercase "i"
- Sentence case headings
- Proper code block language tags
- Voice and tone matches examples
- Structure follows document type patterns
- Multiline lists use two-space linebreak format (NOT em-dash
—inline)- WRONG:
- **item** — description - CORRECT:
- **item** \n description
- WRONG:
voice and tone
identity
- first person, lowercase "i": always "i" not "I" in prose
- casual but technical: friendly without sacrificing precision
- honest about limitations: openly state when things are incomplete or not battle-tested
- personal motivation: explain why something was built, not just what
signature phrases
| phrase | usage |
|---|---|
| "et voilà!" | completion/success marker after setup steps |
| "go ham" | permission to use freely (licence sections) |
| emoticons | (●'◡'●), :D, (❁´◡❁), :)` |
| "lol" | used naturally in technical contexts |
| self-deprecating qualifiers | "an okay interpreter", "(unserious)", "you probably shouldn't" |
example voice
# tomlantic
> [!WARNING]
> tomlantic is at 0.2.1 and currently, only i use it myself. it isn't battle tested,
> so issues may arise.
> if you're willing to run into potential bugs and issues, feel free to use it!
marrying [pydantic](https://github.com/pydantic/pydantic) models and
[tomlkit](https://github.com/sdispater/tomlkit) documents for data validated,
style-preserving toml files
uses generics to automagically preserve model types, so you don't lose out on model
type information :D
formatting constraints
line length
- 100 character limit for prose
- Code blocks and URLs may exceed
- Must be readable as plaintext in a code editor
spelling
- British spelling: licence, colour, behaviour, recognised, optimisations
- Exception: PyPI READMEs may use "License" for compatibility
headings
- sentence case (not Title Case):
## usage,### installation - No punctuation at end
title formats
# surplus ← single lowercase word
# surplus on wheels ← lowercase with spaces
# surplus on wheels: WhatsApp Bridge ← colon hierarchy for subprojects
# zigby: an okay brainfuck interpreter ← name + tagline in title
lists
-for unordered lists1.for ordered lists- 4 spaces for nested items
multiline list items — use two-space linebreak for descriptions:
- **feature name**
description goes here
- `--flag-name`
what this flag does
common mistake — do NOT use em-dash for inline descriptions:
<!-- WRONG -->
- **feature name** — description here
<!-- CORRECT -->
- **feature name**
description here
links
- Use descriptive link text, not raw URLs
- External: full URLs to GitHub repos, documentation
- Internal:
[usage](#usage)
code blocks
| tag | use for |
|---|---|
text | shell commands to copy (NOT bash) |
shell | shell scripts with shebangs |
python | python code |
| (none) | URLs and plain output |
MkDocs features:
``` title="path/to/file.py"
code here
--8<-- "path/to/include"
---
## structural patterns
### table of contents
Include for READMEs over ~50 lines. Use nested bullets for hierarchy:
```markdown
- [section](#section)
- [subsection](#subsection)
- [what are the features?](#what-are-the-features)
section order
- title —
# project-name - warning/note blocks — beta status, important caveats
- description — one line, then optional longer description
- table of contents — for longer docs
- usage — installation, quickstart, examples
- api reference — for libraries/modules
- licence — full text or reference
deprecation/archive notices
Use table-style for visual emphasis:
| This project has been archived. |
| ---- |
stub READMEs (monorepo subprojects)
Minimal pattern pointing to main docs:
# project name
brief one-liner
see <https://project.example.com>
or [docs/index.md](../../docs/index.md)
for more information
question-based sections
Playful alternative to standard headings:
## what are the features?
## cool, how do i use it?
## could it be better?
## frequently questioned answers
admonitions (callouts)
plaintext (default, works everywhere):
> **note**
> content here (two spaces after "note" line)
> **warning**
> content here
GitHub-style (for GitHub):
> [!WARNING]
> This is a breaking change!
> [!NOTE]
> Additional information here.
MkDocs-style (for MkDocs/Material):
!!! warning
This is a breaking change!
!!! note "Title"
Additional information here.
common patterns
definition lists
Use two-space linebreak for options/variables:
- `VARIABLE_NAME`
description of what it does
```text
example value
setting it to n will also be treated as empty.
### CLI documentation
1. Embed full `--help` output in code block
2. Group options by category
3. Separate sections for: querying, defaults, formatting, examples
### environment variable documentation
Numbered list with consistent structure:
```markdown
1. `SPOW_TARGETS`
a single line of comma-delimited chat IDs...
```text
wa:[email protected],tg:-0000000000000,...
-
SPOW_CRON(optional)
set as non-empty to declare...setting it to
nwill also be treated as empty.
### API reference
For detailed API reference documentation following MDF structure, see `mdf-md-api-docs-majo`.
Brief overview:
- Headers: `### def|class module.Name()`
- Use backticks around all Python code
- Two-space linebreak before descriptions
- Sections: signature → arguments/attributes → methods → returns → raises → usage
### installation section
Show multiple methods:
```markdown
## installation
install from PyPI:
```text
pip install project
install from source:
pip install git+https://github.com/user/project.git
nix users, rejoice: nix run github:user/project
For single-file modules, mention direct inclusion as public domain.
---
## licence documentation
### standard pattern
```markdown
## licence
project is free and unencumbered software released into the public domain.
for more information, please refer to [UNLICENCE](/UNLICENCE), <https://unlicense.org>,
or the python module docstring.
casual version
project is permissively "i do not care" licenced with the zero-clause bsd licence, go ham
dependency licences
Nested list with em-dash separator:
- [**dependency**](url) —
brief description
MIT Licence
- [**transitive-dep**](url) —
what it does
Apache 2.0
dual licensing
- source code:
The Unlicence (full text or reference)
- artwork:
CC BY 4.0 with usage notes
changelog format
entry structure
## project vX.Y.Z
(released on the 14th of October 2023)
!!! warning
breaking changes here
brief summary of release
### what's new
- added feature X
### what's changed
- deprecated Y
### what's fixed
- bug in Z
### thanks!
- [contributor](url) for their first contribution!
full changelog: <https://github.com/user/repo/compare/vOLD...vNEW>
---
guidelines
- Use ordinal dates: "1st of July 2024", "14th of October 2023"
- Use
!!! informationfor tentative/beta releases - Use
!!! warningfor breaking changes - Include GitHub compare links
- Thank contributors with profile links
- Use
---separators between versions
version header formats
- Semantic:
## 2.7.0(no "v" prefix) - With prefix:
## surplus v2.2.0 - Calendar-based:
## v2024.0.0,## v2.2024.25
special elements
personal rationale sections
Explain personal use case with narrative:
## rationale
i have a Mac mini that i use for... (explains personal setup)
there is a good chance that... (explains logical chain)
so this tool... (ties back to purpose)
strikethrough for playful emphasis
Not corrections, but emphasis:
~~a good~~ an okay-ish format
~~yell~~ gently remind
backslash line continuation
- feature description \
(note: this is optional but helpful)
nix user callout
Bold callout with alternatives:
**nix users, rejoice:** `nix run github:user/project` or
`git+https://forge.joshwel.co/mark/project.git`
platform-specific conventions
GitHub
- Alerts:
> [!NOTE],> [!WARNING],> [!IMPORTANT],> [!TIP] - Issue references:
[#34](url),(python/cpython#88089) - Video embeds: direct GitHub asset URLs
MkDocs
- Admonitions:
!!! warning,!!! note "Title" - File inclusion:
--8<-- "path/to/file" - Code block titles: ``` title="path/to/file.py"
PyPI READMEs
- Use absolute GitHub URLs (not relative)
- May use American "License" spelling
- Condensed compared to main README
- Point back to main repo for full docs
integration
This skill extends dev-standards-majo. Works alongside:
mdf-majo— Meadow Docstring Format specificationmdf-md-api-docs-majo— MDF-style API reference documentation in markdownpython-majo— Python code standardsshell-majo— Shell script documentationgit-majo— Commit messages that reference docs
What ships with it: 1 file
11.3 KB alongside SKILL.md
references/
- REFERENCE.md11.3 KB