Skip to content

Releases: abra-code/OMC

OMC version 5.1.0

Choose a tag to compare

@abra-code abra-code released this 24 Jul 10:31

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.json before Command.plist when loading an applet, preferring JSON when both are present. Existing Command.plist applets 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.json and 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 with MainMenu.json.
  • New documentation covers the MainMenu.json format and a step-by-step guide for converting an applet from MainMenu.nib to MainMenu.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 both action_title and action_id adds 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) with USE_NAV_DIALOG_FOR_MISSING_FILE_CONTEXT=false would 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>.main and main. An explicit COMMAND_ID=<NAME>.main now behaves exactly like a missing command id, and NEXT_COMMAND_ID / subcommand references can address the main command by <NAME>.main, main, or the legacy top!. 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 (including input_password_text) is now carried into the per-object runtime data copy, so a subcommand in a chain receives it via OMC_DLG_INPUT_TEXT instead of an empty value.
  • DEFAULT_LOCATION tilde paths are expanded. A DEFAULT_LOCATION of ~ (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_control dialog values, omc_next_command chaining) were written to a world-writable /tmp/OMC directory 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 the OMC subdirectory 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_popen now marks a pipe file descriptor close-on-exec.
  • Fixed a leak in OmcHostTaskManager on 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 --brief mode, and supports an entitlements override. This is the recommended way to deep-sign a built applet (replacing the deprecated codesign --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.sh fixes 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 .profraw coverage 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 example com.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.

OMC version 5.0.2

Choose a tag to compare

@abra-code abra-code released this 08 Jun 06:41

OMC 5.0.2
The minimum macOS requirement for OMC 5.0+ is macOS 14.6

Update ActionUI library to 0.6
Create Command.plist verifier and add it to AppletBuilder and OMC skill
Added script validation for .sh, .zsh, .py, .applescript and allow manual validation in "Scripts" pane
Added Info.plist validator
Enabled all validations for all elements when building the applet: ActionUI json files, scripts, Command.plist, Info.plist
Added binaries thinning when building
Added a couple of icons for new applets

OMC version 5.0.1

Choose a tag to compare

@abra-code abra-code released this 27 May 05:08

OMC 5.0.1
The minimum macOS requirement for OMC 5.0+ is macOS 14.6

  • Update ActionUI library, which includes new verifier in AppletBuilder
  • Better support for embedded Python with PYTHONPYCACHEPREFIX, PYTHONPATH & PATH exported also for .sh scripts
  • Updated embedded Python to 3.14.5
  • Create OMC "skill" for AI agents with flavors for claude, capable (other frontier models), and lite (for local models)
  • Documentation update

OMC version 5.0

Choose a tag to compare

@abra-code abra-code released this 05 May 08:46

OMC 5.0 - major OMC update
The minimum macOS requirement has been raised to macOS 14.6

  1. ActionUI Integration - building modern UI windows and dialogs:
    • ActionUI JSON-based window builder
  2. AppletBuilder.app - New standalone application for building OMC applets:
    • App for creating and editing applets
    • Editing of individual command descriptions in Command.plist (Commands panel)
    • Scripts management and editing (Scripts panel)
    • ActionUI JSON editor with element template picker, preview and validation (UI Files panel)
    • Services support (General panel)
    • Codesigning for local execution and for distribution (Build & Run panel)
    • Hydrating applets stripped of binaries (Build & Run panel)
    • Contextual help documentation
  3. Window/Activation Callbacks - Added support for app and window activation/deactivation callbacks
  4. File Dialog Enhancements:
    • Added ALLOW_MULTIPLE_ITEMS option for CHOOSE_FILE/FOLDER/OBJECT_DIALOG
    • Added DIALOG_IDENTIFIER and BUTTON_PROMPT support for file panels
    • Open, Choose & Save dialogs enhancements
  5. Command Dispatch Improvements:
    • Dispatch commands from main menu as dialog subcommands for key window
    • Added OMC_PARENT_COMMAND_GUID and OMC_PARENT_DIALOG_GUID support
    • Added synthetic command support (for scripts without corresponding command description in Command.plist)
  6. Updated documentation with instructions for AI agents to aid with building applets. OMC low-code environment with ActionUI JSON-based UI creation allows rapid and successful development of applets with AI agents.

OMC version 4.4.2

Choose a tag to compare

@abra-code abra-code released this 09 Feb 07:43

Python Support

  • Fix non-universal binary components in OMCPythonApplet.app embedded Python distribution
  • Precompile Python scripts: On app launch, precompile all .py files in Resources/Scripts/ for embedded Python distributions

Bug Fixes

  • Command lookup precision: Fixed command lookup logic - when no command ID provided, match by name (first command, not last); don't fall back on explicit ID lookup failure

Installation

  • OnMyCommandCM.plugin quarantine: Remove potentially problematic quarantine bit when installing the contextual menu plugin

Documentation

  • Bundle "Documents" with distribution
  • "Building OMC Applets" guide: Comprehensive guide for creating OMC applets, moved to Documentation/ directory

OMC version 4.4.1

Choose a tag to compare

@abra-code abra-code released this 06 Feb 08:57

Bug Fixes:

  • Fixed crash related to WAIT_FOR_TASK_COMPLETION - Resolved a recent regression where async popen executions were incorrectly treated as synchronous, causing crashes with overrelease. Detected with Address Sanitizer testing.
  • Fixed missing custom environment variables in ENVIRONMENT_VARIABLES - Corrected a regression introduced by recent refactoring that caused custom environment variables to not be properly set.
  • Fixed missing OMC_NIB_TABLE_N_COLUMN_M_ALL_ROWS functionality - Revived a long-standing regression where getting values from all rows in a table view was broken (likely when adding WebKit view DOM element parts support). This feature allows exporting table data using special environment variable patterns.

Distribution:

  • Added README with brief use and installation instructions
  • added scripts for building applets
  • added script to install the contextual menu plugin for Abracode Shortcuts.app
  • OMCPythonApplet.app now embeds Python 3.14.3 built with the latest https://github.com/abra-code/Python-Embedding scripts and includes uPip module for installing universal fat binary modules

Infrastructure:

  • Added Address Sanitizer (ASAN) testing to catch memory issues earlier
  • Added unit tests for ENVIRONMENT_VARIABLES functionality
  • Added "Browser.omc” bundle for testing table view in a nib-based dialog

OMC version 4.4

Choose a tag to compare

@abra-code abra-code released this 22 Jan 08:43

Functional changes:

  • In the absence of command id for exe_script_file execution, the OMC engine was looking for "main.sh" in the Content/Resources/Scripts/. Now it looks first for <CommandName>.main.sh first and then fall back to main.sh if not found, where <CommandName> is the non-dynamic NAME value in command description.
  • Pre-scan OMC_XXX env variables in ENVIRONMENT_VARIABLES. Placing them in ENVIRONMENT_VARIABLES triggers the same functionality as if the special word or env variable was found in the script body itself.
  • propagate the parent context info to subcommand context check to prevent early failures
  • Nav dialog settings in command description like: CHOOSE_OBJECT_DIALOG, CHOOSE_FILE_DIALOG, CHOOSE_FOLDER_DIALOG, SAVE_AS_DIALOG or INPUT_DIALOG now imply export of OMC_DLG_CHOOSE_OBJECT_PATH, OMC_DLG_CHOOSE_FILE_PATH, OMC_DLG_CHOOSE_FOLDER_PATH, OMC_DLG_SAVE_AS_PATH and OMC_DLG_INPUT_TEXT even if command description in the plist does not refer to it (but the separate script files may)
  • Set OMC env variables in WebKit view as window.omc_env. JavaScript code in WebKit can access the variables at runtime with code like: const myAppPath = window.omc_env.OMC_APP_BUNDLE_PATH;
  • Fix app icon problem for end notification dialog
  • Add support for bundling relocatable Python runtime in applet bundle. New applet with Python is added to distribution: OMCPythonApplet.app. Apple stopped shipping Python in macOS so this allows us to create self-contained Python applets without the need to install Python on deployment machine.
  • Added scripts to aid in applet development: build_applet.sh, thin_distribution.sh, codesign_applet.sh
  • Re-implemented omc_popen() with posix_spawn() - this is an internal change to the core process forking function at the co=re of OMC to remove use of deprecated API, which may misbehave in the future macOS releases.
  • Improve logic to show nav dialogs on missing file context. Commands expecting a file or directory context - and are executed without files - were not getting nav dialog prompt to select file(s)/dir(s) unless OMC_OBJ_PATH was added explicitly to ENVIRONMENT_VARIABLES in command description. With this change the command description with ACTIVATION_MODE=act_file, act_folder, act_file_or_folder and related does not need to have OMC_OBJ_PATH in env vars to trigger nav dialog on missing file context.
  • Other internal changes and unit testing

OMC version 4.3.1

Choose a tag to compare

@abra-code abra-code released this 02 Nov 10:26

Changed the timeout for Apple Events from default 60 secs to 5 secs to mitigate an issue encountered in macOS 26 Finder.

OMC version 4.3

Choose a tag to compare

@abra-code abra-code released this 01 Nov 10:02

OMC 4.3 - a major refresh of the engine with a lot of code maintenance, bug fixes and features.
More detailed documentation forthcoming - along with general overhaul of command description and applet building guide.
The focus continues on building applets, with support for system services.
Standalone OMCService.service is also available but offers no advantage over an equivalent app.
An example app built with OMC 4.3 and also providing a system service is Xattr:
https://github.com/abra-code/XattrApp
Abracode.framework is no longer installed in /Libraries but is embedded in each applet, service and OnMyCommandCM.plugin. The framework is small enough by today's standards and embedding offers advantage of applets being self-contained and not requiring an installation.

OMC version 4.2.1

Choose a tag to compare

@abra-code abra-code released this 02 Jan 04:39

Bugfix release:

  • indeterminate progress bar animation fix
  • fix location of "jsc" compiler on macOS 10.15 and 11