{"id":2243,"date":"2026-10-22T17:42:13","date_gmt":"2026-10-22T15:42:13","guid":{"rendered":"https:\/\/cln.io\/blog\/?p=2243"},"modified":"2026-10-22T17:44:20","modified_gmt":"2026-10-22T15:44:20","slug":"1password-7-10-4-killed-the-classic-extension-get-7-9-11-back","status":"publish","type":"post","link":"https:\/\/cln.io\/blog\/1password-7-10-4-killed-the-classic-extension-get-7-9-11-back\/","title":{"rendered":"1Password 7.10.4 killed the classic extension (OPX removed) \u2013 get 7.9.11 back"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">My 1Password classic extension in Brave just stopped working. First guess: Brave\/Chromium finally pulled the plug on Manifest V2 extensions (the classic 1Password extension is MV2 from 2019, <a href=\"https:\/\/cln.io\/blog\/get-the-1password-classic-extension-backup-mirror\/\">see the old post<\/a>). Nope. Brave still loads it just fine. It&#8217;s 1Password itself &#x1f643;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1Password 7 for Mac auto-updated itself to <strong>7.10.4<\/strong> on Oct 6 2026, and that build (and 7.9.12) ship a kill switch for the classic extension. The app side now just hangs up on it:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">1PasswordNativeMessageHost[6379:3527075] 71004002 [EXT_NMH:OPNMXPCConnection.swift] E connect() | Verification failure: [AnyHashable(\"action\"): hangUp, AnyHashable(\"payload\"): {\n    errorCode = 104;\n    reason = \"OPX support has been removed\";\n}]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So this post is the 2026 sequel to the 2023 one: notes on what happened, which version still works, and where to get it (Wayback Machine + IPFS links to the official files, which, as of today, are still up on 1Password&#8217;s own CDN &#x1f937;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On this page<\/p>\n\n\n<nav aria-label=\"Table of Contents\" class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#what-actually-happened\">What actually happened<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#last-working-versions\">Last working versions<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#downgrade-to-7-9-11-on-macos\">Downgrade to 7.9.11 on macOS<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#porting-the-classic-extension-to-manifest-v3\">Porting the classic extension to Manifest V3<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#every-1password-7-build-ever\">Every 1Password 7 build ever<\/a><\/li><\/ol><\/nav>\n\n\n<h2 id=\"what-actually-happened\" class=\"wp-block-heading\">What actually happened<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1Password 7.10.4 for Mac was released 2026-09-29 and the <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">changelog<\/a> says it right there: &#8220;Removes support for the 1Password Classic extension&#8221;. The classic extension talks to the desktop app over a protocol they call OPX, and the native messaging helper in 7.10.4 (and in the unlisted 7.9.12 build) now answers every connection with <code>errorCode 104 \/ OPX support has been removed<\/code> and disconnects. The WebSocket fallback on 127.0.0.1:6263 is gone too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is <strong>not<\/strong> the browser. Brave 1.97 (Chromium 155) still loads the original MV2 extension (<code>aomjjhallfgjeglblehebfpbcfeobpgk<\/code>, v4.7.5.90, last touched 2019) without complaint, I checked by loading it unpacked in a fresh profile. It just can&#8217;t get anything out of the app anymore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can see it straight in the binaries. 7.9.11 only has the &#8220;phase one&#8221; nag dialog, 7.9.12 and 7.10.4 have the actual kill switch:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">H=\"Contents\/Library\/LoginItems\/1Password Extension Helper.app\/Contents\/MacOS\/1Password Extension Helper\"\n\n$ strings -a \"1Password 7.app (7.9.11)\/$H\" | grep -i OPX\nshowOPXDeprecationAlert()\nOPXDeprecationPhaseOneLastCheckKey\nOPXDeprecationPhaseOneSuppressNotificationKey\n\n$ strings -a \"1Password 7.app (7.9.12)\/$H\" | grep -i OPX\nOPX client disconnected\nOPX Client connected\nOPX support has been removed\nshowOPXDeprecationAlert()\nOPXDeprecationPhaseTwoLastCheckKey\nOPXDeprecationPhaseTwoSuppressNotificationKey<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The updater log tells you when it got you (<code>~\/Library\/Logs\/1Password\/com.agilebits.onepassword7-updater.log<\/code>):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Sat Jul 29 14:58:39 2023| ... Extracting '...\/1Password-7.9.11-1690635516.69.zip'\nTue Oct  6 14:00:07 2026| ... Extracting '...\/1Password-7.10.4-1791288006.77.zip'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Three years of nothing, then one update whose headline &#8220;New&#8221; item is removing a feature. sigh.<\/p>\n\n\n\n<h2 id=\"last-working-versions\" class=\"wp-block-heading\">Last working versions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>macOS: 1Password 7.9.11<\/strong> (last build without the kill switch, verified by actually diffing the helper binaries above). Notarized Developer ID, Team ID <code>2BUA8C4S2C<\/code>, <code>spctl<\/code> says accepted.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Official: <a href=\"https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\" rel=\"noopener\">1Password-7.9.11.zip<\/a> \/ <a href=\"https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.pkg\" rel=\"noopener\">1Password-7.9.11.pkg<\/a><\/li>\n\n\n\n<li>Wayback: <a href=\"https:\/\/web.archive.org\/web\/20261022141935\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\" rel=\"noopener\">zip<\/a> \/ <a href=\"https:\/\/web.archive.org\/web\/20261022141942\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.pkg\" rel=\"noopener\">pkg<\/a> (or <a href=\"https:\/\/web.archive.org\/web\/*\/https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11*\" rel=\"noopener\">all snapshots<\/a>)<\/li>\n\n\n\n<li>IPFS: <a href=\"https:\/\/ipfs.io\/ipfs\/bafybeihbvd6f5p5wk7wr4enf4zeie33ahfwm43gxp7yheg6beoauspqf7m?filename=1Password-7.9.11.zip\" rel=\"noopener\">zip<\/a> <code>bafybeihbvd6f5p5wk7wr4enf4zeie33ahfwm43gxp7yheg6beoauspqf7m<\/code> \/ <a href=\"https:\/\/ipfs.io\/ipfs\/bafybeienslllbsr7sfeyqm3ubbyd57pdyx5ijreytveaajtsob4wd6lvuy?filename=1Password-7.9.11.pkg\" rel=\"noopener\">pkg<\/a> <code>bafybeienslllbsr7sfeyqm3ubbyd57pdyx5ijreytveaajtsob4wd6lvuy<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Windows: 1Password 7.9.834<\/strong>, probably. Windows got its kill switch much earlier: <a href=\"https:\/\/www.1password.community\/1password-at-home-31\/1password-for-windows-version-7-9-835-disables-classic-extension-on-firefox-119-0-8550\" rel=\"noopener\">people on the 1Password forum<\/a> reported in Nov 2023 that 7.9.835 made the classic extension stop working in Chrome\/Edge\/Firefox on Windows, and rolling back to 7.9.834 fixed it. I can&#8217;t verify that myself (the Windows setup .exe is a 12MB bootstrapper that downloads the real payload), so ymmv.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Official: <a href=\"https:\/\/c.1password.com\/dist\/1P\/win6\/1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a><\/li>\n\n\n\n<li>Wayback: <a href=\"https:\/\/web.archive.org\/web\/20261022141949\/https:\/\/c.1password.com\/dist\/1P\/win6\/1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a><\/li>\n\n\n\n<li>IPFS: <a href=\"https:\/\/ipfs.io\/ipfs\/bafybeigqcdyktqvtt5tsokf5idavw7fc6l667p7neiefondmhuyfw24ayy?filename=1PasswordSetup-7.9.834.exe\" rel=\"noopener\">1PasswordSetup-7.9.834.exe<\/a> <code>bafybeigqcdyktqvtt5tsokf5idavw7fc6l667p7neiefondmhuyfw24ayy<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Checksums, so you can tell if whatever you downloaded is the real thing:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># sha256\n11b14910a2cf0e544e317e49f4a62491e5190545ed684236a295f51d722f30db  1Password-7.9.11.zip\nbf1919f5f4066feb7cb9013396e2f181a6fa36c56f5ca2ebac211191925132b8  1Password-7.9.11.pkg\n7b578e42ced2e8a36855dd0984668622a508ad82eb33257dc9b8f1eb586bdd77  1PasswordSetup-7.9.834.exe\n3d43ea28c46a1dac9cc645c5d9f4692cd1be009145ffe5260a910a2d9c89dd52  1PasswordSetup-7.9.835.exe\n840e237adf8bc5d429c69467d9afc0407114310faac3af06b80faab72c342fda  1PasswordSetup-7.9.836.exe\n\n# IPFS CIDs (cidv1, default chunker)\nbafybeihbvd6f5p5wk7wr4enf4zeie33ahfwm43gxp7yheg6beoauspqf7m  1Password-7.9.11.zip\nbafybeienslllbsr7sfeyqm3ubbyd57pdyx5ijreytveaajtsob4wd6lvuy  1Password-7.9.11.pkg\nbafybeigqcdyktqvtt5tsokf5idavw7fc6l667p7neiefondmhuyfw24ayy  1PasswordSetup-7.9.834.exe\nbafybeibc4ulkrxxegs5m23pka6ogbiivdbi5sinhgbifoddczhm5taqaci  1PasswordSetup-7.9.835.exe\nbafybeib5elgzegrb4sqlb3a4basivmw4nsqtwrqxbstivs4uz2v7jklavq  1PasswordSetup-7.9.836.exe<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># grab it over ipfs instead of a gateway\nipfs get bafybeihbvd6f5p5wk7wr4enf4zeie33ahfwm43gxp7yheg6beoauspqf7m -o 1Password-7.9.11.zip\nshasum -a 256 1Password-7.9.11.zip<\/pre>\n\n\n\n<h2 id=\"downgrade-to-7-9-11-on-macos\" class=\"wp-block-heading\">Downgrade to 7.9.11 on macOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your vaults live in <code>~\/Library\/Group Containers\/2BUA8C4S2C.com.agilebits\/<\/code>, not in the app bundle, so swapping the .app is safe. Still, make a backup\/export first, obviously.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># 1. quit 1Password 7 completely (menu bar icon too)\nosascript -e 'quit app \"1Password 7\"'\npkill -f \"1Password Extension Helper\"\n\n# 2. get + verify\ncurl -LO https:\/\/c.1password.com\/dist\/1P\/mac7\/1Password-7.9.11.zip\nshasum -a 256 1Password-7.9.11.zip    # 11b14910a2cf...\nditto -x -k 1Password-7.9.11.zip .\/op7911\nspctl -a -vv \".\/op7911\/1Password 7.app\"   # source=Notarized Developer ID, AgileBits Inc. (2BUA8C4S2C)\n\n# 3. swap\nmv \"\/Applications\/1Password 7.app\" ~\/Desktop\/1Password-7.10.4-backup.app\nmv \".\/op7911\/1Password 7.app\" \/Applications\/\nopen -a \"1Password 7\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then <strong>turn off automatic updates<\/strong> in 1Password 7 \u2192 Preferences \u2192 Updates, or it&#8217;ll just do it again. It&#8217;ll still show the &#8220;1Password Classic will stop working soon&#8221; alert now and then (that&#8217;s the &#8220;phase one&#8221; thing), harmless.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Obligatory: this is an unsupported, end-of-life password manager now. No more security fixes. I&#8217;m ok with that for my air-gapped stuff, you decide for yourself &#x1f605;<\/p>\n\n\n\n<h2 id=\"porting-the-classic-extension-to-manifest-v3\" class=\"wp-block-heading\">Porting the classic extension to Manifest V3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Brave still runs the MV2 extension today, but Chromium has dropped MV2 and that won&#8217;t last forever, so I had Claude port it to MV3 while at it. Turns out it&#8217;s tiny: the content script only uses <code>runtime.sendMessage<\/code>\/<code>onMessage<\/code>, and the background script needs 4 changes. Copy <code>~\/Library\/Application Support\/BraveSoftware\/Brave-Browser\/Default\/Extensions\/aomjjhallfgjeglblehebfpbcfeobpgk\/4.7.5.90_0\/<\/code> somewhere (delete the <code>_metadata<\/code> folder) and:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. manifest.json<\/strong>: bump to v3, background becomes a service worker, <code>browser_action<\/code> \u2192 <code>action<\/code>, host patterns move to <code>host_permissions<\/code>, drop <code>webRequestBlocking<\/code> and <code>update_url<\/code>. Keep the <code>key<\/code> field! That&#8217;s what keeps the extension ID the same so the native messaging host manifest still allows it.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"manifest_version\": 3,\n  \"background\": { \"service_worker\": \"background.js\" },\n  \"action\": { \"default_icon\": { \"19\": \"assets\/toolbar.png\", \"38\": \"assets\/toolbar@2x.png\" }, \"default_title\": \"1Password\" },\n  \"permissions\": [ \"contextMenus\", \"nativeMessaging\", \"storage\", \"tabs\", \"webRequest\" ],\n  \"host_permissions\": [ \"http:\/\/*\/*\", \"https:\/\/*\/*\" ],\n  \"key\": \"...keep the original...\",\n  ...everything else unchanged...\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. background.js<\/strong> (new file), a shim because <code>global.min.js<\/code> expects <code>window<\/code> and <code>chrome.browserAction<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ MV3 service-worker shim for the 1Password classic (4.x) extension.\nself.window = self;\nchrome.browserAction = chrome.action;\nimportScripts('ext\/sjcl.js', 'global.min.js');<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. global.min.js<\/strong>, blocking webRequest redirects are gone in MV3. The <code>onepasswdfill=<\/code> URL handler returned <code>{redirectUrl}<\/code> from a blocking listener; make it a non-blocking listener that calls <code>chrome.tabs.update<\/code> instead:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ before\nreturn h=a.tabId,r.kb({itemUUID:k.uuid,vaultUUID:k.vaultUUID,url:k.url,nakedDomains:null,uuid:t.J(),context:null},a.tabId),{redirectUrl:k.url}},{urls:['*:\/\/*\/*onepasswdfill=*'],types:['main_frame']},['blocking']);\n\/\/ after\nh=a.tabId,r.kb({itemUUID:k.uuid,vaultUUID:k.vaultUUID,url:k.url,nakedDomains:null,uuid:t.J(),context:null},a.tabId),chrome.tabs.update(a.tabId,{url:k.url})},{urls:['*:\/\/*\/*onepasswdfill=*'],types:['main_frame']});<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. global.min.js<\/strong>, context menus in service workers need an <code>id<\/code> and can&#8217;t use <code>onclick<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ before\nchrome.contextMenus.removeAll();chrome.contextMenus.create({title:'1Password',contexts:['all'],onclick:function(a){(a=a.pageUrl)?r.ha('context-menu',a):F(function(a){r.ha('context-menu',\na)})}})\n\/\/ after\nchrome.contextMenus.removeAll(function(){chrome.contextMenus.create({id:'1password',title:'1Password',contexts:['all']})});chrome.contextMenus.onClicked.addListener(function(a){'1password'===a.menuItemId&amp;&amp;((a=a.pageUrl)?r.ha('context-menu',a):F(function(a){r.ha('context-menu',\na)}))})<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On my mac 1Password 7 had only written its native messaging host manifest for Chrome, Edge, Firefox and Arc, not for Brave, so copy it over:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cp \"$HOME\/Library\/Application Support\/Google\/Chrome\/NativeMessagingHosts\/2bua8c4s2c.com.agilebits.1password.json\" \\\n   \"$HOME\/Library\/Application Support\/BraveSoftware\/Brave-Browser\/NativeMessagingHosts\/\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remove the original extension in <code>brave:\/\/extensions<\/code> (same ID, Brave won&#8217;t load both), enable developer mode, &#8220;Load unpacked&#8221;, point it at the folder. Service worker starts, <code>1Password version 4.7.5 loaded<\/code>, connects to the native host\u2026 and 7.10.4 hangs up with error 104. After downgrading to 7.9.11, same extension, same Brave 1.97:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[console.info] 1Password version 4.7.5 loaded @ Thu Oct 22 2026 16:55:40\n[console.info] [CHROME]: Established connection to 1Password: [object NativeMessagingConnection]\n1PasswordNativeMessageHost[21512] 70911000 [EXT_NMH:OPNMXPCConnection.swift] E connect() | Connection Established<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So yes: a 2019 Manifest V2 extension, 4 small patches, runs fine as MV3 on a 2026 Chromium. The only thing that was ever &#8220;broken&#8221; is the app refusing to talk to it &#x1f389;<\/p>\n\n\n\n<h2 id=\"every-1password-7-build-ever\" class=\"wp-block-heading\">Every 1Password 7 build ever<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1Password still has full release histories with download links up, they&#8217;re just not linked from anywhere anymore:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mac 7: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">product_history\/OPM7<\/a> (<a href=\"https:\/\/web.archive.org\/web\/20261022142055\/https:\/\/app-updates.agilebits.com\/product_history\/OPM7\" rel=\"noopener\">wayback<\/a>), 49 builds listed, 103 files on the CDN if you also probe for the .zip variants and the unlisted 7.9.7 \/ 7.9.12<\/li>\n\n\n\n<li>Windows 7: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPW6\" rel=\"noopener\">product_history\/OPW6<\/a> (<a href=\"https:\/\/web.archive.org\/web\/20261022142113\/https:\/\/app-updates.agilebits.com\/product_history\/OPW6\" rel=\"noopener\">wayback<\/a>), 130 builds of 7.x<\/li>\n\n\n\n<li>Classic extension: <a href=\"https:\/\/app-updates.agilebits.com\/product_history\/OPX4\" rel=\"noopener\">product_history\/OPX4<\/a> (download links removed, use the <a href=\"https:\/\/cln.io\/blog\/get-the-1password-classic-extension-backup-mirror\/\">old post<\/a>)<\/li>\n\n\n\n<li>Other product codes that still resolve: OPM3, OPM4, OPM8, OPW4, OPW8, CLI, CLI2, OPB<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Quick and dirty way to pull every link from one of those pages:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -s https:\/\/app-updates.agilebits.com\/product_history\/OPM7 \\\n  | grep -oE 'href=\"[^\"]+\\.(zip|pkg|exe)\"' | sed 's\/^href=\"\/\/;s\/\"$\/\/' | sort -u<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-1 wp-block-paragraph\" style=\"color:#9ca3af;font-size:14px\"><p style=\"color:#9ca3af;font-size:14px\">This post was written with the help of Claude (Fable 5.1), Anthropic&#8217;s AI assistant, which also did the binary spelunking and the MV3 port.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My 1Password classic extension in Brave just stopped working. First guess: Brave\/Chromium finally pulled the plug on Manifest V2 extensions (the classic 1Password extension is MV2 from 2019, see the old post). Nope. Brave still [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2252,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,58],"tags":[],"class_list":["post-2243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it","category-miscellaneous"],"_links":{"self":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/comments?post=2243"}],"version-history":[{"count":7,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243\/revisions"}],"predecessor-version":[{"id":2251,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/posts\/2243\/revisions\/2251"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/media\/2252"}],"wp:attachment":[{"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/media?parent=2243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/categories?post=2243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cln.io\/blog\/wp-json\/wp\/v2\/tags?post=2243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}