Opting a plugin into the shell
From any sibling plugin:
phpif ( class_exists( 'OC_Shell' ) ) {
OC_Shell::register_screen( 'my-plugin', 'My Plugin' );
OC_Shell::register_command( [
'id' => 'my-plugin-dashboard',
'label' => 'My Plugin - Dashboard',
'url' => admin_url( 'admin.php?page=my-plugin' ),
'group' => 'My Plugin',
] );
OC_Shell::open( [
'plugin' => 'my-plugin',
'name' => 'My Plugin',
'version' => '1.0.0',
] );
// ... your page body ...
OC_Shell::close();
}When OC_Shell::open() runs, the rail, top bar, and command palette wrap your admin page automatically.
Command palette filter
Add commands without modifying any plugin:
phpadd_filter( 'orravo_command_palette_items', function( array $items ): array {
$items[] = [
'id' => 'my-shortcut',
'label' => 'Open Trello board',
'url' => 'https://trello.com/...',
'group' => 'External',
];
return $items;
} );Users open the palette with Cmd+K on macOS or Ctrl+K on Windows/Linux.
Product registry
The known-products list lives in OC_KNOWN_PRODUCTS. Sibling plugins also self-register via orravo_register_product:
phpadd_filter( 'orravo_register_product', fn( array $p ): array =>
array_merge( $p, [ 'my-plugin' => 'My Plugin' ] )
);The license validator, update checker, and system status page all read this registry via oc_orravo_products().

