Authority: runtime-extension truth lives in this SSOT. Framework and memory-system depth lives at omp.0rk.de/extensions.

1. ⚑ Non-negotiables

runtime: "omp + @oh-my-pi/* only"
human_ui: "one discoverable slash-command root per extension"
llm_tools: "may stay granular when schemas improve model reliability"
aliases: "never register synonym commands; every registration pollutes discovery"
interaction: "overview β†’ focused action β†’ confirm mutation β†’ concise result"
rendering: "event-driven; widgets for passive state, overlays for focused work"
fallback: "every TUI flow has a readable non-interactive result"

OMP exposes no hidden command-alias API: duplicate registrations are visible and can receive :N suffixes. Use subcommands and argument completions inside one root handler instead.

2. 🧩 Progressive disclosure

LayerUser seesRule
L0Command listOne compelling line: capability Β· benefit Β· next step
L1Bare commandStatus + three safe/high-value actions
L2CategoryShort, emoji-labelled actions with practical descriptions
L3DetailContext, preview, flags, and the narrowest useful controls
L4MutationExplicit confirmation; explain effect and recovery path
flowchart LR
  root[PrimaryCommand] --> overview[StatusAndTopActions]
  overview --> category[FocusedCategory]
  category --> detail[ActionPreview]
  detail --> confirm[MutationConfirmation]
  confirm --> result[ResultAndNextStep]

3. πŸŽ›οΈ Surface selection

NeedUseAvoid
Persistent, passive signalctx.ui.setWidget / status segmentPolling dashboards
Focused, keyboard-driven taskctx.ui.custom(..., { overlay: true })New sibling slash commands
Simple choice or confirmationctx.ui.select / ctx.ui.confirmCustom component overhead
Scriptable fast path<root> <subcommand> [flags] + completionsUndocumented magic syntax
Model operationregisterTool with narrow schemaHuman-only slash-command fan-out

Widgets must be event-driven, change-gated, ASCII-safe where applicable, and hide unavailable data rather than emitting noise or errors.

4. 🏷️ Command ownership

ExtensionSole human rootNotes
OmpKeep/okMemory hub; no separately registered /ompkeep alias
ompbar/statusbarPassive-HUD configuration exception
mythomp/mythicCodes and mode management
omptask/tmHuman backlog control; model tool is backlog
omparc/arcRead-only learning arc
ompfusenoneTelemetry is event-only

Before adding a command, update this table and verify it does not collide with OMP built-ins or another extension.

5. πŸ›‘οΈ Safety and feedback

  • Preview and confirm writes, curation, deprecation, reindexing, and irreversible actions.
  • Keep L1 identity memory human-ratified; route L2 changes through OmpKeep candidates and patches.
  • Do not show private memory text in aggregate dashboards by default.
  • After every action, show outcome, scope, and one relevant next step.

6. πŸ“š Documentation contract

Every extension blueprint must contain:

  1. status: shipped, planned, or superseded.
  2. Primary command, UI surface, model-tool boundary, and state paths.
  3. A short smoke test and explicit done criteria.
  4. A link to this contract plus the relevant OMP framework/memory depth.

Within one garden use wikilinks. Across gardens use absolute https://ssot.0rk.de/... or https://omp.0rk.de/... URLs. Superseded pages keep a brief banner and canonical link; they do not maintain competing instructions.

7. βœ… Author checklist

  • One visible human command root only
  • Bare command is useful without arguments
  • Completions explain subcommands
  • TUI and non-TUI paths both work
  • Writes have confirmation and recovery guidance
  • Widget work is event-driven and bounded
  • Blueprint, status, smoke test, and command registry are updated