본문으로 건너뛰기
cccskills
무료GitHub에 공개

external-site-profile-learning

Use this skill when investigating, adding, validating, or debugging external website profiles for the 99idea Playwright browser demo. It teaches how to probe selectors, classify failure modes, add config-driven profiles, and validate both heuristic and Gemini flows.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구PlaywrightGemini
설치 방법 보기

포함된 파일(1)

  • SKILL.md8.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

External site profile learning skill

Use this skill when working on the target Playwright browser project (for example, the 99idea demo project).

This project is a Playwright-based browser demo that supports config-driven external site profiles through:

  • scenarios\site-profiles.json
  • src\site-profiles.js
  • src\planner.js
  • src\llm-planner.js
  • src\run-demo.js

What this skill is for

Use this skill when the task involves any of the following:

  • adding a new external site profile
  • debugging why an external site passes heuristics but fails with Gemini
  • turning a random website experiment into a stable config-driven profile
  • identifying whether a site is suitable for the default regression matrix
  • distinguishing selector problems from login, anti-bot, or hidden-UI problems

Core rules

  1. Prefer URL or title verification for external sites whenever possible.
  2. Prefer stable, unique selectors over generic selectors like button or [name="q"].
  3. If a site profile exists, the final plan should use the profile's exact searchInputSelector and submitSelector.
  4. Keep GitHub out of the default regression matrix. It works, but repeated probing can trigger rate limits.
  5. Classify the site's execution tier before writing a browser profile:
    • If opencli already supports the site, prefer an opencli-based workflow over a selector-based profile
    • If the site has a public API, prefer fetch over browser automation
    • Only write a browser profile when no higher-tier execution path exists
  6. Treat these as different failure classes:
    • selector ambiguity
    • hidden or disabled controls
    • opener-required search UI
    • SPA shell (no usable DOM without full JS rendering)
    • login gates
    • anti-bot / rate-limit behavior
    • heavy pages that stall on load

Dual-engine awareness (inspired by opencli)

When stabilizing a site, consider whether the profile should be:

  • Data-only (YAML-like): selector + verification config in JSON — for traditional DOM-based sites
  • Runtime-aware: includes execution path recommendation (opencli / fetch / browser) — for modern platforms

A good profile should record not just how to interact with the UI, but also what the best execution path is.

Standard workflow

1. Probe the site

Open the homepage in Playwright and inspect:

  • search inputs
  • submit buttons
  • search opener buttons or icons
  • whether inputs are visible, enabled, and editable
  • whether there are duplicate controls in headers, footers, drawers, or overlays

Record:

  • selector candidates
  • whether search is immediately usable
  • whether search is hidden/disabled until another action happens
  • whether the site supports a deterministic URL check after search

2. Classify the site

Use this decision process:

  • If a visible input and a stable submit control exist, the site is a good normal profile candidate.
  • If the site requires an opener interaction but still fits the current action model, prefer a more specific selector strategy or a special-case scenario.
  • If the site requires behavior beyond the current action model, mark it blocked or incomplete rather than forcing a brittle profile.
  • If the site is gated by login or aggressively rate-limited, do not add it to the default regression matrix.

3. Add the profile

When the site is a good fit, add a data-only profile to scenarios\site-profiles.json with:

  • name
  • hostnames
  • searchInputSelector
  • submitSelector
  • verificationMode
  • expectedUrlTemplate when URL verification is available
  • executionTier — recommended execution path: opencli, fetch, or browser
  • opencliCommand — if opencli supports it, the exact command template
  • authLevel — PUBLIC, COOKIE, HEADER, or LOGIN-GATED

Keep the behavior in code and the site data in JSON.

Recommended profile-writing rules:

  • use exact selectors, not broad selectors that only happen to work once
  • qualify selectors with a container when header and footer controls are duplicated
  • prefer verificationMode: "url" when the site has a deterministic query string
  • prefer verificationMode: "title" when the search result page has a stable title change
  • do not force opener-only or login-gated flows into a normal default profile

4. Validate both planning modes

Validate in this order:

  1. Heuristic run
  2. Gemini / LLM run

Use commands like:

npm run validate:external:core
npm run validate:external:popup
npm run validate:external:heavy
npm run validate:external
npm run validate:external:llm:core
npm run validate:external:llm:popup
npm run validate:external:llm:heavy
npm run validate:external:llm
node src\run-demo.js --allow-external --url "https://example.com/" --goal "Search Example for AI and verify that the URL includes q=AI."
node src\run-demo.js --scenario <temp-scenario.json> --planner llm

Before Gemini validation, ensure:

  • GEMINI_API_KEY is available
  • BROWSER_USE_LLM_PROVIDER=gemini

If the site hangs on full load, use a temporary scenario with:

  • waitUntil: "domcontentloaded"
  • postNavigationLoadState: "domcontentloaded"

5. Record the failure mode if it does not fit

Use these interpretations:

  • strict mode violation / multiple matches
    The selector is too broad. Add a stronger container-qualified selector.

  • timeout waiting for visible or editable
    The control is hidden, disabled, off-screen, or not opened yet.

  • type succeeds but Enter does not navigate
    The site likely needs a specific submit control instead of Enter.

  • works only with a special opener path
    Consider a special scenario instead of a default profile.

  • rate limit / anti-bot / login gate
    Do not force it into the stable regression matrix.

Known good profiles

These are already proven patterns in this project:

Wikipedia

  • input: #searchInput
  • submit: #search-form button[type="submit"]
  • verification: title

Python.org

  • input: #id-search-field
  • submit: #submit
  • verification: URL contains q={searchTerm}

arXiv

  • input: form.mini-search input[name="query"]
  • submit: form.mini-search button
  • verification: URL contains query={searchTerm}

YouTube

  • input: input[name="search_query"]
  • submit: button.ytSearchboxComponentSearchButton
  • verification: URL contains search_query={searchTerm}

CNN

  • input: #pageFooter input[name="q"]
  • submit: #pageFooter button.search-bar__submit
  • verification: URL contains q={searchTerm}
  • runtime hint: prefer domcontentloaded because the homepage may stall on full load

Bilibili

  • input: #nav-searchform input.nav-search-input
  • submit: #nav-searchform .nav-search-btn
  • verification: URL contains keyword={searchTerm}
  • runtime hint: the search flow opens a popup / new tab, so popup following must remain enabled in the runner

Special case

GitHub

GitHub works through the search palette, but repeated probing can trigger secondary rate limits.

Recommended pattern:

  1. click button[aria-label="Search or jump to…"]
  2. type into #query-builder-test
  3. press Enter
  4. verify URL contains q={searchTerm}

Do not treat GitHub as a normal default regression target.

Blocked or incomplete sites

BBC

  • current state: blocked
  • reason: the discovered input is hidden and disabled until additional UI state changes occur

Tencent News

  • current state: blocked
  • reason: the homepage shows a search button but no directly usable search input in the default state

Zhihu

  • current state: blocked
  • reason: homepage flow goes through sign-in, so anonymous search is not a clean default regression target

Implementation notes for future agents

  • When a profile exists, normalize LLM-generated type and click steps back to the exact profile selectors.
  • If a site has duplicate header/footer search controls, prefer container-qualified selectors.
  • If an external site is flaky under full page load, fix the runtime first before assuming the selectors are wrong.
  • Keep default validation conservative. A smaller stable matrix is better than a noisy one.
  • Use grouped validation runs to isolate profile regressions by class: core, popup, and heavy.
  • For each validation report, include concrete evidence (URL/title signal, selector used, and whether popup switching occurred).

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

<What it does, one line>. Trigger phrases: <phrases>.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

Use this skill whenever the user wants to create or improve a presentation for an academic context — conference papers, seminar talks, thesis defenses, grant briefings, lab meetings, invited lectures, or any presentation where the audience will evaluate reasoning and evidence. Triggers include: 'conference talk', 'seminar slides', 'thesis defense', 'research presentation', 'academic deck', 'academic presentation'. Also triggers when the user asks to 'make slides' in combination with academic content (e.g., 'make slides for my paper on X', 'create a presentation for my dissertation defense', 'build a deck for my grant proposal'). This skill governs CONTENT and STRUCTURE decisions. For the technical work of creating or editing the .pptx file itself, also read the pptx SKILL.md.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

adapt

무료

Shortest English alias for web-adapt / universal-web-adaptation. Use this when adapting an unfamiliar public website generically before creating any site-specific rules.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

Use this skill to audit CLI adapter projects (like opencli) for missing output fields, then batch-generate fixes and submit PRs. Turns AI agents into adapter quality reviewers.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

ads

무료

Operate professional paid advertising across Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, Apple, Amazon, Reddit, Pinterest, Snapchat, and X. Use for account intake, source-grounded audits, strategy, budget and measurement planning, creative production, experiments, reporting, monitoring, and explicitly approved campaign changes. Also trigger on PPC, paid social, retail media, attribution, tracking, landing pages, cross-platform conversion totals, negative keywords or search terms, beta-feature scoring, stale platform claims, API-token or credential setup, campaign deletion, and safe Claude Ads installation or uninstall.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

Audit Amazon Ads profiles, regions, Sponsored Products, Sponsored Brands, Sponsored Display, DSP, portfolios, targeting, search terms, retail readiness, creative, budgets, ACOS, TACOS, reporting, and policy. Use for Amazon Ads, sponsored ads, Amazon PPC, ACOS, TACOS, ASIN advertising, Amazon DSP, or retail-media optimization.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

gabrielmoreira/agent-skills-mirror192026년 10월 23일 업데이트

gabrielmoreira의 스킬 모두 보기

이 스킬의 문제 신고