OMP Bar v9 is OMP’s configurable telemetry HUD: one compact view of the active model, work, context, quota, agents, repository, tools, and speed. This page is the single source of truth for its interface, behavior, configuration, and operating boundaries.

Representative Unicode bar
 
◕model☮  ☑☑▣ ☐☐ ⁵  ✎¹◎²◆³  ∞⁶  ▤       ▰▰▰▰▱▱▱▱  ⁵↓↑²⁹  ●●●●●●○○  ⑂main↑²↓¹  ⌘³  ⧖⁸⁴
└──────────── identity + work ───────────┘       └──────── capacity + system state ────────────────┘
NeedFastest pathResult
See and edit everything/barOpens the visual editor
Inspect the active shape/bar configPrints visibility and survival order
Make a common change/bar make context longerCompiles locally into validated operations
Make a precise batch changebar_configureInspects, previews, or atomically applies operations

The 15-second mental model

A segment must be enabled and have runtime data to render. side chooses its split group. order chooses its position and narrow-screen survival priority. Segment settings choose what that item says and how it looks.

Install

Load the OMP Bar extension directory through OMP’s extensions setting, then reload plugins and open the editor:

{
  "extensions": ["/absolute/path/to/omp-bar"]
}
/reload-plugins
/bar

Host-specific home-directory paths are intentionally omitted from this published reference.

Visual editor

/bar opens a path-preserving editor. The root owns visibility, side, and order. Config owns global presentation. Entering a segment exposes only settings that affect that segment.

Bar                                              representative editor replica
 
    On   Item             Preview
  ▶ ●    ⚙ Config          widget · above · unicode
    ●←   ◕ Model           ◕model☮
    ●←   ☑ Todos           ☑☑▣ ☐☐ ⁵
    ●←   ◎ Agents          ✎¹◎²◆³
    ●·   ▰ Context         ▰▰▰▱▱▱
    ●→   ⇅ Tokens          ⁵↓↑²⁹
    ●→   ⑂ Git             ⑂main↑²↓¹
 
  Space/x show · S side · ← → or [ ] order · Enter edit · Esc/q save
KeyRootChild layer
/ Move selectionMove selection
Space or xShow or hide segmentToggle or cycle selected value
SCycle left → center → right in split mode
/ or [ / ]Reorder
EnterOpen Config or segment settingsEdit, select, or apply
Esc or qSave and closeReturn to root
Ctrl+CCancel without savingCancel without saving

Short terminals scroll the editor. Configured items remain available even when they are outside the visible viewport.

How layout works

flowchart TD
  A[Runtime events] --> B[Runtime snapshot]
  C[Enabled segments] --> D[Build segment views]
  B --> D
  D --> E[Use compact form when needed]
  E --> F[Keep earlier priority]
  F --> G[Group by left · center · right]
  G --> H[Render widget or status surface]

The five controls

ControlQuestion it answersExample
EnabledMay this segment render?Show git, hide clock
Runtime dataIs there anything meaningful to show now?No quota data means no quota view
SideWhich split group owns it?Put context in the center
OrderWhere does it sit, and how long does it survive?Keep model before activity
PresentationWhat value, width, glyphs, and detail should it use?Context breakdown, 12 cells

Earlier order means higher priority: the renderer first asks a segment for its compact representation, then removes lower-priority tail items until the line fits.

Alignment and surfaces

SettingValuesBehavior
Alignmentleft, center, right, splitPositions one stream or three side groups
Sideleft, center, rightUsed by split alignment
Surfacewidget, statusWidget uses the terminal’s measured width; status uses a 120-cell plain-text budget
PlacementaboveEditor, belowEditorApplies to the widget surface
Spacing03Cells between rendered segments

The status surface is always left-aligned. Placement and split alignment affect the widget surface.

Unicode and ASCII

Unicode: ◕model☮  ☑☑▣ ☐☐ ⁵  ▰▰▰▱▱▱  ⁵↓↑²⁹  ⑂main↑²↓¹
ASCII:   3model free  [x][x][>] [ ][ ] 5  ###---  5v^29  br:main^2v1

Use unicode for density and visual hierarchy. Use ascii for strict 7-bit terminals or as the safest response to glyph-width artifacts.

Segment atlas

A segment can be enabled yet absent when its runtime value is empty. The samples below are editor previews, not promises that every item renders in every session.

SegmentSampleWhat it answersControls
model◕model☮Which model, thinking level, and free-route marker?Alias, max width, thinking marker, free marker
todos☑☑▣ ☐☐ ⁵What is done, active, and remaining?Phases/ratio, divider, glyph cap, total
context▰▰▰▱▱▱How much context is used or free?Style, width, aggregate/breakdown, used/free, percent
tokens⁵↓↑²⁹How many input and output tokens?Arrows/exchange separator, optional k marker
agents✎¹◎²◆³Which subagent roles are active and how many?Always show count
loop∞⁶What loop state or remaining iteration count?Visibility and placement
modesWhich OMP modes are active?Visibility and placement
quota●●●○○Which provider window is limiting capacity?Data, window, style, width, percent, reset, TTL
git⑂main↑²↓¹Which branch, sync state, and worktree state?Branch, ahead/behind, working tree, width, refresh
tools⌘³How many tool calls are active?Visibility and placement
tps⧖⁸⁴What token-generation speed is observed?Live, last, or off
activityWhat recent activity state is visible?Visibility and placement
clock14:05What is the local time?Visibility and placement
brandπShould the OMP identity mark render?Visibility and placement

Context, quota, and bar styles

Context and quota own independent width and style settings.

sparks     ✦✦✦✧✧     diamonds   ◆◆◆◇◇     dots       ●●●○○
stars      ★★★☆☆     blocks     ▰▰▰▱▱     squares    ■■■□□
line       ━━━┄┄     arrow      ━━━┈┈     ascii      ###--
SettingContextQuota
Width232232
Value/windowused or freetightest, shortest, or longest
Detailaggregate or breakdownOptional percent and reset time
Data policyCurrent context snapshotQuota data on/off, cache TTL 1120 minutes

Token display

Tokens (k) off   ¹²↓↑⁶⁷⁸⁹
Tokens (k) on    ¹²ᵏ↓↑⁶⁷⁸⁹

The optional superscript k is a compact unit marker. It does not rescale the numeric runs.

Default configuration

Areav9 default
Barenabled; widget; aboveEditor; Unicode; redraw throttle 100 ms
Layoutsplit; spacing 1
Leftmodel, todos, agents, loop, modes
Rightcontext, tokens, quota, git, tools, tps, activity, clock, brand
Visiblemodel, agents, loop, modes, context, quota, todos, tokens, tps, git, tools
Hiddenbrand, activity, clock
Prioritymodel → todos → context → tokens → agents → loop → modes → quota → git → tools → tps → activity → clock → brand
Contextblocks, width 8, used, breakdown, percent off
Quotadots, width 8, tightest, percent/reset off, TTL 5 min
Todosphases, compact divider, max 18 glyphs, total on
Tokensarrows, k marker off
TPSlast observed
Gitbranch, ahead/behind, and working tree on; width 14; refresh 1500 ms

Looks

Looks are named snapshots of visual and segment configuration. Applying a preset preserves an unmatched custom configuration as the recovery look user before replacing it.

LookVisible focusDistinctive settings
minimalModel, todos, context, tokensContext width 6; TPS off
balancedTen core operational segmentsDefault priority; context 8; quota 6; last TPS
fullAll fourteen segmentsContext 10; quota 8
usageModel, context, quota, tokens, TPS, clockSplit capacity view; context 16; quota 8; percent and reset on
userLast unmatched custom viewAutomatic recovery snapshot
Saved lookUser-selected snapshotLowercase kebab-case name; up to 12 manual looks
/bar look usage
/bar look next
/bar look previous
/bar look save focused-work
/bar look delete focused-work

Commands

CommandEffect
/barOpen the visual editor
/bar configPrint current configuration, visible order, and survival priority
/bar resetRestore v9 defaults
/bar helpShow concise help and examples
/bar on / /bar offEnable or disable rendering
/bar look NAMEApply a built-in or saved look
/bar look next / previousCycle looks
/bar look save NAMESave the active visual configuration
/bar look delete NAMEDelete a manual look

Natural language

Documented phrases compile locally without a model round trip:

/bar make context longer
/bar context 12 wide
/bar put todos right of model
/bar side context center
/bar hide percentages
/bar show only model todos context tokens
/bar context stars and quota dots
/bar apply the balanced look
/bar spacing 2
/bar colors vivid
/bar hide git, show clock
IntentAccepted vocabulary
Relative orderbefore, after, left of, right of
Widthlonger, wider, shorter, narrower, N wide/chars/cells
Visibilityshow, enable, hide, disable, off
Sideside SEGMENT left/center/right
Colorsauto, quiet, vivid
Spacing03
Aliasesctx, limits, tasks, subagents, branch, speed, time, and others listed by the segment atlas

An entirely unrecognized request is handed to the current agent, which should inspect and use bar_configure. For must-be-atomic natural-language changes, prefer one fully recognized clause per command or use one explicit tool batch; a mixed request can contain an unrecognized clause that produces no operation.

Agent-safe configuration

bar_configure is the supported machine interface. Never hand-edit the persisted JSON.

flowchart TD
  A[Configuration intent] --> B{Control surface}
  B --> C[Visual editor]
  B --> D[Local natural language]
  B --> E[Agent via bar_configure]
  C --> F[Draft then save]
  D --> G[Compile recognized clauses]
  E --> H[Inspect · dry-run · atomic batch]
  F --> I[Validate and persist]
  G --> I
  H --> I

Safety contract

  1. Omit operations to inspect the active configuration.
  2. Preserve every unspecified setting.
  3. Use the fewest operations that express the request.
  4. Use dryRun: true for consequential or ambiguous batches.
  5. A batch is atomic: any validation error rejects the whole write.
  6. The tool accepts at most 40 operations per call.

Operation vocabulary

OperationPurposeRequired fields
segmentShow or hidesegment, enabled
moveChange priority/ordersegment, position; anchor for before/after
resizeResize context or quotatarget; width or delta
styleChange context/quota barstarget, style
sideAssign split groupsegment, side
optionSet a typed configuration optionoption, value
lookApply, save, delete, or cycleaction; optional name or direction

Common payloads

Inspect without writing:

{}

Preview a focused capacity layout:

{
  "dryRun": true,
  "operations": [
    { "op": "look", "action": "apply", "name": "usage" },
    { "op": "resize", "target": "context", "width": 20 }
  ]
}

Apply one atomic layout batch:

{
  "operations": [
    { "op": "segment", "segment": "clock", "enabled": true },
    { "op": "side", "segment": "context", "side": "center" },
    { "op": "move", "segment": "todos", "position": "after", "anchor": "model" },
    { "op": "style", "target": "context", "style": "stars" },
    { "op": "option", "option": "tokens.showK", "value": true }
  ]
}

Option IDs

GroupOption IDsValues or range
Globalenabled; surface; placement; glyphsBoolean; widget/status; above/below; Unicode/ASCII
Layoutlayout.alignment; layout.spacing; colors.mode; renderThrottleMsFour alignments; 03; three color modes; 401000 ms
Modelmodel.maxWidth; model.showThinking; model.showFreeMarker; model.alias324; booleans; current-model alias
Agentsagents.alwaysShowCountBoolean
Contextcontext.mode; context.display; context.showPercentused/free; aggregate/breakdown; boolean
Quotaquota.enabled; quota.mode; quota.showPercent; quota.showReset; quota.ttlMinutesBoolean; three windows; 1120 min
Todostodos.mode; todos.divider; todos.maxGlyphs; todos.showTotalphases/ratio; three dividers; 1100; boolean
Tokenstokens.separator; tokens.showKarrows/exchange; boolean
TPStps.modelive/last/off
Gitgit.showBranch; git.showAheadBehind; git.showWorkingTree; git.branchMaxWidth; git.refreshMsBooleans; 340; 25060000 ms

Additional limits: model aliases are capped at 32; saved look names are lowercase kebab-case up to 32 characters; manual looks are capped at 12.

Runtime and persistence

sequenceDiagram
  participant OMP as OMP events
  participant Bar as OMP Bar runtime
  participant Render as Segment renderer
  participant UI as Widget or status
  participant Store as statusbar.json

  OMP->>Bar: session · tool · todo · agent · loop · mode changes
  Bar->>Render: normalized config + runtime snapshot
  Render->>Render: build · compact · prioritize · split
  Render->>UI: redraw after throttle window
  UI-->>Bar: /bar or bar_configure mutation
  Bar->>Store: validate · serialize · temporary file · rename
  • Rendering is event-driven and throttled; the default redraw floor is 100 ms.
  • Git and quota use their own refresh/cache timing.
  • Configuration is stored as statusbar.json, migrated and normalized on load.
  • Writes are serialized, written through a private temporary file, and atomically renamed.
  • If the file exists but is unreadable, OMP Bar runs on defaults and refuses to overwrite it.
  • No-op changes do not create writes.

Current boundaries

BoundaryPractical response
Enabled segments without runtime data do not renderTreat the editor preview as a vocabulary guide, not a live-state promise
Status surface has a fixed 120-cell, left-aligned budgetUse the widget surface for terminal-width-aware split layouts
The reduced fallback menu exposes global actions, not full per-segment editingReopen /bar in the full interactive UI or use bar_configure
A mixed natural-language request can silently omit an unrecognized clauseUse one recognized clause per command or an explicit atomic tool batch
Split-editor reordering also rewrites global survival priorityCheck /bar config after complex side/order edits
Extremely narrow colored output can expose clipping artifactsReduce segments or spacing; switch to ASCII when needed

Troubleshooting

SymptomCheckFix
Bar is absentEnabled state, selected surface, extension load/bar on; then /reload-plugins if the extension was just added
Segment is absentVisibility and runtime dataEnable it; then confirm its data source exists
Important item disappears firstGlobal orderMove it earlier and inspect /bar config
Widget is on the wrong edgeSurface and placementSelect widget, then above/below placement
Layout is crowdedContext/quota width, spacing, visible listNarrow bars, lower spacing, hide low-priority segments, or apply minimal
Config will not saveUnreadable persisted JSON or validation failurePreserve the unreadable file for recovery; repair it outside the running process, then reload
Glyphs look brokenTerminal width/font behaviorSwitch glyph mode to ASCII

Source and verification map

ConcernSource of truthContract coverage
Host lifecycle, commands, toolsrc/omp-bar.tsIntegration and host tests
Schema, defaults, normalizationsrc/bar-config.tsConfig and settings-matrix tests
Segment outputsrc/bar-segments.tsSegment and settings-matrix tests
Layout and width fittingsrc/bar-format.tsFormat and render-target tests
Editor hierarchysrc/bar-menu.tsMenu contract tests
Natural languagesrc/bar-language.tsLanguage parser tests
Operations and validationsrc/bar-operations.tsAtomic-operation tests
Lookssrc/bar-looks.tsLook and operation tests
Persistencesrc/bar-store.tsStore, migration, and concurrency tests

From the OMP Bar source directory, bun run verify runs the complete contract suite. Source and this canonical reference were reconciled on 2026-08-12.


OMP docs: wiki.omp.loca.zone · Upstream runtime: oh-my-pi