--- id: "dbac36d9-85a0-4ec4-a5cc-f01a0382b96d" name: "Chrome CDP Internal Targets" micro_summary: "Identifies Chrome internal CDP targets returned by list_tabs(), explains why they recur, and advises filtering chrome:// targets from user tabs." status: "resolved" see_also: [] scope: "Chrome internal CDP targets that appear in list_tabs() output. How to identify, filter, and handle them so agents don't mistake Chrome internals for user tabs." warnings: "## Chrome Internal Targets\n\n`list_tabs()` returns **all CDP targets**, not just user tabs. Chrome always exposes internal UI targets that can't be closed and respawn on every launch.\n\n### Omnibox Popups\n\nTwo internal targets are always present:\n\n| Title | URL |\n|-------|-----|\n| Omnibox Popup | `chrome://omnibox-popup.top-chrome/` |\n| Omnibox Popup | `chrome://omnibox-popup.top-chrome/omnibox_popup_aim.html` |" --- ## Chrome Internal Targets `list_tabs()` returns **all CDP targets**, not just user tabs. Chrome always exposes internal UI targets that can't be closed and respawn on every launch. ### Omnibox Popups Two internal targets are always present: | Title | URL | |-------|-----| | Omnibox Popup | `chrome://omnibox-popup.top-chrome/` | | Omnibox Popup | `chrome://omnibox-popup.top-chrome/omnibox_popup_aim.html` | These are Chrome's address bar rendering targets. They: - **Cannot be permanently closed** — `Target.closeTarget` works momentarily but they respawn - **Appear on every Chrome launch** — confirmed by killing and relaunching Chrome - **Are not user tabs** — never interact with them ### Filtering user tabs When using `list_tabs()`, filter out internal targets: ```python tabs = list_tabs() user_tabs = [t for t in tabs if not t['url'].startswith('chrome://')] ``` Or check for `chrome://` URLs to identify Chrome internals. ### Other internal URLs to watch for - `chrome://` — Chrome internal pages - `devtools://` — DevTools internal pages - `chrome-extension://` — Extension pages (may or may not be relevant) ### Rule **Always filter `chrome://` URLs from `list_tabs()` output** before treating results as user tabs. Agents should only interact with `http://` / `https://` / `file://` / `about:` targets.