Command palette

One input for every entity, every action and every page · ⌘K from anywhere · 64 commands, 9 entity prefixes, 10 scope tokens

The palette is the router. Nothing in i3 requires knowing which page owns a noun. Type an EPC and you land on the unit, type an AWB and you land on the shipment, type loc:MCC type:DISPLAY_GOOD and you land on a filtered pivot. Commands you lack the role for are never offered. Shortcut reference →

Typed lea while on /drift

Context-aware suggestions first, then fuzzy entity matches, then actions. Fuzzy hits are marked so you can see why a row matched.

lea On /drift · DRF-0142
Suggested 3
Resolve the open drift DRF-0142aged 26hMSR31-07 · HQ_319 · delta -10 · needs a compensating row ⌘↵
Assign DRF-0142 to meAhmad Yousuf · admin · stops the escalation timer a
Snooze this case · 7 daysRe-surfaces 05 Aug 08:00 GST · reason required s
SKUs 5
LB LLW-BAG-047Lulwa Leather Tote · Black318 on hand · 178 HQ_319 · STOCK · top match by usage ↵
LT LLW-BAG-048Lulwa Leather Tote · Tan287 on hand · 64 YAS · STOCK
LB LLW-BLT-067Lulwa Leather Belt · Black89 on hand · STOCK
LC LLW-BAG-051Lulwa Crossbody · Camel12 on hand · reorder at 40 · below buffer
BX BX-MSR31Giftbox MSR31 · leather sleevecompositeavailability 41 = min(children) · holds no stock of its own
Suppliers 1
Leather Crafts preferredUAE · 3 active POs · AED 840K YTD · 21d lead time · 2 open RTS
Actions 2
Raise a PO for Leather CraftsOpens the draft with the supplier prefilled cp
Show all lea matches31 results across SKUs, suppliers, cartons and cases ↵
Recent 3
EPC E280 6894 0000 4021 8F3Copened 22m ago · unauthorized gate read at G1
#MIN10482opened 1h ago · ghost exchange, refund with zero lines
PO-2026-118opened 3h ago · 1,180u cleared customs 06:10
Help 2
Why is my number wrongThe decision tree · 5 nodes, stop at the first yes
All keyboard shortcuts20 bindings, one registry, rendered in two places ?
↑↓ navigate ↵ open ⌘↵ open in panel tab next group esc close 16 results across 6 groups · 41 ms · 9 actions hidden by role
Previewopen
DRF-0142
MSR31-07 · HQ_319 · gate mismatch
-10 expected 560 · counted 550
Detected29-07 14:36
Sourcerfid gate
Scenariogate_unverified
Age26h
Owner module12 rfid
Resolutionphysical_action
Evidence

A tag left gate G1 at 14:36:12 with no matching dispatch event from ops2. The gate read is immutable and wins on physical existence, so the unit is out of the building. Dual approval is required for the compensating row.

Preview variants
driftskuorderawbepccasepotransferlocationcartonactionnav
The preview never fetches on hover, only on selection. Hover fetching turns arrow-key browsing into 40 requests.

Command registry

Defined in code, not in a table, so a command pointing at a route that does not exist fails a test rather than shipping

18 of 64 shownFull shortcut list ↗
Command idLabelKindScopeShortcutNeedsOpens
nav.dashboardGo to the dashboardnavglobalg dviewerdashboard
nav.inventory_liveGo to live inventorynavglobalg sviewerinventory-live
nav.notificationsGo to notificationsnavglobalg nviewernotifications
nav.driftGo to driftnavglobalg fviewerdrift
nav.transfersGo to transfersnavglobalg tviewertransfers
nav.auditGo to the audit lognavglobalg uvieweraudit-log
nav.rfidGo to RFID gatesnavglobalg rviewerrfid
action.ack_alertAcknowledge this alertactionnotification rowamanagerside panel
action.snooze_alertSnooze this alertactionnotification rowsmanagerside panel
action.mute_ruleMute this rule, expiry and reason requiredactionnotification rowmops_managerside panel
action.resolve_driftResolve this drift caseactiondrift row⌘↵ops_managerdrift
action.post_correctionPost a compensating rowactionledger row-adminside panel
action.sign_openingSign an opening balanceactionlocation-manageropening-stock
action.create_transferStart a transferactionglobalc tmanagertransfers
action.create_poRaise a purchase orderactionglobalc pops_managerinflows
action.schedule_countSchedule a cycle countactionlocationc cmanagerstock-count
view.cycleCycle saved views on this pageviewtable pagesvviewerin place
view.save_currentSave the current filters as a viewviewtable pages⌘Sviewerside panel
A command whose required_role exceeds the caller's role is never rendered. The footer discloses how many were hidden, so the palette never looks broken or arbitrary.

Entity jump grammar

Nine prefixes. Bare input is matched against all of them by shape.

PrefixExampleResolves toPreviewLands on
sku:sku:MSR31-07a SKU, alias-awareskusku-detail
order:order:#MIN10482a Shopify order and its postingsordershopify-events
awb:awb:DHL 4548827193a shipment, ops2 timeline mirroredawbtransfers
epc:epc:E280 6894 0000one physical unit in the unit ledgerepcrfid
case:case:CSD-4821a CSD return, exchange or repair casecasereturns
po:po:PO-2026-118a purchase order and its linespoinflows
tr:tr:TR-0937a transfer and its 2N postingstransfertransfers
loc:loc:HQ_319a location or a virtual poollocationlocation-detail
ctn:ctn:MC-4471a master or sub cartoncartoncartons
drift:drift:DRF-0142a reconciliation case with evidencedriftdrift
Shape detection means the prefix is optional in practice. E280… is an EPC, #MIN… is an order, PO-… is a PO. Type the prefix when the shape is ambiguous.

Scoped search grammar

Tokens combine with AND. Free text is matched last, so a scope never hides a name.

TokenMeansExampleCombines with
loc:restrict to a location or poolloc:MCCeverything
type:restrict to one of the 16 stock typestype:DISPLAY_GOODloc, sku, since
since:relative or absolute windowsince:7deverything
severity:alert severity floorseverity:P1source, status, assignee
source:originating systemsource:rfidseverity, status, since
status:lifecycle state of the entitystatus:openseverity, source, assignee
assignee:who owns it, me is allowedassignee:meseverity, status
view:load a saved view by slugview:finance-closenothing · it replaces the query
gate:things blocked behind a gategate:GATE-6loc, source
is:boolean facetsis:composite is:below-buffereverything
-negate any token-loc:HQ_319everything
Worked example: loc:MCC type:DISPLAY_GOOD since:14d is:below-buffer gives every display unit at Mirdif City Centre that has moved in the last fortnight and sits under its reorder point. 6 rows, 38 ms.
An unparseable token is not an error. It falls through to free text and the footer says which token was ignored.

Palette usage by group

14 days · which groups people actually open, and how fast they resolve

4,368 opens
SKU jump · 1,482 opens · 34% Navigation · 971 opens · 22% Order and AWB jump · 703 opens · 16% EPC and unit jump · 512 opens · 12% Actions · 389 opens · 9% Saved views · 178 opens · 4% Recents · 92 opens · 2% Help · 41 opens · 1% SKU jump p95 18 ms Navigation p95 22 ms Order and AWB p95 27 ms EPC p95 34 ms Actions p95 31 ms Saved views p95 41 ms Recents p95 36 ms Help p95 44 ms
SKU
1,482
Nav
971
Order/AWB
703
EPC
512
Actions
389
Views
178
Recents
92
Help
41
SKU and navorder and AWBEPCactions and viewsp95 latency

Recents

Per person, deduped, most recent first

EntityKindWhat it wasOpenedTimes
E280 6894 0000 4021 8F3Cepcunauthorized gate read at G122m3
#MIN10482orderghost exchange, refund with zero lines1h5
CSD-4821casereplacement unreturned, 7d past window2h4
PO-2026-118po1,180u cleared customs 06:103h7
MSR31-07skuSereen Rose, tan strap3h12
TR-0937transferHQ_319 to YAS, stale 4 days4h6
DHL 4548827193awbinbound PI shipment, customs cleared5h2
view:finance-closeviewsaved view, month-end scope6h9
BX-MSR31skugiftbox composite, availability 418h3
MC-4471cartonmaster carton, A3 to picking9h1
HQ_319locationmain warehouse, 82% fill1d18
DRF-0139driftresolved 28-07, compensating row posted1d2
Recents are deduped on (person, kind, ref), so opening the same SKU twelve times is one row with a counter, not twelve rows.

State variants

A search box that fails badly makes the whole product feel broken, because it is the first thing people reach for

Library ↗
Loading
Rows keep their 30px height so nothing jumps when the results land. Group labels render before their rows do.
Empty
No matches for "MST-CRM-99".
Try a SKU prefix, an order number, an AWB, an EPC or a case id. Or use a scope: loc: type: since:
Quotes the query back so a typo is visible, and teaches the grammar in the same breath.
Error
Search is unavailable.
The index did not respond in 3 seconds. Nothing was changed. Error id srch-2b8e40.
Recents and navigation still work from the local cache, so the palette degrades instead of dying.
Permission
9 actions are hidden.
They need ops_manager or admin. You hold manager on app i3.
Hidden, but counted. A silently shorter list reads as a bug and sends people to Slack.
Connected to Dashboard Help Notifications State library Guided tour Live inventory SKU detail Location detail Cartons Transfers Returns Inbound RFID Drift Shopify events Audit log Stock count Opening stock