Environment
- flow-agent version: v2.0.7 (commit
206285a, latest release)
- Chrome version: Google Chrome Stable 152.0.7977.64-152.0.7977.75 (tested both)
- OS: Ubuntu 20.04 (kernel 5.15.0-139-generic), headless X11 display
:0
- Profile paths tested:
/home/rishua/.config/chrome-automation-profile (full of pre-existing extensions)
/home/rishua/.flow-chrome-profile (clean, previously worked in earlier sessions)
- Extension path:
/home/rishua/flow-agent/flow-extension (default install)
Problem
Chrome silently fails to load the unpacked flow-agent extension on Chrome 152.x. The extension entry gets registered in Default/Preferences but the manifest is never parsed (manifest: NONE), no service worker ever starts, and the extension does not appear in the chrome://extensions UI list — even when the user clicks "Load unpacked" and the path is accepted (no error toast).
Reproduction steps
Via --load-extension CLI flag
/opt/google/chrome/chrome --user-data-dir=/home/rishua/.flow-chrome-profile \
--remote-debugging-port=9334 --no-first-run --password-store=basic \
--use-mock-keychain \
--load-extension=/home/rishua/flow-agent/flow-extension \
--disable-extensions-except=/home/rishua/flow-agent/flow-extension \
--no-default-browser-check
Then query http://127.0.0.1:9334/json — no service_worker target appears, only the standard Google Network Speech worker. Inspecting Default/Preferences:
"mgkpdlhappckhnkbgoakaokheflhjlll": {
"path": "/home/rishua/flow-agent/flow-extension",
"manifest": null, // ← THIS IS THE SMOKING GUN
"disable_reasons": [],
"state": 1
}
Via UI Load unpacked
- Open
chrome://extensions
- Toggle Developer mode ON
- Click Load unpacked → select the
flow-agent/flow-extension directory
- Click Open
Result: Chrome displays the toast "extension loaded successfully" but the card does not appear in the list. The same manifest: null state is observed in Preferences. No service worker ever starts, even after opening a labs.google/fx tab (which would normally trigger the content script to inject and wake the SW via onInstalled).
Things I already tried (all failed identically)
--load-extension flag with both fresh and populated Chrome profiles
- Renaming the extension folder to force a new extension ID (
mgkpdlhappckhnkbgoak... → jedmdoolcjlboglgekepkgkcoejdjhid → new ID each time, but same manifest: null result)
- Manually clicking
Load unpacked via the UI
- Setting
extensions.ui.developer_mode: true in Preferences manually
- Disabling all other user-installed extensions (Grammarly, Adblock, Tampermonkey, etc.) in
Preferences
pkill -9 chrome and re-launching Chrome with same flags
- Upgrading Chrome from 152.0.7977.64 → 152.0.7977.75 via apt
Default/Extensions/<id>/ cache directory is never created by Chrome in any of these attempts (it usually appears immediately when a successful unpacked extension is loaded)
- Waiting 30+ seconds for Chrome's 30s
chrome.alarms reconnect loop in background.js to fire
Historical context
I previously ran this same extension successfully with the same flags on a Chrome 147-149 build (around late August 2026, see also #6 PR merge). The exact same folder, manifest.json, and background.js worked back then. The regression is correlated with the Chrome 152.x stable channel — there's no change in flow-agent source between working and broken states on my side.
Diagnosis
- Manifest file itself is valid (UTF-8, JSON-strict parseable, all required MV3 fields present:
manifest_version, name, version, background.service_worker, content_scripts, permissions, host_permissions, declarative_net_request, side_panel, action, icons).
- No
chrome_debug.log error is emitted for the extension — Chrome just doesn't materialize the Default/Extensions/<id>/ cache folder.
creation_flags: 38 (binary 0b100110) in Preferences for the entry — flag 5 (FROM_BOOKMARK?) might be a Chrome 152-specific misclassification of unpacked extensions.
Suggested fix in flow-agent
Add "minimum_chrome_version": "100" (or higher) to flow-extension/manifest.json. Chrome 152 may be silently rejecting unpacked extensions that don't declare a minimum supported version, defaulting to a very old baseline that no longer matches MV3 expectations in the current stable channel. This single-line change would be a low-risk preventive fix — any Chrome 100+ user can still install it, and it signals to Chrome 152 to apply the modern unpacked-extension code path that the previous Chrome 147-149 builds were using implicitly.
Workaround used until this is fixed
Switched to direct CDP-driven browser automation of labs.google/fx/tools/flow UI (no extension required). The agent connects to Chrome's DevTools port, submits prompts via DOM event injection, polls media.getMediaUrlRedirect from the tRPC responses, and downloads results via Network.getCookies + urllib. This works but loses the parallel multi-worker benefit of the extension HTTP bridge.
Let me know if you need me to test a PR or grab additional Chrome logs.
Environment
206285a, latest release):0/home/rishua/.config/chrome-automation-profile(full of pre-existing extensions)/home/rishua/.flow-chrome-profile(clean, previously worked in earlier sessions)/home/rishua/flow-agent/flow-extension(default install)Problem
Chrome silently fails to load the unpacked
flow-agentextension on Chrome 152.x. The extension entry gets registered inDefault/Preferencesbut the manifest is never parsed (manifest: NONE), no service worker ever starts, and the extension does not appear in thechrome://extensionsUI list — even when the user clicks "Load unpacked" and the path is accepted (no error toast).Reproduction steps
Via
--load-extensionCLI flagThen query
http://127.0.0.1:9334/json— noservice_workertarget appears, only the standard Google Network Speech worker. InspectingDefault/Preferences:Via UI
Load unpackedchrome://extensionsflow-agent/flow-extensiondirectoryResult: Chrome displays the toast "extension loaded successfully" but the card does not appear in the list. The same
manifest: nullstate is observed inPreferences. No service worker ever starts, even after opening alabs.google/fxtab (which would normally trigger the content script to inject and wake the SW viaonInstalled).Things I already tried (all failed identically)
--load-extensionflag with both fresh and populated Chrome profilesmgkpdlhappckhnkbgoak...→jedmdoolcjlboglgekepkgkcoejdjhid→ new ID each time, but samemanifest: nullresult)Load unpackedvia the UIextensions.ui.developer_mode: trueinPreferencesmanuallyPreferencespkill -9 chromeand re-launching Chrome with same flagsDefault/Extensions/<id>/cache directory is never created by Chrome in any of these attempts (it usually appears immediately when a successful unpacked extension is loaded)chrome.alarmsreconnect loop inbackground.jsto fireHistorical context
I previously ran this same extension successfully with the same flags on a Chrome 147-149 build (around late August 2026, see also #6 PR merge). The exact same folder,
manifest.json, andbackground.jsworked back then. The regression is correlated with the Chrome 152.x stable channel — there's no change inflow-agentsource between working and broken states on my side.Diagnosis
manifest_version,name,version,background.service_worker,content_scripts,permissions,host_permissions,declarative_net_request,side_panel,action,icons).chrome_debug.logerror is emitted for the extension — Chrome just doesn't materialize theDefault/Extensions/<id>/cache folder.creation_flags: 38(binary0b100110) inPreferencesfor the entry — flag 5 (FROM_BOOKMARK?) might be a Chrome 152-specific misclassification of unpacked extensions.Suggested fix in
flow-agentAdd
"minimum_chrome_version": "100"(or higher) toflow-extension/manifest.json. Chrome 152 may be silently rejecting unpacked extensions that don't declare a minimum supported version, defaulting to a very old baseline that no longer matches MV3 expectations in the current stable channel. This single-line change would be a low-risk preventive fix — any Chrome 100+ user can still install it, and it signals to Chrome 152 to apply the modern unpacked-extension code path that the previous Chrome 147-149 builds were using implicitly.Workaround used until this is fixed
Switched to direct CDP-driven browser automation of
labs.google/fx/tools/flowUI (no extension required). The agent connects to Chrome's DevTools port, submits prompts via DOM event injection, pollsmedia.getMediaUrlRedirectfrom the tRPC responses, and downloads results viaNetwork.getCookies+urllib. This works but loses the parallel multi-worker benefit of the extension HTTP bridge.Let me know if you need me to test a PR or grab additional Chrome logs.