OMC 5.1
OMC 5 requires macOS 14.6 or later. For older macOS versions, use OMC 4.x.
OMC 5.1 is a feature release focused on making applets easier for both people and AI agents to author: command manifests and menu bars move to JSON, the applet builder gains a headless command-line front end, and a family of new ActionUI dialog elements (Quick Look, Chat, rich text, diff, cached image, toast) becomes available to dialogs. It also lands several runtime correctness fixes and a security hardening of the engine's inter-process files.
Highlights
Command.json replaces Command.plist
Applet command manifests are now authored as Command.json. JSON is 1:1 equivalent to the old plist, is far friendlier to AI agents and to hand editing, and diffs cleanly in source control.
- The engine (Abracode.framework) resolves
Command.jsonbeforeCommand.plistwhen loading an applet, preferring JSON when both are present. ExistingCommand.plistapplets keep working unchanged. - AppletBuilder now creates new applets with
Command.json, ships JSON templates, and branches command editing and validation on the file format. - Validation gained a heuristic to tell an ActionUI JSON file apart from
Command.jsonand other non-ActionUI JSON, so command manifests are no longer mistaken for UI files.
MainMenu.json replaces MainMenu.nib
Applet menu bars can now be described in MainMenu.json, powered by ActionUI, instead of a compiled MainMenu.nib. The JSON describes modifications to the default app menu bar that ActionUI constructs: menus and items can be added, modified, or removed by targeting a standard item with replacing.
- AppletBuilder itself now ships nibless: its menu bar is built programmatically plus
MainMenu.json, and new applets are created withMainMenu.json. - New documentation covers the
MainMenu.jsonformat and a step-by-step guide for converting an applet fromMainMenu.nibtoMainMenu.json. - OMC 5.1 is required to run applets that use the new menu-bar format.
Help viewer rebuilt on ActionUI
The applet Help viewer was switched from a nib to an ActionUI window using a new WebView implementation that is stable on macOS 14.6 and no longer crashes.
AppletBuilder agent CLI
AppletBuilder now bundles a command-line front end, Contents/Resources/Agents/appletbuilder, that drives the same create / validate / build / prettify / preview / list operations as the GUI. It shares the GUI's build, create, and validation logic through a single source of truth (a reporter indirection over the shared shell libraries), so headless builds and interactive builds behave identically. This makes AppletBuilder scriptable and usable by AI agents.
New dialog elements and controls
New ActionUI elements
Abracode.framework now links and registers additional ActionUI add-on elements, so OMC dialogs can use:
- QuickLook - a file-preview element wrapping the system Quick Look view.
- Chat - a conversational message-list element.
- RichText - formatted text rendering.
- Diff - side-by-side / inline text diff.
- CachedImage - an image element with asynchronous loading and caching.
The bundled ActionUIViewer preview tool and the JSON verifier schemas were updated so dialogs using the new elements preview and validate out of the box.
Toasts: omc_present_toast / omc_dismiss_toast
omc_dialog_control gained two verbs for transient, non-modal feedback:
omc_present_toast <message> [duration_seconds] [action_title] [action_id]- shows a top-pinned snackbar that fades in, stays a few seconds (4 by default), then auto-dismisses. Supplying bothaction_titleandaction_idadds one inline button that dispatches the given subcommand when tapped.omc_dismiss_toast- dismisses it early.
Use a toast for unobtrusive "done" feedback that does not steal focus the way an alert does.
Programmatic Table/List row selection
omc_dialog_control can now select a Table or List row from a script without overwriting the rows (previously the only way to "select" was to set the control value, which replaced all rows with a single string):
omc_select_row <0-based index>- select by index (out of range clears the selection).omc_select_row_with_content <text> [1-based column]- select the first row whose column equals the text (exact, case-sensitive; omit the column or pass 0 to match any column).omc_deselect- clear the selection.
The verbs work on both Table and List, on both the ActionUI and legacy Nib window paths, and fire no selection actionID.
Windows respect SwiftUI content size limits
ActionUI dialog windows now respect the content's SwiftUI minimum and maximum size limits, so dialogs no longer resize past what their content supports.
Runtime fixes
- Applet command execution no longer blocked by contextual-menu activation gating. An applet whose main command used a file activation mode (
act_file/act_folder/act_file_or_folder) withUSE_NAV_DIALOG_FOR_MISSING_FILE_CONTEXT=falsewould silently fail to run when launched with no file context. Explicit command execution now bypasses the activation match that is only meant for contextual-menu / service population; contextual menus, OMCService, and the test app keep the previous gating. - Main command resolvable by
<NAME>.mainandmain. An explicitCOMMAND_ID=<NAME>.mainnow behaves exactly like a missing command id, andNEXT_COMMAND_ID/ subcommand references can address the main command by<NAME>.main,main, or the legacytop!. This fixes applets that set an explicit main-command id and then failed to launch or chain to themselves. The command verifier recognizes the main command declared either way. - INPUT_DIALOG text (e.g. passwords) no longer lost in chains. Text entered in an
INPUT_DIALOG(includinginput_password_text) is now carried into the per-object runtime data copy, so a subcommand in a chain receives it viaOMC_DLG_INPUT_TEXTinstead of an empty value. - DEFAULT_LOCATION tilde paths are expanded. A
DEFAULT_LOCATIONof~(or any path with a tilde) in the choose-file, choose-folder, and choose-object dialogs now opens at the intended directory instead of the disk root. - Fixed a crash in the input dialog.
- Removed a stale fixed icon from the progress dialog.
Security and robustness
- Engine IPC files moved off world-writable /tmp. The small files the engine passes between Abracode.framework and its spawned tools (
omc_dialog_controldialog values,omc_next_commandchaining) were written to a world-writable/tmp/OMCdirectory with no sticky bit, which allowed a local user to delete, replace, or redirect them, and the create sequence was TOCTOU-exploitable via a pre-planted symlink. All four touch points now resolve one path helper that builds<per-user temp dir>/OMC/<leaf>and creates theOMCsubdirectory mode 0700, private to the user. This works correctly across processes, including under the App Sandbox, because the tools inherit the app's$TMPDIR. omc_popennow marks a pipe file descriptor close-on-exec.- Fixed a leak in
OmcHostTaskManageron the throw path, plus additional low-severity robustness hardening and correctness fixes surfaced in review. - Fixed a batch of build warnings: deprecated pasteboard, activation, and document APIs.
Tooling and packaging
- codesign_applet.sh reworked for layout-independent deep signing: it discovers and signs nested code and loose non-code files regardless of bundle layout, adds a
--briefmode, and supports an entitlements override. This is the recommended way to deep-sign a built applet (replacing the deprecatedcodesign --deep). - build.sh reimagined to build the single "OMC Distribution" scheme (Abracode.framework, OMCApplet, OMCService, OnMyCommandCM together) instead of looping over every sub-project, and to propagate xcodebuild's exit code.
update_appletbuilder.shfixes and rework to build the add-on-aware ActionUIViewer and bundle the new ActionUI add-on documentation and verifier schemas; Python is no longer updated by default.- SPM package dependencies are now pinned to versioned releases (ActionUI core, Chat, RichText, Diff, CachedImage, Quick Look) rather than moving checkpoints.
- The AppletBuilder build warns when
.profrawcoverage files are left in the applet bundle. - Updated README and expanded documentation, including main-command id aliases and corrected file-panel documentation (
DIALOG_IDENTIFIER,DEFAULT_LOCATION). - The bundled AI agent skill was rebuilt and its activation criteria broadened.
In this distribution
- AppletBuilder.app - OMC applet development studio.
- OnMyCommandCM.plugin - contextual menu plugin for use with Shortcuts.app; commands load from
~/Library/Preferences/com.abracode.OnMyCommandCMPrefs.plist. - OMCService.service - macOS service template for standalone OMC-based system services.
- Skill/ - the OMC AI agent skill (three flavors) plus its installer.
- Scripts/ -
codesign_applet.sh,install_contextual_menu_plugin.sh,thin_distribution.sh,OMCApplet.entitlements, and the examplecom.abracode.OnMyCommandCMPrefs.plist.
See the main OMC README at https://github.com/abra-code/OMC/ for full documentation on commands, runtime context, dialogs, and services.