Skip to content
cccskills
FreePublished on GitHub

chrome

Read this when you need Chrome MV3-shaped APIs — bookmarks, tabs, windows, history, downloads, or top sites — in standalone OmOWright.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Chrome MV3 APIs (standalone)

createChromeApi(connection, options?) returns MV3-shaped namespaces backed by CDP and the browser's own profile files — no extension required.

import { createChromeApi } from "omowright";

const chrome = createChromeApi(connection, {
  profilePath: "/path/to/user-data-dir",  // enables bookmarks/history/topSites/downloads.search
  downloadDir: "/path/to/downloads",      // optional, defaults to a temp dir
});

PROFILE-BACKED METHODS THROW UnsupportedOperationError WITHOUT profilePath. A connectPipe browser gets a fresh profile, so bookmarks and history are empty there — these APIs matter when attaching to a real user browser via connect() or reading a real profile directory. Profile reads are read-only and WAL-safe against a running browser.

tabs — CDP Target.getTargets

  • chrome.tabs.query({ url?: string | string[], title?, windowId? }) — url takes MV3 match patterns (*://*.example.com/*), title is a substring match. THESE THREE ARE THE ONLY HONORED FILTERS.
  • chrome.tabs.get(tabId) — tabId is a string; throws when no tab has it.
  • Returns { id, url, title, windowId, active, pinned, audible, discarded, groupId, index }. IDS ARE CDP TARGET-ID STRINGS, NOT MV3 NUMBERS, and the last six fields are fixed defaults — they are not observable over CDP.

Tab lifecycle stays on connection.newTab(url) / page.close(); interaction on page.goto() / page.locator().

windows — CDP Browser.getWindowForTarget

get(windowId, queryOptions?), getCurrent(queryOptions?), getLastFocused(queryOptions?), getAll(queryOptions?).

  • queryOptions: { populate?: boolean } — populate: true adds a tabs array.
  • Returns { id, focused, type, state, alwaysOnTop, incognito, tabs? }.
  • Headless sessions have exactly one window; getCurrent/getLastFocused return the first.

bookmarks — profile Bookmarks JSON, read-only

get(idOrIdList), getChildren(id), getRecent(numberOfItems), getSubTree(id), getTree(), search(query) where query is a string or { query?, url?, title? }.

Nodes: { id, title, type: "url" | "folder", url?, dateAdded?, children? }.

history — profile History SQLite, read-only

  • search({ text, startTime?, endTime?, maxResults? }) — times are Unix ms. Returns [{ id, url, title, visitCount, lastVisitTime }], newest first.
  • getVisits({ url }) — returns [{ id, url, visitTime, transition }].

downloads — History SQLite + Browser.setDownloadBehavior

  • search({ url?, filename?, limit? }) — returns [{ id, url, filename, startTime, bytesReceived, totalBytes, state }]; state is complete | canceled | interrupted | in_progress. Needs profilePath.
  • download({ url, filename? }) — downloads through the real browser and resolves { id, url, filename, state: "complete" } with filename as the absolute saved path. 30s timeout; rejects when the URL starts no download. It uses an in-page anchor click rather than Page.navigate, which hangs on download navigations, and re-asserts the download behavior on every call because tab initialization resets it.

topSites — profile Top Sites SQLite

get() returns [{ url, title }] ordered by rank, max 50.

Write methods require the extension bridge

These throw UnsupportedOperationError because they would mutate the user's own browser state: bookmarks.create/update/move/remove/removeTree, history.addUrl/deleteUrl/deleteRange, downloads.pause/resume/cancel/erase, and all of chrome.tabGroups.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Push browser tab and download lifecycle events plus manager-owned background tabs. Read this when an agent needs lifecycle notifications or a temporary tab without polling.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

Interact with challenge widgets in an authorized automation flow using checkbox clicks, slider drags, text OCR, and image-grid input. Verify completion with an application-specific condition.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

Use when a user-driven CloakBrowser profile needs MV3 Chrome writes/events through the native messaging bridge.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

Read the network instead of the DOM. Snoop JSON API responses, wait for a request instead of sleeping, collect items while scrolling, record a QA flight trace (jsonl, HAR, screenshots), and intercept requests with routes.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

The default code-driven browser path for interactive browsing work: drives any browser from code with token-efficient a11y snapshots (57% smaller via compactSnapshot), ref-based clicks, coordinate control (CUA), viewport pinning, CAPTCHA solving (reCAPTCHA, Turnstile, hCaptcha, slider, OCR), Chrome MV3 APIs (tabs/bookmarks/history/downloads/topSites), network snoop (read API JSON instead of DOM), flight-recorder trace (jsonl + HAR + screenshots), OOPIF-aware snapshots, dialog policy, human handoff for login/OTP, device emulation, request routes, stealth via CloakBrowser as the default owned engine with zero exposed CDP ports, and an attached engine that drives the user's own signed-in browser through BrowserSkill (connectBrowserSkill, bskSnapshot, one-click onboarding via bskOnboard). MUST USE for interactive browser work: scraping, blocked/WAF/JS-rendered pages, logins, the user's logged-in sites and open tabs, extension popups, form filling, screenshots, web QA, CAPTCHAs. The ulw-research browsing lane runs on ultimate-browsing, not this skill.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

Coordinate-level browser control for UI that snapshots, refs, and locators cannot target - canvas apps, extension popups, OS-drawn dialogs, custom drag surfaces. Read this when a DOM-targeted action fails twice, when the next decision depends on rendered pixels, or when CUA clicks land on the wrong element.

The English summary is being prepared. Showing the original description.

code-yeongyu/omowright5Updated Oct 16, 2026

See all skills by code-yeongyu

Report a problem with this skill