> ## Documentation Index
> Fetch the complete documentation index at: https://docs.marioded.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Commands and permissions

> Find the command you need and the permission that controls it.

# Commands and permissions

Choose the tab for the plugin installed on your server. Unless noted otherwise, run these commands in-game as a player.

**How to read the syntax:** `<argument>` is required, `[argument]` is optional. Replace placeholders with real values, and keep quotes around multiword names or descriptions.

**Replay IDs:** commands use full UUIDs, for example `550e8400-e29b-41d4-a716-446655440000`. You normally do not need to type them: open the catalog or use **Watch** / **Prepare command** in the player list and save replies. The UUID is in the details menu and hover text; names are labels, not unique lookup keys. There are no short IDs or prefix searches. Access checks still apply.

**Session IDs identify different objects:** recorder `stop`, `status`, and duration-form `clip` accept an optional live-session UUID. Omit it to select your command-started recording, even after changing worlds. Start/status replies show a readable name, with UUID hover text and clickable session actions. A normal stop reuses the recording identity for the saved replay; every clip gets a new UUID. Playback sessions are separate identities. Do not use a clip UUID to control its source recording.

**Clickable feedback:** Watch executes the full-UUID command; Prepare command inserts it into chat for editing or use on the replay server. These use 1.8.8-compatible `run_command`/`suggest_command`, not clipboard actions. Recorder Watch is shown only when a local player/lobby command is available; a recorder-only server still offers Prepare command.

Static commands and tooltips use standard MiniMessage click and hover tags. Dynamic list actions use `<watch_action>...</watch_action>` and `<prepare_action>...</prepare_action>`, with `<replay_info>...</replay_info>` for UUID hover text. Navigation uses `<previous_page>`/`<next_page>` and is shown only when the target page exists. Recorder session actions use `<session_info>`, `<session_status>` and `<session_stop>`. Save replies append `saved-actions` or recorder-only `saved-prepare`; empty rows hide the buttons. Keep names literal, and do not put `<id>` or `<session>` inside quoted click arguments: the dynamic tags already carry the actual UUID.

> [tab] Recorder
>
> ## Recorder
>
> All recorder commands require **`reverse.admin`**.
>
> `/reverserecorder` and `/reverserecorder help` show the full command guide, including flags and clip forms. Console is supported for help and reload.
>
> | Command | What it does |
> | - | - |
> | `/reverserecorder start --name "Match"` | Starts recording the sender's current world. Provide the name flag explicitly. |
> | `/reverserecorder start --name "Match" --description "Final round"` | Supplies catalog text. |
> | `/reverserecorder start --name "Match" --template arena` | Uses existing template terrain instead of capturing runtime terrain. |
> | `/reverserecorder start --name "Match" --owner <name-or-uuid>` | Adds an owner; sender is always an owner. |
> | `/reverserecorder clip <seconds> [session-id] [--name name...] [--description text...]` | Saves the last N seconds of a live session as a standalone replay; the source recording keeps running. Omitted text flags are copied from the source session. |
> | `/reverserecorder clip [--from seconds] [--to seconds] [--name name...] [--description text...]` | Saves an explicit interval of a live session instead, in seconds from the start of the recording. At least one bound is required: `--to` alone is the first N seconds, `--from` alone runs to now. The interval form acts on the sender's own session; the API can target any session. The duration and interval forms are mutually exclusive. |
> | `/reverserecorder stop [session-id]` | Ends capture and asynchronously saves the full replay. |
> | `/reverserecorder status [session-id]` | Checks an active session. |
> | `/reverserecorder reload` | Reloads supported settings and messages; console supported. |
>
> Quote complete multiword flag values, for example `--name "Final round" --description "Best of three"`. Add multiple owners after one flag: `--owner Alex Steve`; player UUIDs are accepted too. The name flag is required when starting a recording. The documented quoted-text and owner-list forms are verified against the command parser.
>
> Without a session ID, `stop`, `status`, and `clip` select the session this player started through the command, even if they changed worlds. The command prevents one player from starting a second command-tracked session before stopping the first. The API supports independent simultaneous sessions, including sessions in the same world.
>
> Clip duration and interval bounds are whole seconds in commands. Duration must be positive; bounds must be nonnegative and `--to` cannot precede `--from`. Interval endpoints are inclusive and clamp to the current recording tick. Stopping always saves the full recording; there is no rolling-buffer mode or configurable history window.
>
> To select a template, use the **`--template`** flag.

> [tab] Player
>
> ## Player
>
> All player commands require **`reverse.player.use`**. Catalog access additionally uses the replay's owners and the server's admin/open-access policy.
>
> | Command | What it does |
> | - | - |
> | `/reverseplayer` | Opens the standalone catalog; player-only. |
> | `/reverseplayer help` | Shows the compact command guide, with syntax and examples on hover; console supported. |
> | `/reverseplayer gui` | Opens the standalone catalog if accessible replays exist; otherwise sends the no-replays message. |
> | `/reverseplayer play <replay-id>` | Authorizes, loads, and starts a replay by full UUID. |
> | `/reverseplayer list [page]` | Shows ten accessible recordings with names, UTC dates, durations, Watch/Prepare actions and Previous/Next links. Pages 1..1001. |
> | `/reverseplayer pause` | Pauses the sender's session. |
> | `/reverseplayer resume` | Resumes the shared session; after the end, restarts it from tick 0 for all viewers. |
> | `/reverseplayer seek <tick>` | Seeks to a nonnegative absolute tick and resumes. |
> | `/reverseplayer forward [seconds] [extra-ticks]` | Seeks forward, then resumes; defaults to 1 second and 0 extra ticks. |
> | `/reverseplayer backwards [seconds] [extra-ticks]` | Seeks backward, then resumes; same defaults. |
> | `/reverseplayer stop` | Stops watching for the sender only, restores their state, and attempts a return to their origin lobby if applicable. Other viewers remain. |
> | `/reverseplayer rename <replay-id> [text]` | Replaces the name; omitted text clears it. |
> | `/reverseplayer describe <replay-id> [text]` | Replaces the description; omitted text clears it. |
> | `/reverseplayer resend` | Resends stored chunks for the current session; useful for diagnosing missing terrain. |
> | `/reverseplayer reload` | Reloads supported configuration; console supported. |
>
> Seconds are rounded to the nearest tick before adding `extra-ticks`; negative values and nonfinite/out-of-range numbers are rejected. For example, `forward 0.5 2` requests 12 ticks. There is no current `/reverseplayer speed` or `/reverseplayer fixture` command; speed is exposed through the hotbar and API.
>
> At the timeline end, playback pauses on the final scene; it does not automatically return viewers to the lobby. Pause, resume, seek and speed affect every viewer in the shared session. Each viewer chooses when to leave with `/reverseplayer stop` or the Stop watching item; the session is cleaned up when its last viewer leaves.
>
> `/reverseplayer reload` also uses `reverse.player.use`. Keep this in mind when granting that permission.

> [tab] Lobby
>
> ## Lobby
>
> | Command | What it does | Permission |
> | - | - | - |
> | `/reverse`, `/reverses`, `/reverselobby`, `/reverselobby help` | Shows the complete command guide; console supported | No explicit command permission declared |
> | `/reverselobby gui` | Opens the catalog if accessible replays exist | Catalog policy controls access |
> | `/reverseview [replay-id]` | Opens catalog without an ID, otherwise dispatches to a replayer | Catalog policy controls access |
> | `/reverselobby rename <replay-id> [text]` | Edits name; omitted text clears it | Rename permission and owner/admin catalog policy |
> | `/reverselobby describe <replay-id> [text]` | Edits description; omitted text clears it | Description permission and owner/admin catalog policy |
> | `/reverselobby reload` | Reloads supported lobby configuration; console supported | `reverse.command.admin.reload` |
>
> `rename` and `describe` are subcommands of the three root aliases. Omitting the text clears the selected field, subject to the same permission checks.

## Catalog access is separate from command access

Permissions and ownership are two different things. You can have one without the other.

| Policy | Meaning |
| - | - |
| Replay owner UUID | Can access and manage that recording through the catalog. |
| `reverse.admin` | Player/lobby catalog administrator, and recorder command access. |
| `reverse.lobby.admin` | Additional lobby catalog administrator permission. |
| `open-access: true` | Treats every viewer as a catalog administrator on that server. |

In short: giving someone `reverse.player.use` does not make them an owner, and being an owner does not grant permission to use player commands.

For player and lobby metadata commands, non-admin owners also need `reverse.replay.rename` or `reverse.replay.describe` for the corresponding operation. To limit a grant to one replay, use `reverse.replay.rename.<uuid>` or `reverse.replay.describe.<uuid>` with its full lowercase UUID. The global operation nodes default to false. These permissions do not grant ownership or read/delete access; existing administrators and `open-access` actors bypass the operation gate.

> [!WARNING]
>
> **Open access also grants management access.** `open-access: true` treats every viewer as a catalog administrator, not just someone allowed to watch.

Keep names within 128 characters and descriptions within 2048. Some symbols can count as more than one character. Use plain text without `&` formatting or hidden/control characters; descriptions may contain line breaks. Style the menu around that text using the [display settings](https://docs.marioded.com/owners/display.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.