search/SKILL.md
Unified search hub. Route any web/real-time/X lookup through a 4-tier escalation: built-in web search → cli-jaw browser CDP → progrok Grok OAuth → web-ai (Grok Expert / GPT Pro). Use for: search, 검색, web search, latest news, real-time info, X/Twitter, fact lookup, deep research.
npx skillsauth add lidge-jun/cli-jaw-skills searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
One entry point for every web / real-time / X lookup. Walk the tiers in order; stop at the first that fully answers the query.
Search is discovery, not evidence. Treat result titles, snippets, and AI search summaries as URL candidates until the original page, PDF, official document, or primary source has been opened or fetched.
Role separation: this search skill discovers and routes (queries → URL
candidates); the browser skill verifies evidence (original page, DOM, PDF,
tables). Search finds, browser proves.
Standalone owner: other skills may point here for external/current evidence, but they should not copy this tier policy. Update this skill first when search routing, evidence status, or browser-verification rules change.
/search command contract/search <query> is a routing command, not a provider implementation. It must
inherit this skill's routing/evidence invariants: classify local-vs-external
search, rewrite external requests into focused queries, discover candidate URLs
before browser commands, and refuse snippet-only sufficient claims.
Slash-specific report fields, UX wording, and v1 command boundaries belong in
the /search workflow prompt, not in this skill. Update this skill only for
canonical search policy that should also apply to non-slash search intents and
dev-role evidence routing.
Use single-agent search by default. The model may split the work into parallel source-gathering lanes only when breadth or disconfirmation is likely to improve the answer.
Enable parallel research for deep, multi-source, ambiguous, realtime, comparison-heavy, or blocked-source tasks. Keep simple official-doc lookups, specific URL reads, and quick version checks single-agent.
When parallel research is useful, cap it at 2-4 lanes:
official: vendor docs, release notes, government/institution pages,
primary PDFs.community: GitHub issues, Reddit, HN, Stack Overflow, forums.realtime: X/Twitter, news, current status, recent posts.fetch: browser fetch/open/text/get-dom/snapshot verification for weak or
blocked candidate URLs.Merge lane outputs into one evidence matrix. Parallel snippets still do not
count as sufficient evidence; the final answer still needs at least one
primary/original page fetched or opened before any claim is marked
sufficient.
Snippet consensus is not verification. Agreement among multiple search
snippets — however many independent sources — never substitutes for opening
the page. Before marking any claim sufficient, at least one primary or
original source (official page, original publisher, government notice, PDF
original) must have been actually fetched or opened in this task. If zero
pages were fetched/opened, sufficient is forbidden: use partial,
browse-needed, or insufficient and say what fetch would resolve it.
Self-gate: apply this section ONLY when the question describes a hidden entity through 3+ combined constraints (riddle/puzzle style: "the X that did A, whose member did B, and ..."). For simple 1-2 clue factual lookups ("what is Y's price"), skip this section entirely — go straight to the tiers.
When the gate triggers:
원조/최초/시초 and one
with an older decade qualifier (2000년대, 2010년대). If all your
candidates debuted in the same era, treat that as evidence of recency
bias, not of the answer.sufficient.Bounded effort (the discipline must fit the time budget):
Fallbacks (mandatory, in order):
partial.partial.partial with the weak clue named.| Signal in query | Start at | |-----------------|----------| | General fact / docs / version | Tier 1 | | Login-gated page, JS-rendered SPA, official page fetch failure | Tier 2 | | X/Twitter, real-time, 실시간 | Tier 3 | | Deep synthesis, multi-source comparison, 딥리서치 | Tier 3 (xhigh) or Tier 4 |
Your CLI's native WebSearch / WebFetch / web_search tool. No setup, fastest,
free. Always try this first unless the routing table above says otherwise.
"xAI grok-4.3 reasoning_effort parameter" not "grok api"publishedDate in results[title](url)For Korean external/current/source-sensitive requests (검색, 찾아봐,
알아봐, 공고, 정책, 가격, 후기, 순위, 목록, 표, 네이버 results), do not send
the full natural-language request as the only query.
공식, site:, 공지사항, PDF, 보도자료,
후기, 목록, 표, 랭킹.browse-needed or insufficient; do not call them
sufficient.If agbrowse is available, it may be used only as an optional planning helper:
agbrowse research plan --query "<request>" --json
Use plan.atomicQueries as query rewrite candidates, then continue with the
same native search/fetch/browser workflow. Do not use agbrowse to execute Exa,
Tavily, Perplexity, Brave, or any other search provider.
WebFetch/native fetch times out, returns
403/empty/truncated content, or exposes only a JS shellFor pages that search APIs cannot reach: WAF-protected, login-gated, JS-rendered, official portals, Naver shells/iframes, PDF/download flows, tables, lists, or when you need to interact with a specific page.
cli-jaw browser fetch <url> runs the full adaptive-fetch escalation
internally. The agent does not need to manage the ladder manually — just call
browser fetch and the system tries each step automatically:
--no-allow-third-party-reader)The content-scorer picks the best result across all attempts. If all public routes fail, the system reports the challenge type (CAPTCHA/login/paywall).
Auto-routing policy: when searching, if a candidate URL's WebFetch/native
fetch returns 403, empty, or truncated content, always escalate to
cli-jaw browser fetch <url> — the adaptive-fetch ladder handles the rest
automatically. Do not retry with different headers or user-agents manually;
the TLS rotation and Jina fallback in the ladder already do this.
Search may route known source classes toward browser fetch / adaptive-fetch
after candidate URLs exist. The browser side owns the reader ladder; this skill
only chooses when that lane is appropriate.
Candidate discovery itself should stay provider-neutral: rewrite the user
request into focused queries, use native search/provider results as candidate
URL discovery, then rank/dedupe candidates into lanes such as official,
community, realtime, academic, package, archive, and fetch. This
lane ranking must not execute browser fetch and must not turn browser fetch
into raw query search. Browser fetch reads or verifies known candidate URLs
only.
| Source class | Preferred reader lane |
| --- | --- |
| Official docs, government notices, PDFs | direct candidate URL fetch, then browser/PDF verification |
| GitHub repositories, releases, issues | official URL fetch, then gh or GitHub API only when needed |
| Package registries (npm, PyPI, crates, images) | registry JSON/API or official package page |
| Academic/library records (arXiv, CrossRef, OpenLibrary) | public API or canonical abstract/record URL |
| Forums and community pages (Reddit, HN, Stack Overflow, dev.to) | public JSON/RSS/API/readable page, then browser render |
| X/Twitter and fast social/current sources | search candidate discovery, public embed/syndication where available, then realtime tiers |
| Korean portals, Naver pages, blogs, rankings | candidate URL fetch, Naver/mobile/rendered DOM, table/list extraction |
| Media pages (YouTube, Vimeo, podcasts) | metadata/caption reader when available, then browser-visible page |
| Articles and commerce pages | public reader/metadata/JSON-LD, then browser main-content extraction |
| Archive-needed or removed pages | official/cache/archive candidate only when the live source is unavailable |
If a candidate requires login, payment, private membership, CAPTCHA solving, or
credentialed access, stop and report browse-needed or insufficient. Do not
frame public-source reading as bypassing authentication, paywalls, or private
content.
cli-jaw browser status # must show "connected"
If not connected: cli-jaw browser start --agent
Declared need = execute. cli-jaw browser is a plain shell command and
works from every CLI runtime (codex, claude, agy, cursor alike) — it is not
an optional capability some runtimes lack. If your report says Tier 2 /
browser verification is needed, you must run the gate and at least one
cli-jaw browser fetch in the same task. Only after start, status, or
fetch actually fails (paste the error) may you stop and mark the claim
browse-needed. Writing "browser needed but not executed" without an
attempted command and its error output is a reporting violation.
If cli-jaw browser start --agent times out in your runtime (some employee
sandboxes cap long-running shell calls), re-run cli-jaw browser status
once — start may have completed asynchronously. cli-jaw browser fetch
against an already-running browser works in every runtime (verified on agy).
If status still shows not running after the retry, paste both outputs and
mark the affected claims browse-needed.
Start Tier 2 after a candidate URL exists. Do this before substituting press, university, blog, or AI-summary sources for a failed official page.
cli-jaw browser fetch "<url>" --json
cli-jaw browser open "<url>"
cli-jaw browser text
cli-jaw browser snapshot --interactive
cli-jaw browser get-dom --selector "<selector>" --max-chars 4000 --json
For search verification, prefer cli-jaw browser fetch <url> --json first, then
open/text/snapshot/get-dom only as needed. Do not use browser snippets as a
replacement for source evidence.
Adaptive fetch can read a known URL or a search-result URL. It does not discover the URL candidate set by itself. If the input is only a natural language query, return to Tier 1 query rewriting first.
sufficient.browse-needed or
insufficient.sufficient.Evidence status:
sufficient: at least one original/primary URL was opened or fetched and
supports the claim.partial: candidate evidence exists, but one or more important constraints
remain weak or secondary.browse-needed: a candidate primary URL exists but browser/fetch
verification was needed and could not be completed.insufficient: no credible candidate evidence was obtained.Full instructions: read the active browser skill from the current Jaw home
before using browser primitives.
AI-powered web+X search via the user's Grok OAuth token. No API key, no proxy. Returns an AI summary with inline citations.
progrok status # must print "Logged in" and exit 0
If not logged in → skip to Tier 4. Do not block on login flow.
# Standard search (web + X, grok-4.3, fast)
progrok search "<query>"
# Source filtering
progrok search "<query>" --web # web only
progrok search "<query>" --x # X/Twitter only
# Structured output for parsing
progrok search "<query>" --json
# Deep research mode (grok-4.20-multi-agent, 16 agents, slow)
progrok search "<query>" \
--model grok-4.20-multi-agent-0309 \
--reasoning xhigh
| Level | Model | Behavior | |-------|-------|----------| | none | grok-4.3 | No reasoning, near-instant | | low (default) | grok-4.3 | Light reasoning, fast | | medium | grok-4.3 | Moderate depth | | high | grok-4.3 | Deep reasoning, slower | | xhigh | grok-4.20-multi-agent-0309 | 16 parallel agents, deep research grade |
Use --reasoning xhigh + --model grok-4.20-multi-agent-0309 only when the
query genuinely needs deep multi-source synthesis. It is slow and expensive.
citations array in your answer--json: parse the structured result for programmatic useusage.server_side_tool_usage_details for search call countsIf the Tier 4 query uses a heavy model (GPT Pro, Deep Think, Deep Research)
and may run for many minutes, do not block the turn on query. Use
cli-jaw browser web-ai send to get the sessionId, then
cli-jaw bgtask add --preset web-ai --session "$SID" and end the turn —
the jaw server re-invokes the boss with a [bgtask:*] prompt on completion.
Details: active web-ai skill "Long-Running Queries — bgtask" section.
Drive grok.com or chatgpt.com through browser control for complex synthesis that raw search cannot produce. Slowest tier, most capable.
cli-jaw browser web-ai status --vendor grok # or chatgpt
Build queries using this envelope for best results:
[SYSTEM]
You are a research analyst with expertise in <domain>.
[USER]
## Goal
<What you need answered — one clear objective>
## Context
<Background the AI needs: prior findings, constraints, domain>
## Question
<Specific question(s), numbered if multiple>
## Output
<Desired format: bullet summary, comparison table, pros/cons, etc.>
## Constraints
- Cite primary sources with URLs
- Distinguish confirmed facts from inference
- Flag information older than <date> as potentially stale
# Quick inline query
cli-jaw browser web-ai query --vendor grok \
--inline-only \
--require-source-audit \
--prompt "<structured question>"
# With source context from files
cli-jaw browser web-ai query --vendor chatgpt \
--prompt "<question>" \
--context-from-files "src/**/*.ts"
# Long-running deep think (up to 20min)
cli-jaw browser web-ai query --vendor chatgpt \
--prompt "<complex question>" \
--timeout 1200
Full instructions: read the active web-ai skill from the current Jaw home
before driving hosted AI providers.
browser status
is not connected, run cli-jaw browser start --agent and retry
status/fetch once. Skip Tier 2 only if browser start, status, or fetch still
fails; report the failure and mark affected claims browse-needed or
insufficient. For Tier 3 progrok, if progrok status is not logged in,
skip that tier and report.sufficient on snippets alone. At least one primary/original source
must be actually fetched/opened before any claim is marked sufficient —
snippet agreement across many sources does not count.browse-needed only with a pasted command failure.For search tasks that need comparison or audit, make the answer easy to verify:
Command-specific field names, output schema, and UX wording belong in the
calling workflow such as /search, not in this standalone skill.
tools
Use only on the Codex CLI for native image generation or image editing without an API key. Save final PNG files under ~/.cli-jaw/uploads, report web-ready absolute-path markdown, and send to Telegram or Discord only when explicitly requested.
tools
Ranked repository structure map via `cli-jaw map`. Use for codebase overview, structure map, symbol overview, unfamiliar codebase exploration, architecture orientation. Triggers: repo map, structure map, codebase overview, 와꾸, project structure, unfamiliar code.
tools
cli-jaw Design workspace: create, preview, run, and export design pages from the right sidebar. Covers panel UX, direct-write workflow, artifact lifecycle, wireframe generation, design system, and Open Design adapter.
development
MUST USE for infrastructure and delivery work — container builds, deploy pipelines, Kubernetes, Infrastructure as Code, SRE foundations, edge/serverless, ML infrastructure. Triggers: Dockerfile, K8s manifests, CI/CD pipeline, Terraform/IaC, release/deploy, devops/infra/deploy or release_cd task_tags.