A few notes on decompiling Apple Shortcuts workflows into their raw XML 'source code'. This article explains how to decompile Apple Shortcuts workflows by modifying iCloud Share URLs to access the raw JSON data, which contains the download URL for the shortcut's binary property list file and its name. It then describes converting that binary plist to XML using the `plutil` command-line tool. Additionally, the article provides technical details on the low-level storage of Shortcuts on macOS, noting that they are managed in a SQLite database at `~/Library/Shortcuts/Shortcuts.sqlite` with tables for shortcut metadata, actions, and other related data. Decompile Apple Shortcuts into raw XML 'source code' Table of Contents < -- TOC start generated with https://bitdowntoc.derlin.ch/ -- - Original Notes original-notes - Further Notes from ChatGPT further-notes-from-chatgpt - Further Reading / Others Research further-reading--others-research - See Also see-also - Announcement Tweet announcement-tweet - My Other Related Deepdive Gist's and Projects my-other-related-deepdive-gists-and-projects < -- TOC end -- Original Notes A few notes on decompiling Apple Shortcuts workflows into their raw XML 'source code'. You may also find some benefit in something like this: - https://routinehub.co/shortcut/5256/ - Shortcut Source Tool: View, convert, save source in plist or json, edit and import back to Shortcuts, review in browser Originally posted by @0xdevalias in https://github.com/joshfarrant/shortcuts-js/issues/683 issuecomment-1548831442 Crossposted: https://www.reddit.com/r/shortcuts/comments/13h61hv/comment/jl4be0p/ https://www.reddit.com/r/shortcuts/comments/13h61hv/comment/jl4be0p/ Looking a little closer at that shortcut, the main bit of functionality seems to basically be modifying the iCloud Share URL slightly: Given a URL like this: https://www.icloud.com/shortcuts/ABC12 It becomes: https://www.icloud.com/shortcuts/api/records/ABC123 Then extracts the following from the JSON on that page: - the URL for the unsigned shortcut file which is an 'Apple binary property list' file : fields - shortcut - value - downloadURL - the name of the shortcut workflow: fields - name - value We can then convert that binary plist file to XML or JSON using plutil though when I tried the JSON format I got an error invalid object in plist for destination format , so might have to stick to XML : shell plutil -convert xml1 -e plist.xml -- the-downloaded-shortcut.plist or plutil -convert json -e plist.json -- the-downloaded-shortcut.plist Originally posted by @0xdevalias in https://github.com/joshfarrant/shortcuts-js/issues/683 issuecomment-1556546326 Crossposted: https://www.reddit.com/r/shortcuts/comments/13h61hv/comment/jl4dw28/ https://www.reddit.com/r/shortcuts/comments/13h61hv/comment/jl4dw28/ Further Notes from ChatGPT The following are some as yet barely verified notes from ChatGPT: - Private ChatGPT Convo Link: https://chatgpt.com/c/6775b854-cac4-8008-84ce-321110ba5303 On macOS, Apple Shortcuts formerly Workflow are stored in a combination of locations, but primarily they are managed using a SQLite database and associated plist files. Here's a breakdown of where and how they are stored at a low level: 1. SQLite Database The main storage for Shortcuts is in a SQLite database located at: plaintext ~/Library/Shortcuts/ShortcutsDatabase.db This database contains metadata, configuration, and the structure of each shortcut. It includes tables for: - Shortcut names - Actions and sequences - Variables and other contextual data The above path doesn't seem to exist on macOS 14.5, but the following does: ~/Library/Shortcuts/Shortcuts.sqlite Tables: shell ⇒ sqlite3 -readonly ~/Library/Shortcuts/Shortcuts.sqlite ".tables" ZACCESSRESOURCEPERMISSION ZAUTOSHORTCUTSPREFERENCES ZCLOUDKITSYNCTOKEN ZCOLLECTION ZLIBRARY ZPERSISTEDSERIALIZEDPARAMETERS ZSHORTCUT ZSHORTCUTACTIONS ZSHORTCUTBOOKMARK ZSHORTCUTICON ZSHORTCUTQUARANTINE ZSHORTCUTRUNEVENT ZSMARTPROMPTPERMISSION ZTRIGGER ZTRIGGEREVENT ZTRUSTEDDOMAIN ZVCVOICESHORTCUTMANAGEDOBJECT ZVCVOICESHORTCUTSUGGESTIONLISTMANAGEDOBJECT ZVCVOICESHORTCUTSYNCSTATEMANAGEDOBJECT Z 4PARENTS Z 4SHORTCUTS Z METADATA Z MODELCACHE Z PRIMARYKEY CoreData Model Hierachy: - extract-coredata-model-hierarchy.py https://gist.github.com/0xdevalias/ccc2b083ff58b52aa701462f2cfb3cc8 file-extract-coredata-model-hierarchy-py shell ⇒ ./extract-coredata-model-hierarchy.py ~/Library/Shortcuts/Shortcuts.sqlite - 1: AccessResourcePermission Table: ZACCESSRESOURCEPERMISSION - 2: AutoShortcutsPreferences Table: ZAUTOSHORTCUTSPREFERENCES - 3: CloudKitSyncToken Table: ZCLOUDKITSYNCTOKEN - 4: Collection Table: ZCOLLECTION - 5: Library Table: ZLIBRARY - 6: PersistedSerializedParameters Table: ZPERSISTEDSERIALIZEDPARAMETERS - 7: Shortcut Table: ZSHORTCUT - 8: ShortcutActions Table: ZSHORTCUTACTIONS - 9: ShortcutBookmark Table: ZSHORTCUTBOOKMARK - 10: ShortcutIcon Table: ZSHORTCUTICON - 11: ShortcutQuarantine Table: ZSHORTCUTQUARANTINE - 12: ShortcutRunEvent Table: ZSHORTCUTRUNEVENT - 13: SmartPromptPermission Table: ZSMARTPROMPTPERMISSION - 14: Trigger Table: ZTRIGGER - 15: TriggerEvent Table: ZTRIGGEREVENT - 16: TrustedDomain Table: ZTRUSTEDDOMAIN - 17: VCVoiceShortcutManagedObject Table: ZVCVOICESHORTCUTMANAGEDOBJECT - 18: VCVoiceShortcutSuggestionListManagedObject Table: ZVCVOICESHORTCUTSUGGESTIONLISTMANAGEDOBJECT - 19: VCVoiceShortcutSyncStateManagedObject Table: ZVCVOICESHORTCUTSYNCSTATEMANAGEDOBJECT shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZCOLLECTION' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZLASTSYNCEDHASH","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZTOMBSTONED","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":5,"name":"ZICON","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":6,"name":"ZIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":7,"name":"ZNAME","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":8,"name":"ZCLOUDKITFOLDERRECORDMETADATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":9,"name":"ZCLOUDKITORDERINGRECORDMETADATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":10,"name":"ZLASTREMOTECOLLECTIONORDERINGDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":11,"name":"ZLASTREMOTECOLLECTIONORDERINGSUBSETDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":12,"name":"ZLASTREMOTESHORTCUTORDERINGDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":13,"name":"ZLASTREMOTESHORTCUTORDERINGSUBSETDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":14,"name":"ZLASTSYNCEDENCRYPTEDSCHEMAVERSION","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":15,"name":"ZWANTEDENCRYPTEDSCHEMAVERSION","type":"INTEGER","notnull":0,"dflt value":null,"pk":0} shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZLIBRARY' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZLASTSYNCEDHASH","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":5,"name":"ZVERSION","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":6,"name":"ZCLOUDKITRECORDMETADATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":7,"name":"ZDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0} shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZSHORTCUT' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZACTIONCOUNT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZHASOUTPUTFALLBACK","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":5,"name":"ZHASSHORTCUTINPUTVARIABLES","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":6,"name":"ZHIDDENFROMWIDGET","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":7,"name":"ZLASTSYNCEDHASH","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":8,"name":"ZRECEIVESONSCREENCONTENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":9,"name":"ZREMOTEQUARANTINESTATUSVALUE","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":10,"name":"ZRUNEVENTSCOUNT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":11,"name":"ZSYNCHASH","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":12,"name":"ZTOMBSTONED","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":13,"name":"ZTRIGGERCOUNT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":14,"name":"ZACTIONS","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":15,"name":"ZCONFLICTOF","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":16,"name":"ZICON","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":17,"name":"ZQUARANTINE","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":18,"name":"ZCREATIONDATE","type":"TIMESTAMP","notnull":0,"dflt value":null,"pk":0}, {"cid":19,"name":"ZLASTRUNEVENTDATE","type":"TIMESTAMP","notnull":0,"dflt value":null,"pk":0}, {"cid":20,"name":"ZMODIFICATIONDATE","type":"TIMESTAMP","notnull":0,"dflt value":null,"pk":0}, {"cid":21,"name":"ZACTIONSDESCRIPTION","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":22,"name":"ZASSOCIATEDAPPBUNDLEIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":23,"name":"ZGALLERYIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":24,"name":"ZLASTMIGRATEDCLIENTVERSION","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":25,"name":"ZLASTSAVEDONDEVICENAME","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":26,"name":"ZMINIMUMCLIENTVERSION","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":27,"name":"ZNAME","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":28,"name":"ZPHRASE","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":29,"name":"ZSOURCE","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":30,"name":"ZWORKFLOWID","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":31,"name":"ZWORKFLOWSUBTITLE","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":32,"name":"ZCLOUDKITRECORDMETADATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":33,"name":"ZIMPORTQUESTIONSDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":34,"name":"ZINPUTCLASSESDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":35,"name":"ZNOINPUTBEHAVIORDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":36,"name":"ZOUTPUTCLASSESDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":37,"name":"ZLASTSYNCEDENCRYPTEDSCHEMAVERSION","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":38,"name":"ZWANTEDENCRYPTEDSCHEMAVERSION","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":39,"name":"ZDISABLEDONLOCKSCREEN","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":40,"name":"ZREMOTEQUARANTINEHASH","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":41,"name":"ZSHOULDAUTOUPDATEASSOCIATEDAPPBUNDLEIDENTIFIER","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":42,"name":"ZHIDDENFROMLIBRARYANDSYNC","type":"INTEGER","notnull":0,"dflt value":null,"pk":0} shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZSHORTCUTACTIONS' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZSHORTCUT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0} shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZSHORTCUTBOOKMARK' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZPATH","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":5,"name":"ZBOOKMARKDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0} shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "PRAGMA table info 'ZTRIGGER' ;" {"cid":0,"name":"Z PK","type":"INTEGER","notnull":0,"dflt value":null,"pk":1}, {"cid":1,"name":"Z ENT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":2,"name":"Z OPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":3,"name":"ZENABLED","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":4,"name":"ZNOTIFICATIONLEVEL","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":5,"name":"ZSHOULDNOTIFY","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":6,"name":"ZSHOULDPROMPT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":7,"name":"ZSOURCE","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":8,"name":"ZRUNEVENTS","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":9,"name":"ZSHORTCUT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":10,"name":"ZIDENTIFIER","type":"VARCHAR","notnull":0,"dflt value":null,"pk":0}, {"cid":11,"name":"ZDATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0}, {"cid":12,"name":"ZEDITABLESHORTCUT","type":"INTEGER","notnull":0,"dflt value":null,"pk":0}, {"cid":13,"name":"ZSELECTEDENTRYMETADATA","type":"BLOB","notnull":0,"dflt value":null,"pk":0} This shows a few of the relevant'ish looking human readable columns: shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite "SELECT Z PK, ZNAME, ZWORKFLOWSUBTITLE, ZACTIONCOUNT, ZTRIGGERCOUNT, ZACTIONS, ZSOURCE, ZWORKFLOWID FROM ZSHORTCUT;" // ..snip.. { "Z PK": 15, "ZNAME": "Sleep 20min ", "ZWORKFLOWSUBTITLE": "5 actions", "ZACTIONCOUNT": 5, "ZTRIGGERCOUNT": 0, "ZACTIONS": 15, "ZSOURCE": null, "ZWORKFLOWID": "66DF3D2D-0FCF-471E-84D2-597A501648D4" }, // ..snip.. This is similar to above, but will also JOIN with ZSHORTCUTACTIONS to link the ZDATA field as well which appears to be a bplist : shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite " SELECT ZSHORTCUT.Z PK, ZSHORTCUT.ZNAME, ZSHORTCUT.ZWORKFLOWSUBTITLE, ZSHORTCUT.ZACTIONCOUNT, ZSHORTCUT.ZTRIGGERCOUNT, ZSHORTCUT.ZACTIONS, ZSHORTCUT.ZSOURCE, ZSHORTCUT.ZWORKFLOWID, ZSHORTCUTACTIONS.ZDATA FROM ZSHORTCUT LEFT JOIN ZSHORTCUTACTIONS ON ZSHORTCUT.ZACTIONS = ZSHORTCUTACTIONS.Z PK;" This is similar to above, but will also attempt to parse the ZDATA bplist with python's plistlib : shell ⇒ sqlite3 -readonly -json ~/Library/Shortcuts/Shortcuts.sqlite " SELECT ZSHORTCUT.Z PK, ZSHORTCUT.ZNAME, ZSHORTCUT.ZWORKFLOWSUBTITLE, ZSHORTCUT.ZACTIONCOUNT, ZSHORTCUT.ZTRIGGERCOUNT, ZSHORTCUT.ZACTIONS, ZSHORTCUT.ZSOURCE, ZSHORTCUT.ZWORKFLOWID, hex ZSHORTCUTACTIONS.ZDATA AS ZDATA HEX FROM ZSHORTCUT LEFT JOIN ZSHORTCUTACTIONS ON ZSHORTCUT.ZACTIONS = ZSHORTCUTACTIONS.Z PK;" | python3 -c " import sys, json, plistlib, binascii Custom JSON encoder for unsupported types class CustomJSONEncoder json.JSONEncoder : def default self, obj : if isinstance obj, bytes : return obj.hex Convert bytes to a hexadecimal string return super .default obj Load JSON from stdin data = json.load sys.stdin Decode ZDATA HEX for row in data: if row.get 'ZDATA HEX' : try: Convert hex to bytes row 'ZDATA' = plistlib.loads binascii.unhexlify row 'ZDATA HEX' del row 'ZDATA HEX' Remove the hex version except Exception as e: row 'ZDATA' = f'Decoding Error: {e}' Print the modified JSON print json.dumps data, indent=2, cls=CustomJSONEncoder " Which results in output like this: json5 // ..snip { "Z PK": 15, "ZNAME": "Sleep 20min ", "ZWORKFLOWSUBTITLE": "5 actions", "ZACTIONCOUNT": 5, "ZTRIGGERCOUNT": 0, "ZACTIONS": 15, "ZSOURCE": null, "ZWORKFLOWID": "66DF3D2D-0FCF-471E-84D2-597A501648D4", "ZDATA": { "WFWorkflowActionIdentifier": "is.workflow.actions.number", "WFWorkflowActionParameters": { "UUID": "4A620A3D-E6A4-48AA-8191-A5A29F77B327", "WFNumberActionNumber": 1200.0 } }, { "WFWorkflowActionIdentifier": "is.workflow.actions.delay", "WFWorkflowActionParameters": { "WFDelayTime": { "Value": { "OutputUUID": "4A620A3D-E6A4-48AA-8191-A5A29F77B327", "Type": "ActionOutput", "OutputName": "Number" }, "WFSerializationType": "WFTextTokenAttachment" } } }, { "WFWorkflowActionIdentifier": "is.workflow.actions.pausemusic", "WFWorkflowActionParameters": {} }, { "WFWorkflowActionIdentifier": "is.workflow.actions.airplanemode.set", "WFWorkflowActionParameters": {} }, { "WFWorkflowActionIdentifier": "is.workflow.actions.timer.start", "WFWorkflowActionParameters": {} } }, // ..snip 2. Shortcut Files Individual shortcuts are also stored as serialized plist property list files in the directory: plaintext ~/Library/Shortcuts/Shortcuts Each shortcut has a unique identifier, and its details are saved in .shortcut files. These files are a binary or XML representation of the shortcut's workflow. On macOS 14.5, that directory doesn't seem to exist, but if we go up one directory, these are the files I can see in that folder: shell ⇒ ls -l ~/Library/Shortcuts SecuredPreferences.plist ShareSheetState.plist Shortcuts.sqlite Shortcuts.sqlite-shm Shortcuts.sqlite-wal Spotlight.dat Temporary/ ssh/ shell ⇒ ls -l ~/Library/Shortcuts/Temporary com.apple.WorkflowKit.BackgroundShortcutRunner/ com.apple.WorkflowUI.CatalystContentExtension/ com.apple.shortcuts/ com.apple.shortcuts.Run-Workflow/ com.apple.shortcuts.ThumbnailExtension/ com.apple.shortcuts.events/ com.apple.siriactionsd/ That said, based on the exploration of the sqlite DB earlier.. it looks like we can get the shortcut actions from the ZSHORTCUT / ZSHORTCUTACTIONS tables. 3. iCloud Sync If iCloud syncing is enabled, shortcuts may also be stored in the iCloud directory: plaintext ~/Library/Mobile Documents/iCloud~is~workflow/Shortcuts This allows synchronization across Apple devices, and the format mirrors the local storage with plist files and associated metadata. On macOS 14.5, that folder doesn't seem to exist, but these ones did though they seem to be empty? : shell ⇒ ls -la ~/Library/Mobile\ Documents | grep -E 'workflow|shortcut' iCloud~com~apple~shortcuts~runtime/ iCloud~is~workflow~my~workflows/ shell ⇒ fd . ~/Library/Mobile\ Documents/iCloud\~com\~apple\~shortcuts\~runtime /Users/devalias/Library/Mobile Documents/iCloud~com~apple~shortcuts~runtime/Documents/ shell ⇒ fd . ~/Library/Mobile\ Documents/iCloud\~is\~workflow\~my\~workflows /Users/devalias/Library/Mobile Documents/iCloud~is~workflow~my~workflows/Documents/ 4. Auxiliary Files Additional metadata, such as user preferences and categories, is often stored in other plist files in: plaintext ~/Library/Preferences/com.apple.shortcuts.plist On macOS 14.5, this file seems to exist, but it doesn't look super interesting: shell ⇒ plutil -convert xml1 -o - ~/Library/Preferences/com.apple.shortcuts.plist xml