[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-tavily-tavily-dynamic-search":3,"mdc--o7hxo5-key":31,"related-org-tavily-tavily-dynamic-search":3898,"related-repo-tavily-tavily-dynamic-search":4066},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":27,"sourceUrl":29,"mdContent":30},"tavily-dynamic-search","search the web via Tavily","Programmatic web search with context isolation. Use this skill for any research task where you need to search the web, filter results, and extract specific information — without polluting your context window with raw HTML and boilerplate. This is the default skill for web research. Triggered by \"search for\", \"look up\", \"find\", \"research\", \"what's the latest on\", or any query that requires current web information. Also use when asked to \"search and filter\", \"find the important parts\", or \"extract the key details\" — any case where the user wants curated, noise-free content.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"tavily","Tavily","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftavily.png","tavily-ai",[13,17,18],{"name":14,"slug":15,"type":16},"Research","research","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"Search","search",426,"https:\u002F\u002Fgithub.com\u002Ftavily-ai\u002Fskills","2026-04-14T04:50:31.944584",null,36,[],{"repoUrl":22,"stars":21,"forks":25,"topics":28,"description":24},[],"https:\u002F\u002Fgithub.com\u002Ftavily-ai\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Ftavily-dynamic-search","---\nname: tavily-dynamic-search\ndescription: |\n  Programmatic web search with context isolation. Use this skill for any research task where you need to search the web, filter results, and extract specific information — without polluting your context window with raw HTML and boilerplate. This is the default skill for web research. Triggered by \"search for\", \"look up\", \"find\", \"research\", \"what's the latest on\", or any query that requires current web information. Also use when asked to \"search and filter\", \"find the important parts\", or \"extract the key details\" — any case where the user wants curated, noise-free content.\nallowed-tools: Bash(tvly *), Bash(python3 *), Bash(uv run *), Bash(jq *)\n---\n\n# Tavily Dynamic Search\n\nSearch the web, filter results, and extract content so that **raw search data never enters your context window**. Only your curated `print()` output comes back.\n\n## Why this matters\n\nA typical `tvly search --include-raw-content` returns 8 results × 30-50K chars each = **~300K characters** of raw page content. If this enters your context window, you burn tokens reading navigation bars, cookie banners, and boilerplate — and your reasoning quality degrades under the noise. By processing results inside a Python script, only your `print()` output enters context — typically **1-3K characters** of pure signal. That's a 100-200x reduction.\n\n## Background: Programmatic Tool Calling (PTC)\n\nThis skill replicates the architecture of [Anthropic's Programmatic Tool Calling](https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fprogrammatic-tool-calling) (PTC) for web search. PTC lets the model write code that orchestrates tool calls inside a sandbox — intermediate results stay in the sandbox, and only the final `print()` output reaches the model's context window.\n\n**This skill applies the same principle using local Python execution.** The Python process is the sandbox. Variables in memory hold the raw data. Only what you `print()` crosses into your context window. You write the filtering logic — you decide what matters for each query.\n\n## Before running any command\n\nIf `tvly` is not found on PATH, install it first:\n\n```bash\ncurl -fsSL https:\u002F\u002Fcli.tavily.com\u002Finstall.sh | bash && tvly login\n```\n\n## Core Rule\n\n**NEVER** run `tvly` as a bare command. Always process output through Python so you control what enters your context.\n\n```bash\n# WRONG — raw results flood your context\ntvly search \"quantum computing 2025\" --json\n\n# RIGHT — only your print() output enters context\ntvly search \"quantum computing 2025\" --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nfor r in data['results']:\n    print(f'[{r[\\\"score\\\"]:.2f}] {r[\\\"title\\\"]}')\n    print(f'  {r[\\\"url\\\"]}')\n\"\n```\n\n## JSON Schemas\n\nYou need these to write correct filtering code.\n\n### tvly search --json\n\n```json\n{\n  \"query\": \"string\",\n  \"answer\": \"string | null\",\n  \"results\": [\n    {\n      \"url\": \"string\",\n      \"title\": \"string\",\n      \"content\": \"string (snippet, ~500-1500 chars)\",\n      \"score\": 0.0-1.0,\n      \"raw_content\": \"string | null (full page, only with --include-raw-content)\"\n    }\n  ],\n  \"response_time\": 0.0\n}\n```\n\n### tvly extract --json\n\n```json\n{\n  \"results\": [\n    {\n      \"url\": \"string\",\n      \"title\": \"string\",\n      \"raw_content\": \"string (full page markdown)\",\n      \"images\": []\n    }\n  ],\n  \"failed_results\": [],\n  \"response_time\": 0.0\n}\n```\n\n## How to search\n\nYou have two building blocks and two ways to run them. Compose these however the query demands — there are no fixed patterns. You decide the approach based on what you need.\n\n### Building blocks\n\n**`tvly search`** — returns titles, URLs, snippets, scores. Optionally includes full page content with `--include-raw-content markdown`.\n\n**`tvly extract`** — fetches full page content for specific URLs. Use when you found a URL from search and need more detail.\n\n### Execution modes\n\n**Pipe mode** — for simple filters (3-5 lines). Pipe tvly output into `python3 -c`:\n\n```bash\ntvly search \"query\" --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\n# your filtering code here\n\"\n```\n\n**Heredoc mode** — for anything more complex. Single Bash call, clean multi-line Python, no escaping, no temp files:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\nraw = subprocess.check_output(\n    ['tvly', 'search', 'query', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\nfor r in data['results']:\n    print(f\"[{r['score']:.2f}] {r['title']}\")\n    print(f\"  {r['url']}\")\nPYEOF\n```\n\nSingle-quoted heredocs (`\u003C\u003C 'PYEOF'`) don't interpret anything — no escaping needed. This is the default for most tasks.\n\n**Script mode** — only when you will reuse the same script across multiple turns. Do NOT write one-shot scripts to `\u002Ftmp\u002F`. If you run it once, use a heredoc.\n\n**Important: save DATA to `\u002Ftmp\u002F`, not CODE.** Writing `\u002Ftmp\u002Ftavily_results.json` (data for later turns) = good. Writing `\u002Ftmp\u002Fmy_filter.py` (one-shot code) = wasteful — use a heredoc instead.\n\n## Multi-turn iteration\n\nFor complex queries, you often need to **explore before you extract** — just like PTC, where the model searches, sees titles, decides which results to drill into, then extracts.\n\nThe key: **save raw results to a file, then process them in separate steps.** The file is your persistent state between turns.\n\n### Turn 1: Search and explore\n\nSearch and print only titles + scores. Save raw results to disk for later turns:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nraw = subprocess.check_output(\n    ['tvly', 'search', 'solid-state battery commercialization 2025',\n     '--include-raw-content', 'markdown', '--max-results', '8', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\n# Save raw results — this stays on disk, never enters context\nwith open('\u002Ftmp\u002Ftavily_results.json', 'w') as f:\n    json.dump(data, f)\n\n# Print only what you need to decide next steps\nprint(f'{len(data[\"results\"])} results saved to \u002Ftmp\u002Ftavily_results.json\\n')\nfor i, r in enumerate(data['results']):\n    print(f'[{i}] [{r[\"score\"]:.2f}] {r[\"title\"][:90]}')\n    print(f'    {r[\"url\"]}')\n    print(f'    {r[\"content\"][:150]}')\n    print()\nPYEOF\n```\n\nContext receives: ~800 tokens of titles + snippets. The 300K of raw page content is in `\u002Ftmp\u002Ftavily_results.json`, untouched.\n\n### Turn 2: Extract based on what you saw\n\nNow you know what's in the results. Write targeted extraction — **you decide** which results to drill into and what to filter for:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json\n\ndata = json.load(open('\u002Ftmp\u002Ftavily_results.json'))\n\n# You chose these indices based on the titles you saw in turn 1\nfor i in [0, 2, 5]:\n    r = data['results'][i]\n    raw = r.get('raw_content', '') or ''\n    if not raw:\n        continue\n\n    print(f'## {r[\"title\"]}')\n    print(f'URL: {r[\"url\"]}\\n')\n\n    # You write the filtering logic based on the query\n    # This example extracts paragraphs about specific companies\n    for para in raw.split('\\n\\n'):\n        para = para.strip()\n        if len(para) > 80 and any(kw in para.lower() for kw in\n                ['toyota', 'quantumscape', 'samsung', 'commercializ', 'production']):\n            print(para)\n            print()\n\n    print('---\\n')\nPYEOF\n```\n\nContext receives: ~600 tokens of targeted content. You made the decision about what to keep.\n\n### Turn 3 (optional): Fetch more detail\n\nIf you need more from a specific source:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Fetch a specific URL you identified\nraw = subprocess.check_output(\n    ['tvly', 'extract', 'https:\u002F\u002Fexample.com\u002Farticle', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\npage = data['results'][0]\ncontent = page.get('raw_content', '')\n\n# Save for potential further processing\nwith open('\u002Ftmp\u002Fpage_detail.txt', 'w') as f:\n    f.write(content)\n\n# Print only the section you care about\nfor line in content.split('\\n'):\n    if any(kw in line.lower() for kw in ['timeline', '2025', '2026', 'mass production']):\n        print(line.strip())\nPYEOF\n```\n\n### When to use multi-turn vs single-turn\n\n**Single turn** (pipe mode or one script): when you know upfront what you're looking for. Specific factual queries, known keywords.\n\n**Multi-turn** (save + explore + extract): when you need to see what's available before deciding what to extract. Open-ended research, complex topics, queries where you don't know the right keywords yet.\n\n## Examples\n\n### Simple factual lookup (single turn, pipe mode)\n\n```bash\ntvly search \"Python 3.13 release date\" --max-results 5 --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nfor r in data['results'][:3]:\n    print(f'{r[\\\"title\\\"]}')\n    print(f'{r[\\\"content\\\"][:300]}')\n    print()\n\"\n```\n\n### Financial data extraction (single turn, heredoc)\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nraw = subprocess.check_output(\n    ['tvly', 'search', 'NVIDIA Q4 2025 earnings revenue',\n     '--include-raw-content', 'markdown', '--max-results', '5',\n     '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\nfor r in data['results']:\n    raw_content = r.get('raw_content', '') or ''\n    # For financial queries, look for lines with numbers\n    financial_lines = [\n        line.strip() for line in raw_content.split('\\n')\n        if any(kw in line.lower() for kw in\n               ['revenue', 'eps', 'earnings', 'margin', 'guidance', 'billion'])\n        and any(c.isdigit() for c in line)\n        and len(line.strip()) > 30\n    ]\n    if financial_lines:\n        print(f'## {r[\"title\"]}')\n        print(f'URL: {r[\"url\"]}')\n        for line in financial_lines[:15]:\n            print(f'  {line}')\n        print()\nPYEOF\n```\n\n### Multi-source research (multi-turn)\n\n**Turn 1** — broad search + triage:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Search from multiple angles\nqueries = [\n    ('broad', 'EU AI Act implementation timeline 2025'),\n    ('specific', 'EU AI Act high-risk AI systems obligations'),\n]\n\nall_results = []\nfor label, query in queries:\n    raw = subprocess.check_output(\n        ['tvly', 'search', query, '--max-results', '8', '--json'],\n        stderr=subprocess.DEVNULL\n    )\n    data = json.loads(raw)\n    for r in data['results']:\n        r['_query'] = label\n    all_results.extend(data['results'])\n\n# Deduplicate by URL\nseen = set()\nunique = []\nfor r in all_results:\n    if r['url'] not in seen:\n        seen.add(r['url'])\n        unique.append(r)\n\n# Save all results\nwith open('\u002Ftmp\u002Feu_ai_results.json', 'w') as f:\n    json.dump(unique, f)\n\n# Print triage\nunique.sort(key=lambda r: r['score'], reverse=True)\nprint(f'{len(unique)} unique results from {len(queries)} queries\\n')\nfor i, r in enumerate(unique[:10]):\n    print(f'[{i}] [{r[\"score\"]:.2f}] ({r[\"_query\"]}) {r[\"title\"][:80]}')\n    print(f'    {r[\"url\"]}')\n    print(f'    {r[\"content\"][:120]}')\n    print()\nPYEOF\n```\n\n**Turn 2** — you see the triage, pick the best sources, and extract:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nresults = json.load(open('\u002Ftmp\u002Feu_ai_results.json'))\n\n# Fetch full content for the top 3 (you chose these based on turn 1)\nfor r in [results[0], results[2], results[4]]:\n    try:\n        raw = subprocess.check_output(\n            ['tvly', 'extract', r['url'], '--json'],\n            stderr=subprocess.DEVNULL, timeout=30\n        )\n        page = json.loads(raw)\n        if not page.get('results'):\n            continue\n        content = page['results'][0].get('raw_content', '')\n\n        # Your filtering logic — tailored to this query\n        print(f'## {r[\"title\"]}')\n        print(f'URL: {r[\"url\"]}\\n')\n\n        for para in content.split('\\n\\n'):\n            para = para.strip()\n            if len(para) > 100 and any(kw in para.lower() for kw in\n                    ['high-risk', 'prohibited', 'deadline', 'obligation',\n                     'compliance', 'penalty', 'fine', 'article']):\n                print(para)\n                print()\n\n        print('---\\n')\n    except Exception:\n        continue\nPYEOF\n```\n\n### Following leads across turns\n\nSometimes turn 2 reveals new URLs or topics to chase. You can keep iterating:\n\n```bash\npython3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Read the page you saved earlier\nwith open('\u002Ftmp\u002Fpage_detail.txt') as f:\n    content = f.read()\n\n# You noticed a reference to a specific regulation document\n# Search for it specifically\nraw = subprocess.check_output(\n    ['tvly', 'search', 'EU AI Act Annex III high-risk list',\n     '--include-domains', 'eur-lex.europa.eu',\n     '--max-results', '3', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\nfor r in data['results']:\n    print(f'## {r[\"title\"]}')\n    print(f'URL: {r[\"url\"]}')\n    print(r['content'])\n    print()\nPYEOF\n```\n\nEach turn, you save data to `\u002Ftmp\u002F`, decide what to explore next, and write new filtering code as heredocs. The raw data accumulates on disk; your context stays lean.\n\n## Writing your filtering code\n\nThe Python you write IS the filtering logic. There are no fixed templates — you write code that makes sense for the specific query. Here are principles, not rules:\n\n**Triage first.** Inspect titles and scores before fetching full pages. Don't extract everything blindly.\n\n**Be specific.** A financial query should filter for numbers and financial terms. A technical query should look for code blocks and specifications. A news query should look for dates and quotes. Match your filtering to the query.\n\n**Structural filtering helps.** Skip lines shorter than ~50-80 chars (usually nav elements). Skip common boilerplate phrases. Keep headings and their following paragraphs. But these are starting points — adapt based on what you see.\n\n**Print structured output.** Format your output so it's easy to reason over:\n\n```python\nprint(f'## {title}')\nprint(f'URL: {url}')\nprint(relevant_content)\nprint()\n```\n\n**Handle errors.** Pages fail, URLs 404, extractions timeout. Use try\u002Fexcept and skip failures:\n\n```python\ntry:\n    raw = subprocess.check_output(['tvly', 'extract', url, '--json'],\n                                   stderr=subprocess.DEVNULL, timeout=30)\nexcept Exception:\n    continue\n```\n\n**Token budget awareness.** Your `print()` output is what enters your context. Target 150-600 tokens per source. If you're printing 5000+ chars from a single page, you're probably not filtering enough. But if a source has a critical data table, it's fine to keep more.\n\n## Options\n\nAll standard `tvly search` options work:\n\n| Option | Description |\n|--------|-------------|\n| `--max-results` | Number of results (default: 5, max: 20) |\n| `--depth` | `ultra-fast`, `fast`, `basic` (default), `advanced` |\n| `--time-range` | `day`, `week`, `month`, `year` |\n| `--include-domains` | Comma-separated whitelist |\n| `--exclude-domains` | Comma-separated blacklist |\n| `--include-raw-content` | Full page content (`markdown` or `text`) |\n| `--country` | Boost results from country |\n\n## Fallback: jq\n\nWhen `python3` is unavailable, use `jq` for basic filtering:\n\n```bash\ntvly search \"query\" --json 2>\u002Fdev\u002Fnull | jq '[.results[] | select(.score > 0.5) | {title, url, content}]'\n```\n\njq can't do multi-step search-then-extract or complex filtering. Use it only for simple lookups.\n",{"data":32,"body":34},{"name":4,"description":6,"allowed-tools":33},"Bash(tvly *), Bash(python3 *), Bash(uv run *), Bash(jq *)",{"type":35,"children":36},"root",[37,45,68,75,109,115,138,155,161,174,234,240,257,492,498,503,510,860,866,1110,1116,1121,1127,1149,1163,1169,1186,1273,1283,1387,1400,1418,1451,1457,1469,1481,1487,1492,1681,1693,1699,1711,1931,1936,1942,1947,2120,2126,2136,2146,2152,2158,2311,2317,2548,2554,2564,2909,2919,3188,3194,3199,3385,3397,3403,3408,3418,3428,3438,3448,3489,3499,3546,3563,3569,3581,3795,3801,3821,3887,3892],{"type":38,"tag":39,"props":40,"children":41},"element","h1",{"id":4},[42],{"type":43,"value":44},"text","Tavily Dynamic Search",{"type":38,"tag":46,"props":47,"children":48},"p",{},[49,51,57,59,66],{"type":43,"value":50},"Search the web, filter results, and extract content so that ",{"type":38,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":43,"value":56},"raw search data never enters your context window",{"type":43,"value":58},". Only your curated ",{"type":38,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":43,"value":65},"print()",{"type":43,"value":67}," output comes back.",{"type":38,"tag":69,"props":70,"children":72},"h2",{"id":71},"why-this-matters",[73],{"type":43,"value":74},"Why this matters",{"type":38,"tag":46,"props":76,"children":77},{},[78,80,86,88,93,95,100,102,107],{"type":43,"value":79},"A typical ",{"type":38,"tag":60,"props":81,"children":83},{"className":82},[],[84],{"type":43,"value":85},"tvly search --include-raw-content",{"type":43,"value":87}," returns 8 results × 30-50K chars each = ",{"type":38,"tag":52,"props":89,"children":90},{},[91],{"type":43,"value":92},"~300K characters",{"type":43,"value":94}," of raw page content. If this enters your context window, you burn tokens reading navigation bars, cookie banners, and boilerplate — and your reasoning quality degrades under the noise. By processing results inside a Python script, only your ",{"type":38,"tag":60,"props":96,"children":98},{"className":97},[],[99],{"type":43,"value":65},{"type":43,"value":101}," output enters context — typically ",{"type":38,"tag":52,"props":103,"children":104},{},[105],{"type":43,"value":106},"1-3K characters",{"type":43,"value":108}," of pure signal. That's a 100-200x reduction.",{"type":38,"tag":69,"props":110,"children":112},{"id":111},"background-programmatic-tool-calling-ptc",[113],{"type":43,"value":114},"Background: Programmatic Tool Calling (PTC)",{"type":38,"tag":46,"props":116,"children":117},{},[118,120,129,131,136],{"type":43,"value":119},"This skill replicates the architecture of ",{"type":38,"tag":121,"props":122,"children":126},"a",{"href":123,"rel":124},"https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fprogrammatic-tool-calling",[125],"nofollow",[127],{"type":43,"value":128},"Anthropic's Programmatic Tool Calling",{"type":43,"value":130}," (PTC) for web search. PTC lets the model write code that orchestrates tool calls inside a sandbox — intermediate results stay in the sandbox, and only the final ",{"type":38,"tag":60,"props":132,"children":134},{"className":133},[],[135],{"type":43,"value":65},{"type":43,"value":137}," output reaches the model's context window.",{"type":38,"tag":46,"props":139,"children":140},{},[141,146,148,153],{"type":38,"tag":52,"props":142,"children":143},{},[144],{"type":43,"value":145},"This skill applies the same principle using local Python execution.",{"type":43,"value":147}," The Python process is the sandbox. Variables in memory hold the raw data. Only what you ",{"type":38,"tag":60,"props":149,"children":151},{"className":150},[],[152],{"type":43,"value":65},{"type":43,"value":154}," crosses into your context window. You write the filtering logic — you decide what matters for each query.",{"type":38,"tag":69,"props":156,"children":158},{"id":157},"before-running-any-command",[159],{"type":43,"value":160},"Before running any command",{"type":38,"tag":46,"props":162,"children":163},{},[164,166,172],{"type":43,"value":165},"If ",{"type":38,"tag":60,"props":167,"children":169},{"className":168},[],[170],{"type":43,"value":171},"tvly",{"type":43,"value":173}," is not found on PATH, install it first:",{"type":38,"tag":175,"props":176,"children":181},"pre",{"className":177,"code":178,"language":179,"meta":180,"style":180},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -fsSL https:\u002F\u002Fcli.tavily.com\u002Finstall.sh | bash && tvly login\n","bash","",[182],{"type":38,"tag":60,"props":183,"children":184},{"__ignoreMap":180},[185],{"type":38,"tag":186,"props":187,"children":190},"span",{"class":188,"line":189},"line",1,[191,197,203,208,214,219,224,229],{"type":38,"tag":186,"props":192,"children":194},{"style":193},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[195],{"type":43,"value":196},"curl",{"type":38,"tag":186,"props":198,"children":200},{"style":199},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[201],{"type":43,"value":202}," -fsSL",{"type":38,"tag":186,"props":204,"children":205},{"style":199},[206],{"type":43,"value":207}," https:\u002F\u002Fcli.tavily.com\u002Finstall.sh",{"type":38,"tag":186,"props":209,"children":211},{"style":210},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[212],{"type":43,"value":213}," |",{"type":38,"tag":186,"props":215,"children":216},{"style":193},[217],{"type":43,"value":218}," bash",{"type":38,"tag":186,"props":220,"children":221},{"style":210},[222],{"type":43,"value":223}," &&",{"type":38,"tag":186,"props":225,"children":226},{"style":193},[227],{"type":43,"value":228}," tvly",{"type":38,"tag":186,"props":230,"children":231},{"style":199},[232],{"type":43,"value":233}," login\n",{"type":38,"tag":69,"props":235,"children":237},{"id":236},"core-rule",[238],{"type":43,"value":239},"Core Rule",{"type":38,"tag":46,"props":241,"children":242},{},[243,248,250,255],{"type":38,"tag":52,"props":244,"children":245},{},[246],{"type":43,"value":247},"NEVER",{"type":43,"value":249}," run ",{"type":38,"tag":60,"props":251,"children":253},{"className":252},[],[254],{"type":43,"value":171},{"type":43,"value":256}," as a bare command. Always process output through Python so you control what enters your context.",{"type":38,"tag":175,"props":258,"children":260},{"className":177,"code":259,"language":179,"meta":180,"style":180},"# WRONG — raw results flood your context\ntvly search \"quantum computing 2025\" --json\n\n# RIGHT — only your print() output enters context\ntvly search \"quantum computing 2025\" --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nfor r in data['results']:\n    print(f'[{r[\\\"score\\\"]:.2f}] {r[\\\"title\\\"]}')\n    print(f'  {r[\\\"url\\\"]}')\n\"\n",[261],{"type":38,"tag":60,"props":262,"children":263},{"__ignoreMap":180},[264,273,306,316,325,383,392,401,410,457,483],{"type":38,"tag":186,"props":265,"children":266},{"class":188,"line":189},[267],{"type":38,"tag":186,"props":268,"children":270},{"style":269},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[271],{"type":43,"value":272},"# WRONG — raw results flood your context\n",{"type":38,"tag":186,"props":274,"children":276},{"class":188,"line":275},2,[277,281,286,291,296,301],{"type":38,"tag":186,"props":278,"children":279},{"style":193},[280],{"type":43,"value":171},{"type":38,"tag":186,"props":282,"children":283},{"style":199},[284],{"type":43,"value":285}," search",{"type":38,"tag":186,"props":287,"children":288},{"style":210},[289],{"type":43,"value":290}," \"",{"type":38,"tag":186,"props":292,"children":293},{"style":199},[294],{"type":43,"value":295},"quantum computing 2025",{"type":38,"tag":186,"props":297,"children":298},{"style":210},[299],{"type":43,"value":300},"\"",{"type":38,"tag":186,"props":302,"children":303},{"style":199},[304],{"type":43,"value":305}," --json\n",{"type":38,"tag":186,"props":307,"children":309},{"class":188,"line":308},3,[310],{"type":38,"tag":186,"props":311,"children":313},{"emptyLinePlaceholder":312},true,[314],{"type":43,"value":315},"\n",{"type":38,"tag":186,"props":317,"children":319},{"class":188,"line":318},4,[320],{"type":38,"tag":186,"props":321,"children":322},{"style":269},[323],{"type":43,"value":324},"# RIGHT — only your print() output enters context\n",{"type":38,"tag":186,"props":326,"children":328},{"class":188,"line":327},5,[329,333,337,341,345,349,354,359,364,368,373,378],{"type":38,"tag":186,"props":330,"children":331},{"style":193},[332],{"type":43,"value":171},{"type":38,"tag":186,"props":334,"children":335},{"style":199},[336],{"type":43,"value":285},{"type":38,"tag":186,"props":338,"children":339},{"style":210},[340],{"type":43,"value":290},{"type":38,"tag":186,"props":342,"children":343},{"style":199},[344],{"type":43,"value":295},{"type":38,"tag":186,"props":346,"children":347},{"style":210},[348],{"type":43,"value":300},{"type":38,"tag":186,"props":350,"children":351},{"style":199},[352],{"type":43,"value":353}," --json",{"type":38,"tag":186,"props":355,"children":356},{"style":210},[357],{"type":43,"value":358}," 2>",{"type":38,"tag":186,"props":360,"children":361},{"style":199},[362],{"type":43,"value":363},"\u002Fdev\u002Fnull",{"type":38,"tag":186,"props":365,"children":366},{"style":210},[367],{"type":43,"value":213},{"type":38,"tag":186,"props":369,"children":370},{"style":193},[371],{"type":43,"value":372}," python3",{"type":38,"tag":186,"props":374,"children":375},{"style":199},[376],{"type":43,"value":377}," -c",{"type":38,"tag":186,"props":379,"children":380},{"style":210},[381],{"type":43,"value":382}," \"\n",{"type":38,"tag":186,"props":384,"children":386},{"class":188,"line":385},6,[387],{"type":38,"tag":186,"props":388,"children":389},{"style":199},[390],{"type":43,"value":391},"import json, sys\n",{"type":38,"tag":186,"props":393,"children":395},{"class":188,"line":394},7,[396],{"type":38,"tag":186,"props":397,"children":398},{"style":199},[399],{"type":43,"value":400},"data = json.load(sys.stdin)\n",{"type":38,"tag":186,"props":402,"children":404},{"class":188,"line":403},8,[405],{"type":38,"tag":186,"props":406,"children":407},{"style":199},[408],{"type":43,"value":409},"for r in data['results']:\n",{"type":38,"tag":186,"props":411,"children":413},{"class":188,"line":412},9,[414,419,425,430,434,439,443,448,452],{"type":38,"tag":186,"props":415,"children":416},{"style":199},[417],{"type":43,"value":418},"    print(f'[{r[",{"type":38,"tag":186,"props":420,"children":422},{"style":421},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[423],{"type":43,"value":424},"\\\"",{"type":38,"tag":186,"props":426,"children":427},{"style":199},[428],{"type":43,"value":429},"score",{"type":38,"tag":186,"props":431,"children":432},{"style":421},[433],{"type":43,"value":424},{"type":38,"tag":186,"props":435,"children":436},{"style":199},[437],{"type":43,"value":438},"]:.2f}] {r[",{"type":38,"tag":186,"props":440,"children":441},{"style":421},[442],{"type":43,"value":424},{"type":38,"tag":186,"props":444,"children":445},{"style":199},[446],{"type":43,"value":447},"title",{"type":38,"tag":186,"props":449,"children":450},{"style":421},[451],{"type":43,"value":424},{"type":38,"tag":186,"props":453,"children":454},{"style":199},[455],{"type":43,"value":456},"]}')\n",{"type":38,"tag":186,"props":458,"children":460},{"class":188,"line":459},10,[461,466,470,475,479],{"type":38,"tag":186,"props":462,"children":463},{"style":199},[464],{"type":43,"value":465},"    print(f'  {r[",{"type":38,"tag":186,"props":467,"children":468},{"style":421},[469],{"type":43,"value":424},{"type":38,"tag":186,"props":471,"children":472},{"style":199},[473],{"type":43,"value":474},"url",{"type":38,"tag":186,"props":476,"children":477},{"style":421},[478],{"type":43,"value":424},{"type":38,"tag":186,"props":480,"children":481},{"style":199},[482],{"type":43,"value":456},{"type":38,"tag":186,"props":484,"children":486},{"class":188,"line":485},11,[487],{"type":38,"tag":186,"props":488,"children":489},{"style":210},[490],{"type":43,"value":491},"\"\n",{"type":38,"tag":69,"props":493,"children":495},{"id":494},"json-schemas",[496],{"type":43,"value":497},"JSON Schemas",{"type":38,"tag":46,"props":499,"children":500},{},[501],{"type":43,"value":502},"You need these to write correct filtering code.",{"type":38,"tag":504,"props":505,"children":507},"h3",{"id":506},"tvly-search-json",[508],{"type":43,"value":509},"tvly search --json",{"type":38,"tag":175,"props":511,"children":515},{"className":512,"code":513,"language":514,"meta":180,"style":180},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"query\": \"string\",\n  \"answer\": \"string | null\",\n  \"results\": [\n    {\n      \"url\": \"string\",\n      \"title\": \"string\",\n      \"content\": \"string (snippet, ~500-1500 chars)\",\n      \"score\": 0.0-1.0,\n      \"raw_content\": \"string | null (full page, only with --include-raw-content)\"\n    }\n  ],\n  \"response_time\": 0.0\n}\n","json",[516],{"type":38,"tag":60,"props":517,"children":518},{"__ignoreMap":180},[519,527,568,605,630,638,674,709,746,775,808,816,825,851],{"type":38,"tag":186,"props":520,"children":521},{"class":188,"line":189},[522],{"type":38,"tag":186,"props":523,"children":524},{"style":210},[525],{"type":43,"value":526},"{\n",{"type":38,"tag":186,"props":528,"children":529},{"class":188,"line":275},[530,535,541,545,550,554,559,563],{"type":38,"tag":186,"props":531,"children":532},{"style":210},[533],{"type":43,"value":534},"  \"",{"type":38,"tag":186,"props":536,"children":538},{"style":537},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[539],{"type":43,"value":540},"query",{"type":38,"tag":186,"props":542,"children":543},{"style":210},[544],{"type":43,"value":300},{"type":38,"tag":186,"props":546,"children":547},{"style":210},[548],{"type":43,"value":549},":",{"type":38,"tag":186,"props":551,"children":552},{"style":210},[553],{"type":43,"value":290},{"type":38,"tag":186,"props":555,"children":556},{"style":199},[557],{"type":43,"value":558},"string",{"type":38,"tag":186,"props":560,"children":561},{"style":210},[562],{"type":43,"value":300},{"type":38,"tag":186,"props":564,"children":565},{"style":210},[566],{"type":43,"value":567},",\n",{"type":38,"tag":186,"props":569,"children":570},{"class":188,"line":308},[571,575,580,584,588,592,597,601],{"type":38,"tag":186,"props":572,"children":573},{"style":210},[574],{"type":43,"value":534},{"type":38,"tag":186,"props":576,"children":577},{"style":537},[578],{"type":43,"value":579},"answer",{"type":38,"tag":186,"props":581,"children":582},{"style":210},[583],{"type":43,"value":300},{"type":38,"tag":186,"props":585,"children":586},{"style":210},[587],{"type":43,"value":549},{"type":38,"tag":186,"props":589,"children":590},{"style":210},[591],{"type":43,"value":290},{"type":38,"tag":186,"props":593,"children":594},{"style":199},[595],{"type":43,"value":596},"string | null",{"type":38,"tag":186,"props":598,"children":599},{"style":210},[600],{"type":43,"value":300},{"type":38,"tag":186,"props":602,"children":603},{"style":210},[604],{"type":43,"value":567},{"type":38,"tag":186,"props":606,"children":607},{"class":188,"line":318},[608,612,617,621,625],{"type":38,"tag":186,"props":609,"children":610},{"style":210},[611],{"type":43,"value":534},{"type":38,"tag":186,"props":613,"children":614},{"style":537},[615],{"type":43,"value":616},"results",{"type":38,"tag":186,"props":618,"children":619},{"style":210},[620],{"type":43,"value":300},{"type":38,"tag":186,"props":622,"children":623},{"style":210},[624],{"type":43,"value":549},{"type":38,"tag":186,"props":626,"children":627},{"style":210},[628],{"type":43,"value":629}," [\n",{"type":38,"tag":186,"props":631,"children":632},{"class":188,"line":327},[633],{"type":38,"tag":186,"props":634,"children":635},{"style":210},[636],{"type":43,"value":637},"    {\n",{"type":38,"tag":186,"props":639,"children":640},{"class":188,"line":385},[641,646,650,654,658,662,666,670],{"type":38,"tag":186,"props":642,"children":643},{"style":210},[644],{"type":43,"value":645},"      \"",{"type":38,"tag":186,"props":647,"children":648},{"style":193},[649],{"type":43,"value":474},{"type":38,"tag":186,"props":651,"children":652},{"style":210},[653],{"type":43,"value":300},{"type":38,"tag":186,"props":655,"children":656},{"style":210},[657],{"type":43,"value":549},{"type":38,"tag":186,"props":659,"children":660},{"style":210},[661],{"type":43,"value":290},{"type":38,"tag":186,"props":663,"children":664},{"style":199},[665],{"type":43,"value":558},{"type":38,"tag":186,"props":667,"children":668},{"style":210},[669],{"type":43,"value":300},{"type":38,"tag":186,"props":671,"children":672},{"style":210},[673],{"type":43,"value":567},{"type":38,"tag":186,"props":675,"children":676},{"class":188,"line":394},[677,681,685,689,693,697,701,705],{"type":38,"tag":186,"props":678,"children":679},{"style":210},[680],{"type":43,"value":645},{"type":38,"tag":186,"props":682,"children":683},{"style":193},[684],{"type":43,"value":447},{"type":38,"tag":186,"props":686,"children":687},{"style":210},[688],{"type":43,"value":300},{"type":38,"tag":186,"props":690,"children":691},{"style":210},[692],{"type":43,"value":549},{"type":38,"tag":186,"props":694,"children":695},{"style":210},[696],{"type":43,"value":290},{"type":38,"tag":186,"props":698,"children":699},{"style":199},[700],{"type":43,"value":558},{"type":38,"tag":186,"props":702,"children":703},{"style":210},[704],{"type":43,"value":300},{"type":38,"tag":186,"props":706,"children":707},{"style":210},[708],{"type":43,"value":567},{"type":38,"tag":186,"props":710,"children":711},{"class":188,"line":403},[712,716,721,725,729,733,738,742],{"type":38,"tag":186,"props":713,"children":714},{"style":210},[715],{"type":43,"value":645},{"type":38,"tag":186,"props":717,"children":718},{"style":193},[719],{"type":43,"value":720},"content",{"type":38,"tag":186,"props":722,"children":723},{"style":210},[724],{"type":43,"value":300},{"type":38,"tag":186,"props":726,"children":727},{"style":210},[728],{"type":43,"value":549},{"type":38,"tag":186,"props":730,"children":731},{"style":210},[732],{"type":43,"value":290},{"type":38,"tag":186,"props":734,"children":735},{"style":199},[736],{"type":43,"value":737},"string (snippet, ~500-1500 chars)",{"type":38,"tag":186,"props":739,"children":740},{"style":210},[741],{"type":43,"value":300},{"type":38,"tag":186,"props":743,"children":744},{"style":210},[745],{"type":43,"value":567},{"type":38,"tag":186,"props":747,"children":748},{"class":188,"line":412},[749,753,757,761,765,771],{"type":38,"tag":186,"props":750,"children":751},{"style":210},[752],{"type":43,"value":645},{"type":38,"tag":186,"props":754,"children":755},{"style":193},[756],{"type":43,"value":429},{"type":38,"tag":186,"props":758,"children":759},{"style":210},[760],{"type":43,"value":300},{"type":38,"tag":186,"props":762,"children":763},{"style":210},[764],{"type":43,"value":549},{"type":38,"tag":186,"props":766,"children":768},{"style":767},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[769],{"type":43,"value":770}," 0.0-1.0",{"type":38,"tag":186,"props":772,"children":773},{"style":210},[774],{"type":43,"value":567},{"type":38,"tag":186,"props":776,"children":777},{"class":188,"line":459},[778,782,787,791,795,799,804],{"type":38,"tag":186,"props":779,"children":780},{"style":210},[781],{"type":43,"value":645},{"type":38,"tag":186,"props":783,"children":784},{"style":193},[785],{"type":43,"value":786},"raw_content",{"type":38,"tag":186,"props":788,"children":789},{"style":210},[790],{"type":43,"value":300},{"type":38,"tag":186,"props":792,"children":793},{"style":210},[794],{"type":43,"value":549},{"type":38,"tag":186,"props":796,"children":797},{"style":210},[798],{"type":43,"value":290},{"type":38,"tag":186,"props":800,"children":801},{"style":199},[802],{"type":43,"value":803},"string | null (full page, only with --include-raw-content)",{"type":38,"tag":186,"props":805,"children":806},{"style":210},[807],{"type":43,"value":491},{"type":38,"tag":186,"props":809,"children":810},{"class":188,"line":485},[811],{"type":38,"tag":186,"props":812,"children":813},{"style":210},[814],{"type":43,"value":815},"    }\n",{"type":38,"tag":186,"props":817,"children":819},{"class":188,"line":818},12,[820],{"type":38,"tag":186,"props":821,"children":822},{"style":210},[823],{"type":43,"value":824},"  ],\n",{"type":38,"tag":186,"props":826,"children":828},{"class":188,"line":827},13,[829,833,838,842,846],{"type":38,"tag":186,"props":830,"children":831},{"style":210},[832],{"type":43,"value":534},{"type":38,"tag":186,"props":834,"children":835},{"style":537},[836],{"type":43,"value":837},"response_time",{"type":38,"tag":186,"props":839,"children":840},{"style":210},[841],{"type":43,"value":300},{"type":38,"tag":186,"props":843,"children":844},{"style":210},[845],{"type":43,"value":549},{"type":38,"tag":186,"props":847,"children":848},{"style":767},[849],{"type":43,"value":850}," 0.0\n",{"type":38,"tag":186,"props":852,"children":854},{"class":188,"line":853},14,[855],{"type":38,"tag":186,"props":856,"children":857},{"style":210},[858],{"type":43,"value":859},"}\n",{"type":38,"tag":504,"props":861,"children":863},{"id":862},"tvly-extract-json",[864],{"type":43,"value":865},"tvly extract --json",{"type":38,"tag":175,"props":867,"children":869},{"className":512,"code":868,"language":514,"meta":180,"style":180},"{\n  \"results\": [\n    {\n      \"url\": \"string\",\n      \"title\": \"string\",\n      \"raw_content\": \"string (full page markdown)\",\n      \"images\": []\n    }\n  ],\n  \"failed_results\": [],\n  \"response_time\": 0.0\n}\n",[870],{"type":38,"tag":60,"props":871,"children":872},{"__ignoreMap":180},[873,880,903,910,945,980,1016,1041,1048,1055,1080,1103],{"type":38,"tag":186,"props":874,"children":875},{"class":188,"line":189},[876],{"type":38,"tag":186,"props":877,"children":878},{"style":210},[879],{"type":43,"value":526},{"type":38,"tag":186,"props":881,"children":882},{"class":188,"line":275},[883,887,891,895,899],{"type":38,"tag":186,"props":884,"children":885},{"style":210},[886],{"type":43,"value":534},{"type":38,"tag":186,"props":888,"children":889},{"style":537},[890],{"type":43,"value":616},{"type":38,"tag":186,"props":892,"children":893},{"style":210},[894],{"type":43,"value":300},{"type":38,"tag":186,"props":896,"children":897},{"style":210},[898],{"type":43,"value":549},{"type":38,"tag":186,"props":900,"children":901},{"style":210},[902],{"type":43,"value":629},{"type":38,"tag":186,"props":904,"children":905},{"class":188,"line":308},[906],{"type":38,"tag":186,"props":907,"children":908},{"style":210},[909],{"type":43,"value":637},{"type":38,"tag":186,"props":911,"children":912},{"class":188,"line":318},[913,917,921,925,929,933,937,941],{"type":38,"tag":186,"props":914,"children":915},{"style":210},[916],{"type":43,"value":645},{"type":38,"tag":186,"props":918,"children":919},{"style":193},[920],{"type":43,"value":474},{"type":38,"tag":186,"props":922,"children":923},{"style":210},[924],{"type":43,"value":300},{"type":38,"tag":186,"props":926,"children":927},{"style":210},[928],{"type":43,"value":549},{"type":38,"tag":186,"props":930,"children":931},{"style":210},[932],{"type":43,"value":290},{"type":38,"tag":186,"props":934,"children":935},{"style":199},[936],{"type":43,"value":558},{"type":38,"tag":186,"props":938,"children":939},{"style":210},[940],{"type":43,"value":300},{"type":38,"tag":186,"props":942,"children":943},{"style":210},[944],{"type":43,"value":567},{"type":38,"tag":186,"props":946,"children":947},{"class":188,"line":327},[948,952,956,960,964,968,972,976],{"type":38,"tag":186,"props":949,"children":950},{"style":210},[951],{"type":43,"value":645},{"type":38,"tag":186,"props":953,"children":954},{"style":193},[955],{"type":43,"value":447},{"type":38,"tag":186,"props":957,"children":958},{"style":210},[959],{"type":43,"value":300},{"type":38,"tag":186,"props":961,"children":962},{"style":210},[963],{"type":43,"value":549},{"type":38,"tag":186,"props":965,"children":966},{"style":210},[967],{"type":43,"value":290},{"type":38,"tag":186,"props":969,"children":970},{"style":199},[971],{"type":43,"value":558},{"type":38,"tag":186,"props":973,"children":974},{"style":210},[975],{"type":43,"value":300},{"type":38,"tag":186,"props":977,"children":978},{"style":210},[979],{"type":43,"value":567},{"type":38,"tag":186,"props":981,"children":982},{"class":188,"line":385},[983,987,991,995,999,1003,1008,1012],{"type":38,"tag":186,"props":984,"children":985},{"style":210},[986],{"type":43,"value":645},{"type":38,"tag":186,"props":988,"children":989},{"style":193},[990],{"type":43,"value":786},{"type":38,"tag":186,"props":992,"children":993},{"style":210},[994],{"type":43,"value":300},{"type":38,"tag":186,"props":996,"children":997},{"style":210},[998],{"type":43,"value":549},{"type":38,"tag":186,"props":1000,"children":1001},{"style":210},[1002],{"type":43,"value":290},{"type":38,"tag":186,"props":1004,"children":1005},{"style":199},[1006],{"type":43,"value":1007},"string (full page markdown)",{"type":38,"tag":186,"props":1009,"children":1010},{"style":210},[1011],{"type":43,"value":300},{"type":38,"tag":186,"props":1013,"children":1014},{"style":210},[1015],{"type":43,"value":567},{"type":38,"tag":186,"props":1017,"children":1018},{"class":188,"line":394},[1019,1023,1028,1032,1036],{"type":38,"tag":186,"props":1020,"children":1021},{"style":210},[1022],{"type":43,"value":645},{"type":38,"tag":186,"props":1024,"children":1025},{"style":193},[1026],{"type":43,"value":1027},"images",{"type":38,"tag":186,"props":1029,"children":1030},{"style":210},[1031],{"type":43,"value":300},{"type":38,"tag":186,"props":1033,"children":1034},{"style":210},[1035],{"type":43,"value":549},{"type":38,"tag":186,"props":1037,"children":1038},{"style":210},[1039],{"type":43,"value":1040}," []\n",{"type":38,"tag":186,"props":1042,"children":1043},{"class":188,"line":403},[1044],{"type":38,"tag":186,"props":1045,"children":1046},{"style":210},[1047],{"type":43,"value":815},{"type":38,"tag":186,"props":1049,"children":1050},{"class":188,"line":412},[1051],{"type":38,"tag":186,"props":1052,"children":1053},{"style":210},[1054],{"type":43,"value":824},{"type":38,"tag":186,"props":1056,"children":1057},{"class":188,"line":459},[1058,1062,1067,1071,1075],{"type":38,"tag":186,"props":1059,"children":1060},{"style":210},[1061],{"type":43,"value":534},{"type":38,"tag":186,"props":1063,"children":1064},{"style":537},[1065],{"type":43,"value":1066},"failed_results",{"type":38,"tag":186,"props":1068,"children":1069},{"style":210},[1070],{"type":43,"value":300},{"type":38,"tag":186,"props":1072,"children":1073},{"style":210},[1074],{"type":43,"value":549},{"type":38,"tag":186,"props":1076,"children":1077},{"style":210},[1078],{"type":43,"value":1079}," [],\n",{"type":38,"tag":186,"props":1081,"children":1082},{"class":188,"line":485},[1083,1087,1091,1095,1099],{"type":38,"tag":186,"props":1084,"children":1085},{"style":210},[1086],{"type":43,"value":534},{"type":38,"tag":186,"props":1088,"children":1089},{"style":537},[1090],{"type":43,"value":837},{"type":38,"tag":186,"props":1092,"children":1093},{"style":210},[1094],{"type":43,"value":300},{"type":38,"tag":186,"props":1096,"children":1097},{"style":210},[1098],{"type":43,"value":549},{"type":38,"tag":186,"props":1100,"children":1101},{"style":767},[1102],{"type":43,"value":850},{"type":38,"tag":186,"props":1104,"children":1105},{"class":188,"line":818},[1106],{"type":38,"tag":186,"props":1107,"children":1108},{"style":210},[1109],{"type":43,"value":859},{"type":38,"tag":69,"props":1111,"children":1113},{"id":1112},"how-to-search",[1114],{"type":43,"value":1115},"How to search",{"type":38,"tag":46,"props":1117,"children":1118},{},[1119],{"type":43,"value":1120},"You have two building blocks and two ways to run them. Compose these however the query demands — there are no fixed patterns. You decide the approach based on what you need.",{"type":38,"tag":504,"props":1122,"children":1124},{"id":1123},"building-blocks",[1125],{"type":43,"value":1126},"Building blocks",{"type":38,"tag":46,"props":1128,"children":1129},{},[1130,1139,1141,1147],{"type":38,"tag":52,"props":1131,"children":1132},{},[1133],{"type":38,"tag":60,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":43,"value":1138},"tvly search",{"type":43,"value":1140}," — returns titles, URLs, snippets, scores. Optionally includes full page content with ",{"type":38,"tag":60,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":43,"value":1146},"--include-raw-content markdown",{"type":43,"value":1148},".",{"type":38,"tag":46,"props":1150,"children":1151},{},[1152,1161],{"type":38,"tag":52,"props":1153,"children":1154},{},[1155],{"type":38,"tag":60,"props":1156,"children":1158},{"className":1157},[],[1159],{"type":43,"value":1160},"tvly extract",{"type":43,"value":1162}," — fetches full page content for specific URLs. Use when you found a URL from search and need more detail.",{"type":38,"tag":504,"props":1164,"children":1166},{"id":1165},"execution-modes",[1167],{"type":43,"value":1168},"Execution modes",{"type":38,"tag":46,"props":1170,"children":1171},{},[1172,1177,1179,1185],{"type":38,"tag":52,"props":1173,"children":1174},{},[1175],{"type":43,"value":1176},"Pipe mode",{"type":43,"value":1178}," — for simple filters (3-5 lines). Pipe tvly output into ",{"type":38,"tag":60,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":43,"value":1184},"python3 -c",{"type":43,"value":549},{"type":38,"tag":175,"props":1187,"children":1189},{"className":177,"code":1188,"language":179,"meta":180,"style":180},"tvly search \"query\" --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\n# your filtering code here\n\"\n",[1190],{"type":38,"tag":60,"props":1191,"children":1192},{"__ignoreMap":180},[1193,1244,1251,1258,1266],{"type":38,"tag":186,"props":1194,"children":1195},{"class":188,"line":189},[1196,1200,1204,1208,1212,1216,1220,1224,1228,1232,1236,1240],{"type":38,"tag":186,"props":1197,"children":1198},{"style":193},[1199],{"type":43,"value":171},{"type":38,"tag":186,"props":1201,"children":1202},{"style":199},[1203],{"type":43,"value":285},{"type":38,"tag":186,"props":1205,"children":1206},{"style":210},[1207],{"type":43,"value":290},{"type":38,"tag":186,"props":1209,"children":1210},{"style":199},[1211],{"type":43,"value":540},{"type":38,"tag":186,"props":1213,"children":1214},{"style":210},[1215],{"type":43,"value":300},{"type":38,"tag":186,"props":1217,"children":1218},{"style":199},[1219],{"type":43,"value":353},{"type":38,"tag":186,"props":1221,"children":1222},{"style":210},[1223],{"type":43,"value":358},{"type":38,"tag":186,"props":1225,"children":1226},{"style":199},[1227],{"type":43,"value":363},{"type":38,"tag":186,"props":1229,"children":1230},{"style":210},[1231],{"type":43,"value":213},{"type":38,"tag":186,"props":1233,"children":1234},{"style":193},[1235],{"type":43,"value":372},{"type":38,"tag":186,"props":1237,"children":1238},{"style":199},[1239],{"type":43,"value":377},{"type":38,"tag":186,"props":1241,"children":1242},{"style":210},[1243],{"type":43,"value":382},{"type":38,"tag":186,"props":1245,"children":1246},{"class":188,"line":275},[1247],{"type":38,"tag":186,"props":1248,"children":1249},{"style":199},[1250],{"type":43,"value":391},{"type":38,"tag":186,"props":1252,"children":1253},{"class":188,"line":308},[1254],{"type":38,"tag":186,"props":1255,"children":1256},{"style":199},[1257],{"type":43,"value":400},{"type":38,"tag":186,"props":1259,"children":1260},{"class":188,"line":318},[1261],{"type":38,"tag":186,"props":1262,"children":1263},{"style":199},[1264],{"type":43,"value":1265},"# your filtering code here\n",{"type":38,"tag":186,"props":1267,"children":1268},{"class":188,"line":327},[1269],{"type":38,"tag":186,"props":1270,"children":1271},{"style":210},[1272],{"type":43,"value":491},{"type":38,"tag":46,"props":1274,"children":1275},{},[1276,1281],{"type":38,"tag":52,"props":1277,"children":1278},{},[1279],{"type":43,"value":1280},"Heredoc mode",{"type":43,"value":1282}," — for anything more complex. Single Bash call, clean multi-line Python, no escaping, no temp files:",{"type":38,"tag":175,"props":1284,"children":1286},{"className":177,"code":1285,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\nraw = subprocess.check_output(\n    ['tvly', 'search', 'query', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\nfor r in data['results']:\n    print(f\"[{r['score']:.2f}] {r['title']}\")\n    print(f\"  {r['url']}\")\nPYEOF\n",[1287],{"type":38,"tag":60,"props":1288,"children":1289},{"__ignoreMap":180},[1290,1308,1316,1324,1332,1340,1348,1356,1363,1371,1379],{"type":38,"tag":186,"props":1291,"children":1292},{"class":188,"line":189},[1293,1298,1303],{"type":38,"tag":186,"props":1294,"children":1295},{"style":193},[1296],{"type":43,"value":1297},"python3",{"type":38,"tag":186,"props":1299,"children":1300},{"style":210},[1301],{"type":43,"value":1302}," \u003C\u003C",{"type":38,"tag":186,"props":1304,"children":1305},{"style":210},[1306],{"type":43,"value":1307}," 'PYEOF'\n",{"type":38,"tag":186,"props":1309,"children":1310},{"class":188,"line":275},[1311],{"type":38,"tag":186,"props":1312,"children":1313},{"style":199},[1314],{"type":43,"value":1315},"import json, subprocess\n",{"type":38,"tag":186,"props":1317,"children":1318},{"class":188,"line":308},[1319],{"type":38,"tag":186,"props":1320,"children":1321},{"style":199},[1322],{"type":43,"value":1323},"raw = subprocess.check_output(\n",{"type":38,"tag":186,"props":1325,"children":1326},{"class":188,"line":318},[1327],{"type":38,"tag":186,"props":1328,"children":1329},{"style":199},[1330],{"type":43,"value":1331},"    ['tvly', 'search', 'query', '--json'],\n",{"type":38,"tag":186,"props":1333,"children":1334},{"class":188,"line":327},[1335],{"type":38,"tag":186,"props":1336,"children":1337},{"style":199},[1338],{"type":43,"value":1339},"    stderr=subprocess.DEVNULL\n",{"type":38,"tag":186,"props":1341,"children":1342},{"class":188,"line":385},[1343],{"type":38,"tag":186,"props":1344,"children":1345},{"style":199},[1346],{"type":43,"value":1347},")\n",{"type":38,"tag":186,"props":1349,"children":1350},{"class":188,"line":394},[1351],{"type":38,"tag":186,"props":1352,"children":1353},{"style":199},[1354],{"type":43,"value":1355},"data = json.loads(raw)\n",{"type":38,"tag":186,"props":1357,"children":1358},{"class":188,"line":403},[1359],{"type":38,"tag":186,"props":1360,"children":1361},{"style":199},[1362],{"type":43,"value":409},{"type":38,"tag":186,"props":1364,"children":1365},{"class":188,"line":412},[1366],{"type":38,"tag":186,"props":1367,"children":1368},{"style":199},[1369],{"type":43,"value":1370},"    print(f\"[{r['score']:.2f}] {r['title']}\")\n",{"type":38,"tag":186,"props":1372,"children":1373},{"class":188,"line":459},[1374],{"type":38,"tag":186,"props":1375,"children":1376},{"style":199},[1377],{"type":43,"value":1378},"    print(f\"  {r['url']}\")\n",{"type":38,"tag":186,"props":1380,"children":1381},{"class":188,"line":485},[1382],{"type":38,"tag":186,"props":1383,"children":1384},{"style":210},[1385],{"type":43,"value":1386},"PYEOF\n",{"type":38,"tag":46,"props":1388,"children":1389},{},[1390,1392,1398],{"type":43,"value":1391},"Single-quoted heredocs (",{"type":38,"tag":60,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":43,"value":1397},"\u003C\u003C 'PYEOF'",{"type":43,"value":1399},") don't interpret anything — no escaping needed. This is the default for most tasks.",{"type":38,"tag":46,"props":1401,"children":1402},{},[1403,1408,1410,1416],{"type":38,"tag":52,"props":1404,"children":1405},{},[1406],{"type":43,"value":1407},"Script mode",{"type":43,"value":1409}," — only when you will reuse the same script across multiple turns. Do NOT write one-shot scripts to ",{"type":38,"tag":60,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":43,"value":1415},"\u002Ftmp\u002F",{"type":43,"value":1417},". If you run it once, use a heredoc.",{"type":38,"tag":46,"props":1419,"children":1420},{},[1421,1433,1435,1441,1443,1449],{"type":38,"tag":52,"props":1422,"children":1423},{},[1424,1426,1431],{"type":43,"value":1425},"Important: save DATA to ",{"type":38,"tag":60,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":43,"value":1415},{"type":43,"value":1432},", not CODE.",{"type":43,"value":1434}," Writing ",{"type":38,"tag":60,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":43,"value":1440},"\u002Ftmp\u002Ftavily_results.json",{"type":43,"value":1442}," (data for later turns) = good. Writing ",{"type":38,"tag":60,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":43,"value":1448},"\u002Ftmp\u002Fmy_filter.py",{"type":43,"value":1450}," (one-shot code) = wasteful — use a heredoc instead.",{"type":38,"tag":69,"props":1452,"children":1454},{"id":1453},"multi-turn-iteration",[1455],{"type":43,"value":1456},"Multi-turn iteration",{"type":38,"tag":46,"props":1458,"children":1459},{},[1460,1462,1467],{"type":43,"value":1461},"For complex queries, you often need to ",{"type":38,"tag":52,"props":1463,"children":1464},{},[1465],{"type":43,"value":1466},"explore before you extract",{"type":43,"value":1468}," — just like PTC, where the model searches, sees titles, decides which results to drill into, then extracts.",{"type":38,"tag":46,"props":1470,"children":1471},{},[1472,1474,1479],{"type":43,"value":1473},"The key: ",{"type":38,"tag":52,"props":1475,"children":1476},{},[1477],{"type":43,"value":1478},"save raw results to a file, then process them in separate steps.",{"type":43,"value":1480}," The file is your persistent state between turns.",{"type":38,"tag":504,"props":1482,"children":1484},{"id":1483},"turn-1-search-and-explore",[1485],{"type":43,"value":1486},"Turn 1: Search and explore",{"type":38,"tag":46,"props":1488,"children":1489},{},[1490],{"type":43,"value":1491},"Search and print only titles + scores. Save raw results to disk for later turns:",{"type":38,"tag":175,"props":1493,"children":1495},{"className":177,"code":1494,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nraw = subprocess.check_output(\n    ['tvly', 'search', 'solid-state battery commercialization 2025',\n     '--include-raw-content', 'markdown', '--max-results', '8', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\n# Save raw results — this stays on disk, never enters context\nwith open('\u002Ftmp\u002Ftavily_results.json', 'w') as f:\n    json.dump(data, f)\n\n# Print only what you need to decide next steps\nprint(f'{len(data[\"results\"])} results saved to \u002Ftmp\u002Ftavily_results.json\\n')\nfor i, r in enumerate(data['results']):\n    print(f'[{i}] [{r[\"score\"]:.2f}] {r[\"title\"][:90]}')\n    print(f'    {r[\"url\"]}')\n    print(f'    {r[\"content\"][:150]}')\n    print()\nPYEOF\n",[1496],{"type":38,"tag":60,"props":1497,"children":1498},{"__ignoreMap":180},[1499,1514,1521,1528,1535,1543,1551,1558,1565,1572,1579,1587,1595,1603,1610,1619,1628,1637,1646,1655,1664,1673],{"type":38,"tag":186,"props":1500,"children":1501},{"class":188,"line":189},[1502,1506,1510],{"type":38,"tag":186,"props":1503,"children":1504},{"style":193},[1505],{"type":43,"value":1297},{"type":38,"tag":186,"props":1507,"children":1508},{"style":210},[1509],{"type":43,"value":1302},{"type":38,"tag":186,"props":1511,"children":1512},{"style":210},[1513],{"type":43,"value":1307},{"type":38,"tag":186,"props":1515,"children":1516},{"class":188,"line":275},[1517],{"type":38,"tag":186,"props":1518,"children":1519},{"style":199},[1520],{"type":43,"value":1315},{"type":38,"tag":186,"props":1522,"children":1523},{"class":188,"line":308},[1524],{"type":38,"tag":186,"props":1525,"children":1526},{"emptyLinePlaceholder":312},[1527],{"type":43,"value":315},{"type":38,"tag":186,"props":1529,"children":1530},{"class":188,"line":318},[1531],{"type":38,"tag":186,"props":1532,"children":1533},{"style":199},[1534],{"type":43,"value":1323},{"type":38,"tag":186,"props":1536,"children":1537},{"class":188,"line":327},[1538],{"type":38,"tag":186,"props":1539,"children":1540},{"style":199},[1541],{"type":43,"value":1542},"    ['tvly', 'search', 'solid-state battery commercialization 2025',\n",{"type":38,"tag":186,"props":1544,"children":1545},{"class":188,"line":385},[1546],{"type":38,"tag":186,"props":1547,"children":1548},{"style":199},[1549],{"type":43,"value":1550},"     '--include-raw-content', 'markdown', '--max-results', '8', '--json'],\n",{"type":38,"tag":186,"props":1552,"children":1553},{"class":188,"line":394},[1554],{"type":38,"tag":186,"props":1555,"children":1556},{"style":199},[1557],{"type":43,"value":1339},{"type":38,"tag":186,"props":1559,"children":1560},{"class":188,"line":403},[1561],{"type":38,"tag":186,"props":1562,"children":1563},{"style":199},[1564],{"type":43,"value":1347},{"type":38,"tag":186,"props":1566,"children":1567},{"class":188,"line":412},[1568],{"type":38,"tag":186,"props":1569,"children":1570},{"style":199},[1571],{"type":43,"value":1355},{"type":38,"tag":186,"props":1573,"children":1574},{"class":188,"line":459},[1575],{"type":38,"tag":186,"props":1576,"children":1577},{"emptyLinePlaceholder":312},[1578],{"type":43,"value":315},{"type":38,"tag":186,"props":1580,"children":1581},{"class":188,"line":485},[1582],{"type":38,"tag":186,"props":1583,"children":1584},{"style":199},[1585],{"type":43,"value":1586},"# Save raw results — this stays on disk, never enters context\n",{"type":38,"tag":186,"props":1588,"children":1589},{"class":188,"line":818},[1590],{"type":38,"tag":186,"props":1591,"children":1592},{"style":199},[1593],{"type":43,"value":1594},"with open('\u002Ftmp\u002Ftavily_results.json', 'w') as f:\n",{"type":38,"tag":186,"props":1596,"children":1597},{"class":188,"line":827},[1598],{"type":38,"tag":186,"props":1599,"children":1600},{"style":199},[1601],{"type":43,"value":1602},"    json.dump(data, f)\n",{"type":38,"tag":186,"props":1604,"children":1605},{"class":188,"line":853},[1606],{"type":38,"tag":186,"props":1607,"children":1608},{"emptyLinePlaceholder":312},[1609],{"type":43,"value":315},{"type":38,"tag":186,"props":1611,"children":1613},{"class":188,"line":1612},15,[1614],{"type":38,"tag":186,"props":1615,"children":1616},{"style":199},[1617],{"type":43,"value":1618},"# Print only what you need to decide next steps\n",{"type":38,"tag":186,"props":1620,"children":1622},{"class":188,"line":1621},16,[1623],{"type":38,"tag":186,"props":1624,"children":1625},{"style":199},[1626],{"type":43,"value":1627},"print(f'{len(data[\"results\"])} results saved to \u002Ftmp\u002Ftavily_results.json\\n')\n",{"type":38,"tag":186,"props":1629,"children":1631},{"class":188,"line":1630},17,[1632],{"type":38,"tag":186,"props":1633,"children":1634},{"style":199},[1635],{"type":43,"value":1636},"for i, r in enumerate(data['results']):\n",{"type":38,"tag":186,"props":1638,"children":1640},{"class":188,"line":1639},18,[1641],{"type":38,"tag":186,"props":1642,"children":1643},{"style":199},[1644],{"type":43,"value":1645},"    print(f'[{i}] [{r[\"score\"]:.2f}] {r[\"title\"][:90]}')\n",{"type":38,"tag":186,"props":1647,"children":1649},{"class":188,"line":1648},19,[1650],{"type":38,"tag":186,"props":1651,"children":1652},{"style":199},[1653],{"type":43,"value":1654},"    print(f'    {r[\"url\"]}')\n",{"type":38,"tag":186,"props":1656,"children":1658},{"class":188,"line":1657},20,[1659],{"type":38,"tag":186,"props":1660,"children":1661},{"style":199},[1662],{"type":43,"value":1663},"    print(f'    {r[\"content\"][:150]}')\n",{"type":38,"tag":186,"props":1665,"children":1667},{"class":188,"line":1666},21,[1668],{"type":38,"tag":186,"props":1669,"children":1670},{"style":199},[1671],{"type":43,"value":1672},"    print()\n",{"type":38,"tag":186,"props":1674,"children":1676},{"class":188,"line":1675},22,[1677],{"type":38,"tag":186,"props":1678,"children":1679},{"style":210},[1680],{"type":43,"value":1386},{"type":38,"tag":46,"props":1682,"children":1683},{},[1684,1686,1691],{"type":43,"value":1685},"Context receives: ~800 tokens of titles + snippets. The 300K of raw page content is in ",{"type":38,"tag":60,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":43,"value":1440},{"type":43,"value":1692},", untouched.",{"type":38,"tag":504,"props":1694,"children":1696},{"id":1695},"turn-2-extract-based-on-what-you-saw",[1697],{"type":43,"value":1698},"Turn 2: Extract based on what you saw",{"type":38,"tag":46,"props":1700,"children":1701},{},[1702,1704,1709],{"type":43,"value":1703},"Now you know what's in the results. Write targeted extraction — ",{"type":38,"tag":52,"props":1705,"children":1706},{},[1707],{"type":43,"value":1708},"you decide",{"type":43,"value":1710}," which results to drill into and what to filter for:",{"type":38,"tag":175,"props":1712,"children":1714},{"className":177,"code":1713,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json\n\ndata = json.load(open('\u002Ftmp\u002Ftavily_results.json'))\n\n# You chose these indices based on the titles you saw in turn 1\nfor i in [0, 2, 5]:\n    r = data['results'][i]\n    raw = r.get('raw_content', '') or ''\n    if not raw:\n        continue\n\n    print(f'## {r[\"title\"]}')\n    print(f'URL: {r[\"url\"]}\\n')\n\n    # You write the filtering logic based on the query\n    # This example extracts paragraphs about specific companies\n    for para in raw.split('\\n\\n'):\n        para = para.strip()\n        if len(para) > 80 and any(kw in para.lower() for kw in\n                ['toyota', 'quantumscape', 'samsung', 'commercializ', 'production']):\n            print(para)\n            print()\n\n    print('---\\n')\nPYEOF\n",[1715],{"type":38,"tag":60,"props":1716,"children":1717},{"__ignoreMap":180},[1718,1733,1741,1748,1756,1763,1771,1779,1787,1795,1803,1811,1818,1826,1834,1841,1849,1857,1865,1873,1881,1889,1897,1906,1914,1923],{"type":38,"tag":186,"props":1719,"children":1720},{"class":188,"line":189},[1721,1725,1729],{"type":38,"tag":186,"props":1722,"children":1723},{"style":193},[1724],{"type":43,"value":1297},{"type":38,"tag":186,"props":1726,"children":1727},{"style":210},[1728],{"type":43,"value":1302},{"type":38,"tag":186,"props":1730,"children":1731},{"style":210},[1732],{"type":43,"value":1307},{"type":38,"tag":186,"props":1734,"children":1735},{"class":188,"line":275},[1736],{"type":38,"tag":186,"props":1737,"children":1738},{"style":199},[1739],{"type":43,"value":1740},"import json\n",{"type":38,"tag":186,"props":1742,"children":1743},{"class":188,"line":308},[1744],{"type":38,"tag":186,"props":1745,"children":1746},{"emptyLinePlaceholder":312},[1747],{"type":43,"value":315},{"type":38,"tag":186,"props":1749,"children":1750},{"class":188,"line":318},[1751],{"type":38,"tag":186,"props":1752,"children":1753},{"style":199},[1754],{"type":43,"value":1755},"data = json.load(open('\u002Ftmp\u002Ftavily_results.json'))\n",{"type":38,"tag":186,"props":1757,"children":1758},{"class":188,"line":327},[1759],{"type":38,"tag":186,"props":1760,"children":1761},{"emptyLinePlaceholder":312},[1762],{"type":43,"value":315},{"type":38,"tag":186,"props":1764,"children":1765},{"class":188,"line":385},[1766],{"type":38,"tag":186,"props":1767,"children":1768},{"style":199},[1769],{"type":43,"value":1770},"# You chose these indices based on the titles you saw in turn 1\n",{"type":38,"tag":186,"props":1772,"children":1773},{"class":188,"line":394},[1774],{"type":38,"tag":186,"props":1775,"children":1776},{"style":199},[1777],{"type":43,"value":1778},"for i in [0, 2, 5]:\n",{"type":38,"tag":186,"props":1780,"children":1781},{"class":188,"line":403},[1782],{"type":38,"tag":186,"props":1783,"children":1784},{"style":199},[1785],{"type":43,"value":1786},"    r = data['results'][i]\n",{"type":38,"tag":186,"props":1788,"children":1789},{"class":188,"line":412},[1790],{"type":38,"tag":186,"props":1791,"children":1792},{"style":199},[1793],{"type":43,"value":1794},"    raw = r.get('raw_content', '') or ''\n",{"type":38,"tag":186,"props":1796,"children":1797},{"class":188,"line":459},[1798],{"type":38,"tag":186,"props":1799,"children":1800},{"style":199},[1801],{"type":43,"value":1802},"    if not raw:\n",{"type":38,"tag":186,"props":1804,"children":1805},{"class":188,"line":485},[1806],{"type":38,"tag":186,"props":1807,"children":1808},{"style":199},[1809],{"type":43,"value":1810},"        continue\n",{"type":38,"tag":186,"props":1812,"children":1813},{"class":188,"line":818},[1814],{"type":38,"tag":186,"props":1815,"children":1816},{"emptyLinePlaceholder":312},[1817],{"type":43,"value":315},{"type":38,"tag":186,"props":1819,"children":1820},{"class":188,"line":827},[1821],{"type":38,"tag":186,"props":1822,"children":1823},{"style":199},[1824],{"type":43,"value":1825},"    print(f'## {r[\"title\"]}')\n",{"type":38,"tag":186,"props":1827,"children":1828},{"class":188,"line":853},[1829],{"type":38,"tag":186,"props":1830,"children":1831},{"style":199},[1832],{"type":43,"value":1833},"    print(f'URL: {r[\"url\"]}\\n')\n",{"type":38,"tag":186,"props":1835,"children":1836},{"class":188,"line":1612},[1837],{"type":38,"tag":186,"props":1838,"children":1839},{"emptyLinePlaceholder":312},[1840],{"type":43,"value":315},{"type":38,"tag":186,"props":1842,"children":1843},{"class":188,"line":1621},[1844],{"type":38,"tag":186,"props":1845,"children":1846},{"style":199},[1847],{"type":43,"value":1848},"    # You write the filtering logic based on the query\n",{"type":38,"tag":186,"props":1850,"children":1851},{"class":188,"line":1630},[1852],{"type":38,"tag":186,"props":1853,"children":1854},{"style":199},[1855],{"type":43,"value":1856},"    # This example extracts paragraphs about specific companies\n",{"type":38,"tag":186,"props":1858,"children":1859},{"class":188,"line":1639},[1860],{"type":38,"tag":186,"props":1861,"children":1862},{"style":199},[1863],{"type":43,"value":1864},"    for para in raw.split('\\n\\n'):\n",{"type":38,"tag":186,"props":1866,"children":1867},{"class":188,"line":1648},[1868],{"type":38,"tag":186,"props":1869,"children":1870},{"style":199},[1871],{"type":43,"value":1872},"        para = para.strip()\n",{"type":38,"tag":186,"props":1874,"children":1875},{"class":188,"line":1657},[1876],{"type":38,"tag":186,"props":1877,"children":1878},{"style":199},[1879],{"type":43,"value":1880},"        if len(para) > 80 and any(kw in para.lower() for kw in\n",{"type":38,"tag":186,"props":1882,"children":1883},{"class":188,"line":1666},[1884],{"type":38,"tag":186,"props":1885,"children":1886},{"style":199},[1887],{"type":43,"value":1888},"                ['toyota', 'quantumscape', 'samsung', 'commercializ', 'production']):\n",{"type":38,"tag":186,"props":1890,"children":1891},{"class":188,"line":1675},[1892],{"type":38,"tag":186,"props":1893,"children":1894},{"style":199},[1895],{"type":43,"value":1896},"            print(para)\n",{"type":38,"tag":186,"props":1898,"children":1900},{"class":188,"line":1899},23,[1901],{"type":38,"tag":186,"props":1902,"children":1903},{"style":199},[1904],{"type":43,"value":1905},"            print()\n",{"type":38,"tag":186,"props":1907,"children":1909},{"class":188,"line":1908},24,[1910],{"type":38,"tag":186,"props":1911,"children":1912},{"emptyLinePlaceholder":312},[1913],{"type":43,"value":315},{"type":38,"tag":186,"props":1915,"children":1917},{"class":188,"line":1916},25,[1918],{"type":38,"tag":186,"props":1919,"children":1920},{"style":199},[1921],{"type":43,"value":1922},"    print('---\\n')\n",{"type":38,"tag":186,"props":1924,"children":1926},{"class":188,"line":1925},26,[1927],{"type":38,"tag":186,"props":1928,"children":1929},{"style":210},[1930],{"type":43,"value":1386},{"type":38,"tag":46,"props":1932,"children":1933},{},[1934],{"type":43,"value":1935},"Context receives: ~600 tokens of targeted content. You made the decision about what to keep.",{"type":38,"tag":504,"props":1937,"children":1939},{"id":1938},"turn-3-optional-fetch-more-detail",[1940],{"type":43,"value":1941},"Turn 3 (optional): Fetch more detail",{"type":38,"tag":46,"props":1943,"children":1944},{},[1945],{"type":43,"value":1946},"If you need more from a specific source:",{"type":38,"tag":175,"props":1948,"children":1950},{"className":177,"code":1949,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Fetch a specific URL you identified\nraw = subprocess.check_output(\n    ['tvly', 'extract', 'https:\u002F\u002Fexample.com\u002Farticle', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\npage = data['results'][0]\ncontent = page.get('raw_content', '')\n\n# Save for potential further processing\nwith open('\u002Ftmp\u002Fpage_detail.txt', 'w') as f:\n    f.write(content)\n\n# Print only the section you care about\nfor line in content.split('\\n'):\n    if any(kw in line.lower() for kw in ['timeline', '2025', '2026', 'mass production']):\n        print(line.strip())\nPYEOF\n",[1951],{"type":38,"tag":60,"props":1952,"children":1953},{"__ignoreMap":180},[1954,1969,1976,1983,1991,1998,2006,2013,2020,2027,2035,2043,2050,2058,2066,2074,2081,2089,2097,2105,2113],{"type":38,"tag":186,"props":1955,"children":1956},{"class":188,"line":189},[1957,1961,1965],{"type":38,"tag":186,"props":1958,"children":1959},{"style":193},[1960],{"type":43,"value":1297},{"type":38,"tag":186,"props":1962,"children":1963},{"style":210},[1964],{"type":43,"value":1302},{"type":38,"tag":186,"props":1966,"children":1967},{"style":210},[1968],{"type":43,"value":1307},{"type":38,"tag":186,"props":1970,"children":1971},{"class":188,"line":275},[1972],{"type":38,"tag":186,"props":1973,"children":1974},{"style":199},[1975],{"type":43,"value":1315},{"type":38,"tag":186,"props":1977,"children":1978},{"class":188,"line":308},[1979],{"type":38,"tag":186,"props":1980,"children":1981},{"emptyLinePlaceholder":312},[1982],{"type":43,"value":315},{"type":38,"tag":186,"props":1984,"children":1985},{"class":188,"line":318},[1986],{"type":38,"tag":186,"props":1987,"children":1988},{"style":199},[1989],{"type":43,"value":1990},"# Fetch a specific URL you identified\n",{"type":38,"tag":186,"props":1992,"children":1993},{"class":188,"line":327},[1994],{"type":38,"tag":186,"props":1995,"children":1996},{"style":199},[1997],{"type":43,"value":1323},{"type":38,"tag":186,"props":1999,"children":2000},{"class":188,"line":385},[2001],{"type":38,"tag":186,"props":2002,"children":2003},{"style":199},[2004],{"type":43,"value":2005},"    ['tvly', 'extract', 'https:\u002F\u002Fexample.com\u002Farticle', '--json'],\n",{"type":38,"tag":186,"props":2007,"children":2008},{"class":188,"line":394},[2009],{"type":38,"tag":186,"props":2010,"children":2011},{"style":199},[2012],{"type":43,"value":1339},{"type":38,"tag":186,"props":2014,"children":2015},{"class":188,"line":403},[2016],{"type":38,"tag":186,"props":2017,"children":2018},{"style":199},[2019],{"type":43,"value":1347},{"type":38,"tag":186,"props":2021,"children":2022},{"class":188,"line":412},[2023],{"type":38,"tag":186,"props":2024,"children":2025},{"style":199},[2026],{"type":43,"value":1355},{"type":38,"tag":186,"props":2028,"children":2029},{"class":188,"line":459},[2030],{"type":38,"tag":186,"props":2031,"children":2032},{"style":199},[2033],{"type":43,"value":2034},"page = data['results'][0]\n",{"type":38,"tag":186,"props":2036,"children":2037},{"class":188,"line":485},[2038],{"type":38,"tag":186,"props":2039,"children":2040},{"style":199},[2041],{"type":43,"value":2042},"content = page.get('raw_content', '')\n",{"type":38,"tag":186,"props":2044,"children":2045},{"class":188,"line":818},[2046],{"type":38,"tag":186,"props":2047,"children":2048},{"emptyLinePlaceholder":312},[2049],{"type":43,"value":315},{"type":38,"tag":186,"props":2051,"children":2052},{"class":188,"line":827},[2053],{"type":38,"tag":186,"props":2054,"children":2055},{"style":199},[2056],{"type":43,"value":2057},"# Save for potential further processing\n",{"type":38,"tag":186,"props":2059,"children":2060},{"class":188,"line":853},[2061],{"type":38,"tag":186,"props":2062,"children":2063},{"style":199},[2064],{"type":43,"value":2065},"with open('\u002Ftmp\u002Fpage_detail.txt', 'w') as f:\n",{"type":38,"tag":186,"props":2067,"children":2068},{"class":188,"line":1612},[2069],{"type":38,"tag":186,"props":2070,"children":2071},{"style":199},[2072],{"type":43,"value":2073},"    f.write(content)\n",{"type":38,"tag":186,"props":2075,"children":2076},{"class":188,"line":1621},[2077],{"type":38,"tag":186,"props":2078,"children":2079},{"emptyLinePlaceholder":312},[2080],{"type":43,"value":315},{"type":38,"tag":186,"props":2082,"children":2083},{"class":188,"line":1630},[2084],{"type":38,"tag":186,"props":2085,"children":2086},{"style":199},[2087],{"type":43,"value":2088},"# Print only the section you care about\n",{"type":38,"tag":186,"props":2090,"children":2091},{"class":188,"line":1639},[2092],{"type":38,"tag":186,"props":2093,"children":2094},{"style":199},[2095],{"type":43,"value":2096},"for line in content.split('\\n'):\n",{"type":38,"tag":186,"props":2098,"children":2099},{"class":188,"line":1648},[2100],{"type":38,"tag":186,"props":2101,"children":2102},{"style":199},[2103],{"type":43,"value":2104},"    if any(kw in line.lower() for kw in ['timeline', '2025', '2026', 'mass production']):\n",{"type":38,"tag":186,"props":2106,"children":2107},{"class":188,"line":1657},[2108],{"type":38,"tag":186,"props":2109,"children":2110},{"style":199},[2111],{"type":43,"value":2112},"        print(line.strip())\n",{"type":38,"tag":186,"props":2114,"children":2115},{"class":188,"line":1666},[2116],{"type":38,"tag":186,"props":2117,"children":2118},{"style":210},[2119],{"type":43,"value":1386},{"type":38,"tag":504,"props":2121,"children":2123},{"id":2122},"when-to-use-multi-turn-vs-single-turn",[2124],{"type":43,"value":2125},"When to use multi-turn vs single-turn",{"type":38,"tag":46,"props":2127,"children":2128},{},[2129,2134],{"type":38,"tag":52,"props":2130,"children":2131},{},[2132],{"type":43,"value":2133},"Single turn",{"type":43,"value":2135}," (pipe mode or one script): when you know upfront what you're looking for. Specific factual queries, known keywords.",{"type":38,"tag":46,"props":2137,"children":2138},{},[2139,2144],{"type":38,"tag":52,"props":2140,"children":2141},{},[2142],{"type":43,"value":2143},"Multi-turn",{"type":43,"value":2145}," (save + explore + extract): when you need to see what's available before deciding what to extract. Open-ended research, complex topics, queries where you don't know the right keywords yet.",{"type":38,"tag":69,"props":2147,"children":2149},{"id":2148},"examples",[2150],{"type":43,"value":2151},"Examples",{"type":38,"tag":504,"props":2153,"children":2155},{"id":2154},"simple-factual-lookup-single-turn-pipe-mode",[2156],{"type":43,"value":2157},"Simple factual lookup (single turn, pipe mode)",{"type":38,"tag":175,"props":2159,"children":2161},{"className":177,"code":2160,"language":179,"meta":180,"style":180},"tvly search \"Python 3.13 release date\" --max-results 5 --json 2>\u002Fdev\u002Fnull | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nfor r in data['results'][:3]:\n    print(f'{r[\\\"title\\\"]}')\n    print(f'{r[\\\"content\\\"][:300]}')\n    print()\n\"\n",[2162],{"type":38,"tag":60,"props":2163,"children":2164},{"__ignoreMap":180},[2165,2227,2234,2241,2249,2273,2297,2304],{"type":38,"tag":186,"props":2166,"children":2167},{"class":188,"line":189},[2168,2172,2176,2180,2185,2189,2194,2199,2203,2207,2211,2215,2219,2223],{"type":38,"tag":186,"props":2169,"children":2170},{"style":193},[2171],{"type":43,"value":171},{"type":38,"tag":186,"props":2173,"children":2174},{"style":199},[2175],{"type":43,"value":285},{"type":38,"tag":186,"props":2177,"children":2178},{"style":210},[2179],{"type":43,"value":290},{"type":38,"tag":186,"props":2181,"children":2182},{"style":199},[2183],{"type":43,"value":2184},"Python 3.13 release date",{"type":38,"tag":186,"props":2186,"children":2187},{"style":210},[2188],{"type":43,"value":300},{"type":38,"tag":186,"props":2190,"children":2191},{"style":199},[2192],{"type":43,"value":2193}," --max-results",{"type":38,"tag":186,"props":2195,"children":2196},{"style":767},[2197],{"type":43,"value":2198}," 5",{"type":38,"tag":186,"props":2200,"children":2201},{"style":199},[2202],{"type":43,"value":353},{"type":38,"tag":186,"props":2204,"children":2205},{"style":210},[2206],{"type":43,"value":358},{"type":38,"tag":186,"props":2208,"children":2209},{"style":199},[2210],{"type":43,"value":363},{"type":38,"tag":186,"props":2212,"children":2213},{"style":210},[2214],{"type":43,"value":213},{"type":38,"tag":186,"props":2216,"children":2217},{"style":193},[2218],{"type":43,"value":372},{"type":38,"tag":186,"props":2220,"children":2221},{"style":199},[2222],{"type":43,"value":377},{"type":38,"tag":186,"props":2224,"children":2225},{"style":210},[2226],{"type":43,"value":382},{"type":38,"tag":186,"props":2228,"children":2229},{"class":188,"line":275},[2230],{"type":38,"tag":186,"props":2231,"children":2232},{"style":199},[2233],{"type":43,"value":391},{"type":38,"tag":186,"props":2235,"children":2236},{"class":188,"line":308},[2237],{"type":38,"tag":186,"props":2238,"children":2239},{"style":199},[2240],{"type":43,"value":400},{"type":38,"tag":186,"props":2242,"children":2243},{"class":188,"line":318},[2244],{"type":38,"tag":186,"props":2245,"children":2246},{"style":199},[2247],{"type":43,"value":2248},"for r in data['results'][:3]:\n",{"type":38,"tag":186,"props":2250,"children":2251},{"class":188,"line":327},[2252,2257,2261,2265,2269],{"type":38,"tag":186,"props":2253,"children":2254},{"style":199},[2255],{"type":43,"value":2256},"    print(f'{r[",{"type":38,"tag":186,"props":2258,"children":2259},{"style":421},[2260],{"type":43,"value":424},{"type":38,"tag":186,"props":2262,"children":2263},{"style":199},[2264],{"type":43,"value":447},{"type":38,"tag":186,"props":2266,"children":2267},{"style":421},[2268],{"type":43,"value":424},{"type":38,"tag":186,"props":2270,"children":2271},{"style":199},[2272],{"type":43,"value":456},{"type":38,"tag":186,"props":2274,"children":2275},{"class":188,"line":385},[2276,2280,2284,2288,2292],{"type":38,"tag":186,"props":2277,"children":2278},{"style":199},[2279],{"type":43,"value":2256},{"type":38,"tag":186,"props":2281,"children":2282},{"style":421},[2283],{"type":43,"value":424},{"type":38,"tag":186,"props":2285,"children":2286},{"style":199},[2287],{"type":43,"value":720},{"type":38,"tag":186,"props":2289,"children":2290},{"style":421},[2291],{"type":43,"value":424},{"type":38,"tag":186,"props":2293,"children":2294},{"style":199},[2295],{"type":43,"value":2296},"][:300]}')\n",{"type":38,"tag":186,"props":2298,"children":2299},{"class":188,"line":394},[2300],{"type":38,"tag":186,"props":2301,"children":2302},{"style":199},[2303],{"type":43,"value":1672},{"type":38,"tag":186,"props":2305,"children":2306},{"class":188,"line":403},[2307],{"type":38,"tag":186,"props":2308,"children":2309},{"style":210},[2310],{"type":43,"value":491},{"type":38,"tag":504,"props":2312,"children":2314},{"id":2313},"financial-data-extraction-single-turn-heredoc",[2315],{"type":43,"value":2316},"Financial data extraction (single turn, heredoc)",{"type":38,"tag":175,"props":2318,"children":2320},{"className":177,"code":2319,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nraw = subprocess.check_output(\n    ['tvly', 'search', 'NVIDIA Q4 2025 earnings revenue',\n     '--include-raw-content', 'markdown', '--max-results', '5',\n     '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\nfor r in data['results']:\n    raw_content = r.get('raw_content', '') or ''\n    # For financial queries, look for lines with numbers\n    financial_lines = [\n        line.strip() for line in raw_content.split('\\n')\n        if any(kw in line.lower() for kw in\n               ['revenue', 'eps', 'earnings', 'margin', 'guidance', 'billion'])\n        and any(c.isdigit() for c in line)\n        and len(line.strip()) > 30\n    ]\n    if financial_lines:\n        print(f'## {r[\"title\"]}')\n        print(f'URL: {r[\"url\"]}')\n        for line in financial_lines[:15]:\n            print(f'  {line}')\n        print()\nPYEOF\n",[2321],{"type":38,"tag":60,"props":2322,"children":2323},{"__ignoreMap":180},[2324,2339,2346,2353,2360,2368,2376,2384,2391,2398,2405,2412,2419,2427,2435,2443,2451,2459,2467,2475,2483,2491,2499,2507,2515,2523,2531,2540],{"type":38,"tag":186,"props":2325,"children":2326},{"class":188,"line":189},[2327,2331,2335],{"type":38,"tag":186,"props":2328,"children":2329},{"style":193},[2330],{"type":43,"value":1297},{"type":38,"tag":186,"props":2332,"children":2333},{"style":210},[2334],{"type":43,"value":1302},{"type":38,"tag":186,"props":2336,"children":2337},{"style":210},[2338],{"type":43,"value":1307},{"type":38,"tag":186,"props":2340,"children":2341},{"class":188,"line":275},[2342],{"type":38,"tag":186,"props":2343,"children":2344},{"style":199},[2345],{"type":43,"value":1315},{"type":38,"tag":186,"props":2347,"children":2348},{"class":188,"line":308},[2349],{"type":38,"tag":186,"props":2350,"children":2351},{"emptyLinePlaceholder":312},[2352],{"type":43,"value":315},{"type":38,"tag":186,"props":2354,"children":2355},{"class":188,"line":318},[2356],{"type":38,"tag":186,"props":2357,"children":2358},{"style":199},[2359],{"type":43,"value":1323},{"type":38,"tag":186,"props":2361,"children":2362},{"class":188,"line":327},[2363],{"type":38,"tag":186,"props":2364,"children":2365},{"style":199},[2366],{"type":43,"value":2367},"    ['tvly', 'search', 'NVIDIA Q4 2025 earnings revenue',\n",{"type":38,"tag":186,"props":2369,"children":2370},{"class":188,"line":385},[2371],{"type":38,"tag":186,"props":2372,"children":2373},{"style":199},[2374],{"type":43,"value":2375},"     '--include-raw-content', 'markdown', '--max-results', '5',\n",{"type":38,"tag":186,"props":2377,"children":2378},{"class":188,"line":394},[2379],{"type":38,"tag":186,"props":2380,"children":2381},{"style":199},[2382],{"type":43,"value":2383},"     '--json'],\n",{"type":38,"tag":186,"props":2385,"children":2386},{"class":188,"line":403},[2387],{"type":38,"tag":186,"props":2388,"children":2389},{"style":199},[2390],{"type":43,"value":1339},{"type":38,"tag":186,"props":2392,"children":2393},{"class":188,"line":412},[2394],{"type":38,"tag":186,"props":2395,"children":2396},{"style":199},[2397],{"type":43,"value":1347},{"type":38,"tag":186,"props":2399,"children":2400},{"class":188,"line":459},[2401],{"type":38,"tag":186,"props":2402,"children":2403},{"style":199},[2404],{"type":43,"value":1355},{"type":38,"tag":186,"props":2406,"children":2407},{"class":188,"line":485},[2408],{"type":38,"tag":186,"props":2409,"children":2410},{"emptyLinePlaceholder":312},[2411],{"type":43,"value":315},{"type":38,"tag":186,"props":2413,"children":2414},{"class":188,"line":818},[2415],{"type":38,"tag":186,"props":2416,"children":2417},{"style":199},[2418],{"type":43,"value":409},{"type":38,"tag":186,"props":2420,"children":2421},{"class":188,"line":827},[2422],{"type":38,"tag":186,"props":2423,"children":2424},{"style":199},[2425],{"type":43,"value":2426},"    raw_content = r.get('raw_content', '') or ''\n",{"type":38,"tag":186,"props":2428,"children":2429},{"class":188,"line":853},[2430],{"type":38,"tag":186,"props":2431,"children":2432},{"style":199},[2433],{"type":43,"value":2434},"    # For financial queries, look for lines with numbers\n",{"type":38,"tag":186,"props":2436,"children":2437},{"class":188,"line":1612},[2438],{"type":38,"tag":186,"props":2439,"children":2440},{"style":199},[2441],{"type":43,"value":2442},"    financial_lines = [\n",{"type":38,"tag":186,"props":2444,"children":2445},{"class":188,"line":1621},[2446],{"type":38,"tag":186,"props":2447,"children":2448},{"style":199},[2449],{"type":43,"value":2450},"        line.strip() for line in raw_content.split('\\n')\n",{"type":38,"tag":186,"props":2452,"children":2453},{"class":188,"line":1630},[2454],{"type":38,"tag":186,"props":2455,"children":2456},{"style":199},[2457],{"type":43,"value":2458},"        if any(kw in line.lower() for kw in\n",{"type":38,"tag":186,"props":2460,"children":2461},{"class":188,"line":1639},[2462],{"type":38,"tag":186,"props":2463,"children":2464},{"style":199},[2465],{"type":43,"value":2466},"               ['revenue', 'eps', 'earnings', 'margin', 'guidance', 'billion'])\n",{"type":38,"tag":186,"props":2468,"children":2469},{"class":188,"line":1648},[2470],{"type":38,"tag":186,"props":2471,"children":2472},{"style":199},[2473],{"type":43,"value":2474},"        and any(c.isdigit() for c in line)\n",{"type":38,"tag":186,"props":2476,"children":2477},{"class":188,"line":1657},[2478],{"type":38,"tag":186,"props":2479,"children":2480},{"style":199},[2481],{"type":43,"value":2482},"        and len(line.strip()) > 30\n",{"type":38,"tag":186,"props":2484,"children":2485},{"class":188,"line":1666},[2486],{"type":38,"tag":186,"props":2487,"children":2488},{"style":199},[2489],{"type":43,"value":2490},"    ]\n",{"type":38,"tag":186,"props":2492,"children":2493},{"class":188,"line":1675},[2494],{"type":38,"tag":186,"props":2495,"children":2496},{"style":199},[2497],{"type":43,"value":2498},"    if financial_lines:\n",{"type":38,"tag":186,"props":2500,"children":2501},{"class":188,"line":1899},[2502],{"type":38,"tag":186,"props":2503,"children":2504},{"style":199},[2505],{"type":43,"value":2506},"        print(f'## {r[\"title\"]}')\n",{"type":38,"tag":186,"props":2508,"children":2509},{"class":188,"line":1908},[2510],{"type":38,"tag":186,"props":2511,"children":2512},{"style":199},[2513],{"type":43,"value":2514},"        print(f'URL: {r[\"url\"]}')\n",{"type":38,"tag":186,"props":2516,"children":2517},{"class":188,"line":1916},[2518],{"type":38,"tag":186,"props":2519,"children":2520},{"style":199},[2521],{"type":43,"value":2522},"        for line in financial_lines[:15]:\n",{"type":38,"tag":186,"props":2524,"children":2525},{"class":188,"line":1925},[2526],{"type":38,"tag":186,"props":2527,"children":2528},{"style":199},[2529],{"type":43,"value":2530},"            print(f'  {line}')\n",{"type":38,"tag":186,"props":2532,"children":2534},{"class":188,"line":2533},27,[2535],{"type":38,"tag":186,"props":2536,"children":2537},{"style":199},[2538],{"type":43,"value":2539},"        print()\n",{"type":38,"tag":186,"props":2541,"children":2543},{"class":188,"line":2542},28,[2544],{"type":38,"tag":186,"props":2545,"children":2546},{"style":210},[2547],{"type":43,"value":1386},{"type":38,"tag":504,"props":2549,"children":2551},{"id":2550},"multi-source-research-multi-turn",[2552],{"type":43,"value":2553},"Multi-source research (multi-turn)",{"type":38,"tag":46,"props":2555,"children":2556},{},[2557,2562],{"type":38,"tag":52,"props":2558,"children":2559},{},[2560],{"type":43,"value":2561},"Turn 1",{"type":43,"value":2563}," — broad search + triage:",{"type":38,"tag":175,"props":2565,"children":2567},{"className":177,"code":2566,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Search from multiple angles\nqueries = [\n    ('broad', 'EU AI Act implementation timeline 2025'),\n    ('specific', 'EU AI Act high-risk AI systems obligations'),\n]\n\nall_results = []\nfor label, query in queries:\n    raw = subprocess.check_output(\n        ['tvly', 'search', query, '--max-results', '8', '--json'],\n        stderr=subprocess.DEVNULL\n    )\n    data = json.loads(raw)\n    for r in data['results']:\n        r['_query'] = label\n    all_results.extend(data['results'])\n\n# Deduplicate by URL\nseen = set()\nunique = []\nfor r in all_results:\n    if r['url'] not in seen:\n        seen.add(r['url'])\n        unique.append(r)\n\n# Save all results\nwith open('\u002Ftmp\u002Feu_ai_results.json', 'w') as f:\n    json.dump(unique, f)\n\n# Print triage\nunique.sort(key=lambda r: r['score'], reverse=True)\nprint(f'{len(unique)} unique results from {len(queries)} queries\\n')\nfor i, r in enumerate(unique[:10]):\n    print(f'[{i}] [{r[\"score\"]:.2f}] ({r[\"_query\"]}) {r[\"title\"][:80]}')\n    print(f'    {r[\"url\"]}')\n    print(f'    {r[\"content\"][:120]}')\n    print()\nPYEOF\n",[2568],{"type":38,"tag":60,"props":2569,"children":2570},{"__ignoreMap":180},[2571,2586,2593,2600,2608,2616,2624,2632,2640,2647,2655,2663,2671,2679,2687,2695,2703,2711,2719,2727,2734,2742,2750,2758,2766,2774,2782,2790,2797,2806,2815,2824,2832,2841,2850,2859,2867,2876,2884,2893,2901],{"type":38,"tag":186,"props":2572,"children":2573},{"class":188,"line":189},[2574,2578,2582],{"type":38,"tag":186,"props":2575,"children":2576},{"style":193},[2577],{"type":43,"value":1297},{"type":38,"tag":186,"props":2579,"children":2580},{"style":210},[2581],{"type":43,"value":1302},{"type":38,"tag":186,"props":2583,"children":2584},{"style":210},[2585],{"type":43,"value":1307},{"type":38,"tag":186,"props":2587,"children":2588},{"class":188,"line":275},[2589],{"type":38,"tag":186,"props":2590,"children":2591},{"style":199},[2592],{"type":43,"value":1315},{"type":38,"tag":186,"props":2594,"children":2595},{"class":188,"line":308},[2596],{"type":38,"tag":186,"props":2597,"children":2598},{"emptyLinePlaceholder":312},[2599],{"type":43,"value":315},{"type":38,"tag":186,"props":2601,"children":2602},{"class":188,"line":318},[2603],{"type":38,"tag":186,"props":2604,"children":2605},{"style":199},[2606],{"type":43,"value":2607},"# Search from multiple angles\n",{"type":38,"tag":186,"props":2609,"children":2610},{"class":188,"line":327},[2611],{"type":38,"tag":186,"props":2612,"children":2613},{"style":199},[2614],{"type":43,"value":2615},"queries = [\n",{"type":38,"tag":186,"props":2617,"children":2618},{"class":188,"line":385},[2619],{"type":38,"tag":186,"props":2620,"children":2621},{"style":199},[2622],{"type":43,"value":2623},"    ('broad', 'EU AI Act implementation timeline 2025'),\n",{"type":38,"tag":186,"props":2625,"children":2626},{"class":188,"line":394},[2627],{"type":38,"tag":186,"props":2628,"children":2629},{"style":199},[2630],{"type":43,"value":2631},"    ('specific', 'EU AI Act high-risk AI systems obligations'),\n",{"type":38,"tag":186,"props":2633,"children":2634},{"class":188,"line":403},[2635],{"type":38,"tag":186,"props":2636,"children":2637},{"style":199},[2638],{"type":43,"value":2639},"]\n",{"type":38,"tag":186,"props":2641,"children":2642},{"class":188,"line":412},[2643],{"type":38,"tag":186,"props":2644,"children":2645},{"emptyLinePlaceholder":312},[2646],{"type":43,"value":315},{"type":38,"tag":186,"props":2648,"children":2649},{"class":188,"line":459},[2650],{"type":38,"tag":186,"props":2651,"children":2652},{"style":199},[2653],{"type":43,"value":2654},"all_results = []\n",{"type":38,"tag":186,"props":2656,"children":2657},{"class":188,"line":485},[2658],{"type":38,"tag":186,"props":2659,"children":2660},{"style":199},[2661],{"type":43,"value":2662},"for label, query in queries:\n",{"type":38,"tag":186,"props":2664,"children":2665},{"class":188,"line":818},[2666],{"type":38,"tag":186,"props":2667,"children":2668},{"style":199},[2669],{"type":43,"value":2670},"    raw = subprocess.check_output(\n",{"type":38,"tag":186,"props":2672,"children":2673},{"class":188,"line":827},[2674],{"type":38,"tag":186,"props":2675,"children":2676},{"style":199},[2677],{"type":43,"value":2678},"        ['tvly', 'search', query, '--max-results', '8', '--json'],\n",{"type":38,"tag":186,"props":2680,"children":2681},{"class":188,"line":853},[2682],{"type":38,"tag":186,"props":2683,"children":2684},{"style":199},[2685],{"type":43,"value":2686},"        stderr=subprocess.DEVNULL\n",{"type":38,"tag":186,"props":2688,"children":2689},{"class":188,"line":1612},[2690],{"type":38,"tag":186,"props":2691,"children":2692},{"style":199},[2693],{"type":43,"value":2694},"    )\n",{"type":38,"tag":186,"props":2696,"children":2697},{"class":188,"line":1621},[2698],{"type":38,"tag":186,"props":2699,"children":2700},{"style":199},[2701],{"type":43,"value":2702},"    data = json.loads(raw)\n",{"type":38,"tag":186,"props":2704,"children":2705},{"class":188,"line":1630},[2706],{"type":38,"tag":186,"props":2707,"children":2708},{"style":199},[2709],{"type":43,"value":2710},"    for r in data['results']:\n",{"type":38,"tag":186,"props":2712,"children":2713},{"class":188,"line":1639},[2714],{"type":38,"tag":186,"props":2715,"children":2716},{"style":199},[2717],{"type":43,"value":2718},"        r['_query'] = label\n",{"type":38,"tag":186,"props":2720,"children":2721},{"class":188,"line":1648},[2722],{"type":38,"tag":186,"props":2723,"children":2724},{"style":199},[2725],{"type":43,"value":2726},"    all_results.extend(data['results'])\n",{"type":38,"tag":186,"props":2728,"children":2729},{"class":188,"line":1657},[2730],{"type":38,"tag":186,"props":2731,"children":2732},{"emptyLinePlaceholder":312},[2733],{"type":43,"value":315},{"type":38,"tag":186,"props":2735,"children":2736},{"class":188,"line":1666},[2737],{"type":38,"tag":186,"props":2738,"children":2739},{"style":199},[2740],{"type":43,"value":2741},"# Deduplicate by URL\n",{"type":38,"tag":186,"props":2743,"children":2744},{"class":188,"line":1675},[2745],{"type":38,"tag":186,"props":2746,"children":2747},{"style":199},[2748],{"type":43,"value":2749},"seen = set()\n",{"type":38,"tag":186,"props":2751,"children":2752},{"class":188,"line":1899},[2753],{"type":38,"tag":186,"props":2754,"children":2755},{"style":199},[2756],{"type":43,"value":2757},"unique = []\n",{"type":38,"tag":186,"props":2759,"children":2760},{"class":188,"line":1908},[2761],{"type":38,"tag":186,"props":2762,"children":2763},{"style":199},[2764],{"type":43,"value":2765},"for r in all_results:\n",{"type":38,"tag":186,"props":2767,"children":2768},{"class":188,"line":1916},[2769],{"type":38,"tag":186,"props":2770,"children":2771},{"style":199},[2772],{"type":43,"value":2773},"    if r['url'] not in seen:\n",{"type":38,"tag":186,"props":2775,"children":2776},{"class":188,"line":1925},[2777],{"type":38,"tag":186,"props":2778,"children":2779},{"style":199},[2780],{"type":43,"value":2781},"        seen.add(r['url'])\n",{"type":38,"tag":186,"props":2783,"children":2784},{"class":188,"line":2533},[2785],{"type":38,"tag":186,"props":2786,"children":2787},{"style":199},[2788],{"type":43,"value":2789},"        unique.append(r)\n",{"type":38,"tag":186,"props":2791,"children":2792},{"class":188,"line":2542},[2793],{"type":38,"tag":186,"props":2794,"children":2795},{"emptyLinePlaceholder":312},[2796],{"type":43,"value":315},{"type":38,"tag":186,"props":2798,"children":2800},{"class":188,"line":2799},29,[2801],{"type":38,"tag":186,"props":2802,"children":2803},{"style":199},[2804],{"type":43,"value":2805},"# Save all results\n",{"type":38,"tag":186,"props":2807,"children":2809},{"class":188,"line":2808},30,[2810],{"type":38,"tag":186,"props":2811,"children":2812},{"style":199},[2813],{"type":43,"value":2814},"with open('\u002Ftmp\u002Feu_ai_results.json', 'w') as f:\n",{"type":38,"tag":186,"props":2816,"children":2818},{"class":188,"line":2817},31,[2819],{"type":38,"tag":186,"props":2820,"children":2821},{"style":199},[2822],{"type":43,"value":2823},"    json.dump(unique, f)\n",{"type":38,"tag":186,"props":2825,"children":2827},{"class":188,"line":2826},32,[2828],{"type":38,"tag":186,"props":2829,"children":2830},{"emptyLinePlaceholder":312},[2831],{"type":43,"value":315},{"type":38,"tag":186,"props":2833,"children":2835},{"class":188,"line":2834},33,[2836],{"type":38,"tag":186,"props":2837,"children":2838},{"style":199},[2839],{"type":43,"value":2840},"# Print triage\n",{"type":38,"tag":186,"props":2842,"children":2844},{"class":188,"line":2843},34,[2845],{"type":38,"tag":186,"props":2846,"children":2847},{"style":199},[2848],{"type":43,"value":2849},"unique.sort(key=lambda r: r['score'], reverse=True)\n",{"type":38,"tag":186,"props":2851,"children":2853},{"class":188,"line":2852},35,[2854],{"type":38,"tag":186,"props":2855,"children":2856},{"style":199},[2857],{"type":43,"value":2858},"print(f'{len(unique)} unique results from {len(queries)} queries\\n')\n",{"type":38,"tag":186,"props":2860,"children":2861},{"class":188,"line":25},[2862],{"type":38,"tag":186,"props":2863,"children":2864},{"style":199},[2865],{"type":43,"value":2866},"for i, r in enumerate(unique[:10]):\n",{"type":38,"tag":186,"props":2868,"children":2870},{"class":188,"line":2869},37,[2871],{"type":38,"tag":186,"props":2872,"children":2873},{"style":199},[2874],{"type":43,"value":2875},"    print(f'[{i}] [{r[\"score\"]:.2f}] ({r[\"_query\"]}) {r[\"title\"][:80]}')\n",{"type":38,"tag":186,"props":2877,"children":2879},{"class":188,"line":2878},38,[2880],{"type":38,"tag":186,"props":2881,"children":2882},{"style":199},[2883],{"type":43,"value":1654},{"type":38,"tag":186,"props":2885,"children":2887},{"class":188,"line":2886},39,[2888],{"type":38,"tag":186,"props":2889,"children":2890},{"style":199},[2891],{"type":43,"value":2892},"    print(f'    {r[\"content\"][:120]}')\n",{"type":38,"tag":186,"props":2894,"children":2896},{"class":188,"line":2895},40,[2897],{"type":38,"tag":186,"props":2898,"children":2899},{"style":199},[2900],{"type":43,"value":1672},{"type":38,"tag":186,"props":2902,"children":2904},{"class":188,"line":2903},41,[2905],{"type":38,"tag":186,"props":2906,"children":2907},{"style":210},[2908],{"type":43,"value":1386},{"type":38,"tag":46,"props":2910,"children":2911},{},[2912,2917],{"type":38,"tag":52,"props":2913,"children":2914},{},[2915],{"type":43,"value":2916},"Turn 2",{"type":43,"value":2918}," — you see the triage, pick the best sources, and extract:",{"type":38,"tag":175,"props":2920,"children":2922},{"className":177,"code":2921,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\nresults = json.load(open('\u002Ftmp\u002Feu_ai_results.json'))\n\n# Fetch full content for the top 3 (you chose these based on turn 1)\nfor r in [results[0], results[2], results[4]]:\n    try:\n        raw = subprocess.check_output(\n            ['tvly', 'extract', r['url'], '--json'],\n            stderr=subprocess.DEVNULL, timeout=30\n        )\n        page = json.loads(raw)\n        if not page.get('results'):\n            continue\n        content = page['results'][0].get('raw_content', '')\n\n        # Your filtering logic — tailored to this query\n        print(f'## {r[\"title\"]}')\n        print(f'URL: {r[\"url\"]}\\n')\n\n        for para in content.split('\\n\\n'):\n            para = para.strip()\n            if len(para) > 100 and any(kw in para.lower() for kw in\n                    ['high-risk', 'prohibited', 'deadline', 'obligation',\n                     'compliance', 'penalty', 'fine', 'article']):\n                print(para)\n                print()\n\n        print('---\\n')\n    except Exception:\n        continue\nPYEOF\n",[2923],{"type":38,"tag":60,"props":2924,"children":2925},{"__ignoreMap":180},[2926,2941,2948,2955,2963,2970,2978,2986,2994,3002,3010,3018,3026,3034,3042,3050,3058,3065,3073,3080,3088,3095,3103,3111,3119,3127,3135,3143,3151,3158,3166,3174,3181],{"type":38,"tag":186,"props":2927,"children":2928},{"class":188,"line":189},[2929,2933,2937],{"type":38,"tag":186,"props":2930,"children":2931},{"style":193},[2932],{"type":43,"value":1297},{"type":38,"tag":186,"props":2934,"children":2935},{"style":210},[2936],{"type":43,"value":1302},{"type":38,"tag":186,"props":2938,"children":2939},{"style":210},[2940],{"type":43,"value":1307},{"type":38,"tag":186,"props":2942,"children":2943},{"class":188,"line":275},[2944],{"type":38,"tag":186,"props":2945,"children":2946},{"style":199},[2947],{"type":43,"value":1315},{"type":38,"tag":186,"props":2949,"children":2950},{"class":188,"line":308},[2951],{"type":38,"tag":186,"props":2952,"children":2953},{"emptyLinePlaceholder":312},[2954],{"type":43,"value":315},{"type":38,"tag":186,"props":2956,"children":2957},{"class":188,"line":318},[2958],{"type":38,"tag":186,"props":2959,"children":2960},{"style":199},[2961],{"type":43,"value":2962},"results = json.load(open('\u002Ftmp\u002Feu_ai_results.json'))\n",{"type":38,"tag":186,"props":2964,"children":2965},{"class":188,"line":327},[2966],{"type":38,"tag":186,"props":2967,"children":2968},{"emptyLinePlaceholder":312},[2969],{"type":43,"value":315},{"type":38,"tag":186,"props":2971,"children":2972},{"class":188,"line":385},[2973],{"type":38,"tag":186,"props":2974,"children":2975},{"style":199},[2976],{"type":43,"value":2977},"# Fetch full content for the top 3 (you chose these based on turn 1)\n",{"type":38,"tag":186,"props":2979,"children":2980},{"class":188,"line":394},[2981],{"type":38,"tag":186,"props":2982,"children":2983},{"style":199},[2984],{"type":43,"value":2985},"for r in [results[0], results[2], results[4]]:\n",{"type":38,"tag":186,"props":2987,"children":2988},{"class":188,"line":403},[2989],{"type":38,"tag":186,"props":2990,"children":2991},{"style":199},[2992],{"type":43,"value":2993},"    try:\n",{"type":38,"tag":186,"props":2995,"children":2996},{"class":188,"line":412},[2997],{"type":38,"tag":186,"props":2998,"children":2999},{"style":199},[3000],{"type":43,"value":3001},"        raw = subprocess.check_output(\n",{"type":38,"tag":186,"props":3003,"children":3004},{"class":188,"line":459},[3005],{"type":38,"tag":186,"props":3006,"children":3007},{"style":199},[3008],{"type":43,"value":3009},"            ['tvly', 'extract', r['url'], '--json'],\n",{"type":38,"tag":186,"props":3011,"children":3012},{"class":188,"line":485},[3013],{"type":38,"tag":186,"props":3014,"children":3015},{"style":199},[3016],{"type":43,"value":3017},"            stderr=subprocess.DEVNULL, timeout=30\n",{"type":38,"tag":186,"props":3019,"children":3020},{"class":188,"line":818},[3021],{"type":38,"tag":186,"props":3022,"children":3023},{"style":199},[3024],{"type":43,"value":3025},"        )\n",{"type":38,"tag":186,"props":3027,"children":3028},{"class":188,"line":827},[3029],{"type":38,"tag":186,"props":3030,"children":3031},{"style":199},[3032],{"type":43,"value":3033},"        page = json.loads(raw)\n",{"type":38,"tag":186,"props":3035,"children":3036},{"class":188,"line":853},[3037],{"type":38,"tag":186,"props":3038,"children":3039},{"style":199},[3040],{"type":43,"value":3041},"        if not page.get('results'):\n",{"type":38,"tag":186,"props":3043,"children":3044},{"class":188,"line":1612},[3045],{"type":38,"tag":186,"props":3046,"children":3047},{"style":199},[3048],{"type":43,"value":3049},"            continue\n",{"type":38,"tag":186,"props":3051,"children":3052},{"class":188,"line":1621},[3053],{"type":38,"tag":186,"props":3054,"children":3055},{"style":199},[3056],{"type":43,"value":3057},"        content = page['results'][0].get('raw_content', '')\n",{"type":38,"tag":186,"props":3059,"children":3060},{"class":188,"line":1630},[3061],{"type":38,"tag":186,"props":3062,"children":3063},{"emptyLinePlaceholder":312},[3064],{"type":43,"value":315},{"type":38,"tag":186,"props":3066,"children":3067},{"class":188,"line":1639},[3068],{"type":38,"tag":186,"props":3069,"children":3070},{"style":199},[3071],{"type":43,"value":3072},"        # Your filtering logic — tailored to this query\n",{"type":38,"tag":186,"props":3074,"children":3075},{"class":188,"line":1648},[3076],{"type":38,"tag":186,"props":3077,"children":3078},{"style":199},[3079],{"type":43,"value":2506},{"type":38,"tag":186,"props":3081,"children":3082},{"class":188,"line":1657},[3083],{"type":38,"tag":186,"props":3084,"children":3085},{"style":199},[3086],{"type":43,"value":3087},"        print(f'URL: {r[\"url\"]}\\n')\n",{"type":38,"tag":186,"props":3089,"children":3090},{"class":188,"line":1666},[3091],{"type":38,"tag":186,"props":3092,"children":3093},{"emptyLinePlaceholder":312},[3094],{"type":43,"value":315},{"type":38,"tag":186,"props":3096,"children":3097},{"class":188,"line":1675},[3098],{"type":38,"tag":186,"props":3099,"children":3100},{"style":199},[3101],{"type":43,"value":3102},"        for para in content.split('\\n\\n'):\n",{"type":38,"tag":186,"props":3104,"children":3105},{"class":188,"line":1899},[3106],{"type":38,"tag":186,"props":3107,"children":3108},{"style":199},[3109],{"type":43,"value":3110},"            para = para.strip()\n",{"type":38,"tag":186,"props":3112,"children":3113},{"class":188,"line":1908},[3114],{"type":38,"tag":186,"props":3115,"children":3116},{"style":199},[3117],{"type":43,"value":3118},"            if len(para) > 100 and any(kw in para.lower() for kw in\n",{"type":38,"tag":186,"props":3120,"children":3121},{"class":188,"line":1916},[3122],{"type":38,"tag":186,"props":3123,"children":3124},{"style":199},[3125],{"type":43,"value":3126},"                    ['high-risk', 'prohibited', 'deadline', 'obligation',\n",{"type":38,"tag":186,"props":3128,"children":3129},{"class":188,"line":1925},[3130],{"type":38,"tag":186,"props":3131,"children":3132},{"style":199},[3133],{"type":43,"value":3134},"                     'compliance', 'penalty', 'fine', 'article']):\n",{"type":38,"tag":186,"props":3136,"children":3137},{"class":188,"line":2533},[3138],{"type":38,"tag":186,"props":3139,"children":3140},{"style":199},[3141],{"type":43,"value":3142},"                print(para)\n",{"type":38,"tag":186,"props":3144,"children":3145},{"class":188,"line":2542},[3146],{"type":38,"tag":186,"props":3147,"children":3148},{"style":199},[3149],{"type":43,"value":3150},"                print()\n",{"type":38,"tag":186,"props":3152,"children":3153},{"class":188,"line":2799},[3154],{"type":38,"tag":186,"props":3155,"children":3156},{"emptyLinePlaceholder":312},[3157],{"type":43,"value":315},{"type":38,"tag":186,"props":3159,"children":3160},{"class":188,"line":2808},[3161],{"type":38,"tag":186,"props":3162,"children":3163},{"style":199},[3164],{"type":43,"value":3165},"        print('---\\n')\n",{"type":38,"tag":186,"props":3167,"children":3168},{"class":188,"line":2817},[3169],{"type":38,"tag":186,"props":3170,"children":3171},{"style":199},[3172],{"type":43,"value":3173},"    except Exception:\n",{"type":38,"tag":186,"props":3175,"children":3176},{"class":188,"line":2826},[3177],{"type":38,"tag":186,"props":3178,"children":3179},{"style":199},[3180],{"type":43,"value":1810},{"type":38,"tag":186,"props":3182,"children":3183},{"class":188,"line":2834},[3184],{"type":38,"tag":186,"props":3185,"children":3186},{"style":210},[3187],{"type":43,"value":1386},{"type":38,"tag":504,"props":3189,"children":3191},{"id":3190},"following-leads-across-turns",[3192],{"type":43,"value":3193},"Following leads across turns",{"type":38,"tag":46,"props":3195,"children":3196},{},[3197],{"type":43,"value":3198},"Sometimes turn 2 reveals new URLs or topics to chase. You can keep iterating:",{"type":38,"tag":175,"props":3200,"children":3202},{"className":177,"code":3201,"language":179,"meta":180,"style":180},"python3 \u003C\u003C 'PYEOF'\nimport json, subprocess\n\n# Read the page you saved earlier\nwith open('\u002Ftmp\u002Fpage_detail.txt') as f:\n    content = f.read()\n\n# You noticed a reference to a specific regulation document\n# Search for it specifically\nraw = subprocess.check_output(\n    ['tvly', 'search', 'EU AI Act Annex III high-risk list',\n     '--include-domains', 'eur-lex.europa.eu',\n     '--max-results', '3', '--json'],\n    stderr=subprocess.DEVNULL\n)\ndata = json.loads(raw)\n\nfor r in data['results']:\n    print(f'## {r[\"title\"]}')\n    print(f'URL: {r[\"url\"]}')\n    print(r['content'])\n    print()\nPYEOF\n",[3203],{"type":38,"tag":60,"props":3204,"children":3205},{"__ignoreMap":180},[3206,3221,3228,3235,3243,3251,3259,3266,3274,3282,3289,3297,3305,3313,3320,3327,3334,3341,3348,3355,3363,3371,3378],{"type":38,"tag":186,"props":3207,"children":3208},{"class":188,"line":189},[3209,3213,3217],{"type":38,"tag":186,"props":3210,"children":3211},{"style":193},[3212],{"type":43,"value":1297},{"type":38,"tag":186,"props":3214,"children":3215},{"style":210},[3216],{"type":43,"value":1302},{"type":38,"tag":186,"props":3218,"children":3219},{"style":210},[3220],{"type":43,"value":1307},{"type":38,"tag":186,"props":3222,"children":3223},{"class":188,"line":275},[3224],{"type":38,"tag":186,"props":3225,"children":3226},{"style":199},[3227],{"type":43,"value":1315},{"type":38,"tag":186,"props":3229,"children":3230},{"class":188,"line":308},[3231],{"type":38,"tag":186,"props":3232,"children":3233},{"emptyLinePlaceholder":312},[3234],{"type":43,"value":315},{"type":38,"tag":186,"props":3236,"children":3237},{"class":188,"line":318},[3238],{"type":38,"tag":186,"props":3239,"children":3240},{"style":199},[3241],{"type":43,"value":3242},"# Read the page you saved earlier\n",{"type":38,"tag":186,"props":3244,"children":3245},{"class":188,"line":327},[3246],{"type":38,"tag":186,"props":3247,"children":3248},{"style":199},[3249],{"type":43,"value":3250},"with open('\u002Ftmp\u002Fpage_detail.txt') as f:\n",{"type":38,"tag":186,"props":3252,"children":3253},{"class":188,"line":385},[3254],{"type":38,"tag":186,"props":3255,"children":3256},{"style":199},[3257],{"type":43,"value":3258},"    content = f.read()\n",{"type":38,"tag":186,"props":3260,"children":3261},{"class":188,"line":394},[3262],{"type":38,"tag":186,"props":3263,"children":3264},{"emptyLinePlaceholder":312},[3265],{"type":43,"value":315},{"type":38,"tag":186,"props":3267,"children":3268},{"class":188,"line":403},[3269],{"type":38,"tag":186,"props":3270,"children":3271},{"style":199},[3272],{"type":43,"value":3273},"# You noticed a reference to a specific regulation document\n",{"type":38,"tag":186,"props":3275,"children":3276},{"class":188,"line":412},[3277],{"type":38,"tag":186,"props":3278,"children":3279},{"style":199},[3280],{"type":43,"value":3281},"# Search for it specifically\n",{"type":38,"tag":186,"props":3283,"children":3284},{"class":188,"line":459},[3285],{"type":38,"tag":186,"props":3286,"children":3287},{"style":199},[3288],{"type":43,"value":1323},{"type":38,"tag":186,"props":3290,"children":3291},{"class":188,"line":485},[3292],{"type":38,"tag":186,"props":3293,"children":3294},{"style":199},[3295],{"type":43,"value":3296},"    ['tvly', 'search', 'EU AI Act Annex III high-risk list',\n",{"type":38,"tag":186,"props":3298,"children":3299},{"class":188,"line":818},[3300],{"type":38,"tag":186,"props":3301,"children":3302},{"style":199},[3303],{"type":43,"value":3304},"     '--include-domains', 'eur-lex.europa.eu',\n",{"type":38,"tag":186,"props":3306,"children":3307},{"class":188,"line":827},[3308],{"type":38,"tag":186,"props":3309,"children":3310},{"style":199},[3311],{"type":43,"value":3312},"     '--max-results', '3', '--json'],\n",{"type":38,"tag":186,"props":3314,"children":3315},{"class":188,"line":853},[3316],{"type":38,"tag":186,"props":3317,"children":3318},{"style":199},[3319],{"type":43,"value":1339},{"type":38,"tag":186,"props":3321,"children":3322},{"class":188,"line":1612},[3323],{"type":38,"tag":186,"props":3324,"children":3325},{"style":199},[3326],{"type":43,"value":1347},{"type":38,"tag":186,"props":3328,"children":3329},{"class":188,"line":1621},[3330],{"type":38,"tag":186,"props":3331,"children":3332},{"style":199},[3333],{"type":43,"value":1355},{"type":38,"tag":186,"props":3335,"children":3336},{"class":188,"line":1630},[3337],{"type":38,"tag":186,"props":3338,"children":3339},{"emptyLinePlaceholder":312},[3340],{"type":43,"value":315},{"type":38,"tag":186,"props":3342,"children":3343},{"class":188,"line":1639},[3344],{"type":38,"tag":186,"props":3345,"children":3346},{"style":199},[3347],{"type":43,"value":409},{"type":38,"tag":186,"props":3349,"children":3350},{"class":188,"line":1648},[3351],{"type":38,"tag":186,"props":3352,"children":3353},{"style":199},[3354],{"type":43,"value":1825},{"type":38,"tag":186,"props":3356,"children":3357},{"class":188,"line":1657},[3358],{"type":38,"tag":186,"props":3359,"children":3360},{"style":199},[3361],{"type":43,"value":3362},"    print(f'URL: {r[\"url\"]}')\n",{"type":38,"tag":186,"props":3364,"children":3365},{"class":188,"line":1666},[3366],{"type":38,"tag":186,"props":3367,"children":3368},{"style":199},[3369],{"type":43,"value":3370},"    print(r['content'])\n",{"type":38,"tag":186,"props":3372,"children":3373},{"class":188,"line":1675},[3374],{"type":38,"tag":186,"props":3375,"children":3376},{"style":199},[3377],{"type":43,"value":1672},{"type":38,"tag":186,"props":3379,"children":3380},{"class":188,"line":1899},[3381],{"type":38,"tag":186,"props":3382,"children":3383},{"style":210},[3384],{"type":43,"value":1386},{"type":38,"tag":46,"props":3386,"children":3387},{},[3388,3390,3395],{"type":43,"value":3389},"Each turn, you save data to ",{"type":38,"tag":60,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":43,"value":1415},{"type":43,"value":3396},", decide what to explore next, and write new filtering code as heredocs. The raw data accumulates on disk; your context stays lean.",{"type":38,"tag":69,"props":3398,"children":3400},{"id":3399},"writing-your-filtering-code",[3401],{"type":43,"value":3402},"Writing your filtering code",{"type":38,"tag":46,"props":3404,"children":3405},{},[3406],{"type":43,"value":3407},"The Python you write IS the filtering logic. There are no fixed templates — you write code that makes sense for the specific query. Here are principles, not rules:",{"type":38,"tag":46,"props":3409,"children":3410},{},[3411,3416],{"type":38,"tag":52,"props":3412,"children":3413},{},[3414],{"type":43,"value":3415},"Triage first.",{"type":43,"value":3417}," Inspect titles and scores before fetching full pages. Don't extract everything blindly.",{"type":38,"tag":46,"props":3419,"children":3420},{},[3421,3426],{"type":38,"tag":52,"props":3422,"children":3423},{},[3424],{"type":43,"value":3425},"Be specific.",{"type":43,"value":3427}," A financial query should filter for numbers and financial terms. A technical query should look for code blocks and specifications. A news query should look for dates and quotes. Match your filtering to the query.",{"type":38,"tag":46,"props":3429,"children":3430},{},[3431,3436],{"type":38,"tag":52,"props":3432,"children":3433},{},[3434],{"type":43,"value":3435},"Structural filtering helps.",{"type":43,"value":3437}," Skip lines shorter than ~50-80 chars (usually nav elements). Skip common boilerplate phrases. Keep headings and their following paragraphs. But these are starting points — adapt based on what you see.",{"type":38,"tag":46,"props":3439,"children":3440},{},[3441,3446],{"type":38,"tag":52,"props":3442,"children":3443},{},[3444],{"type":43,"value":3445},"Print structured output.",{"type":43,"value":3447}," Format your output so it's easy to reason over:",{"type":38,"tag":175,"props":3449,"children":3453},{"className":3450,"code":3451,"language":3452,"meta":180,"style":180},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","print(f'## {title}')\nprint(f'URL: {url}')\nprint(relevant_content)\nprint()\n","python",[3454],{"type":38,"tag":60,"props":3455,"children":3456},{"__ignoreMap":180},[3457,3465,3473,3481],{"type":38,"tag":186,"props":3458,"children":3459},{"class":188,"line":189},[3460],{"type":38,"tag":186,"props":3461,"children":3462},{},[3463],{"type":43,"value":3464},"print(f'## {title}')\n",{"type":38,"tag":186,"props":3466,"children":3467},{"class":188,"line":275},[3468],{"type":38,"tag":186,"props":3469,"children":3470},{},[3471],{"type":43,"value":3472},"print(f'URL: {url}')\n",{"type":38,"tag":186,"props":3474,"children":3475},{"class":188,"line":308},[3476],{"type":38,"tag":186,"props":3477,"children":3478},{},[3479],{"type":43,"value":3480},"print(relevant_content)\n",{"type":38,"tag":186,"props":3482,"children":3483},{"class":188,"line":318},[3484],{"type":38,"tag":186,"props":3485,"children":3486},{},[3487],{"type":43,"value":3488},"print()\n",{"type":38,"tag":46,"props":3490,"children":3491},{},[3492,3497],{"type":38,"tag":52,"props":3493,"children":3494},{},[3495],{"type":43,"value":3496},"Handle errors.",{"type":43,"value":3498}," Pages fail, URLs 404, extractions timeout. Use try\u002Fexcept and skip failures:",{"type":38,"tag":175,"props":3500,"children":3502},{"className":3450,"code":3501,"language":3452,"meta":180,"style":180},"try:\n    raw = subprocess.check_output(['tvly', 'extract', url, '--json'],\n                                   stderr=subprocess.DEVNULL, timeout=30)\nexcept Exception:\n    continue\n",[3503],{"type":38,"tag":60,"props":3504,"children":3505},{"__ignoreMap":180},[3506,3514,3522,3530,3538],{"type":38,"tag":186,"props":3507,"children":3508},{"class":188,"line":189},[3509],{"type":38,"tag":186,"props":3510,"children":3511},{},[3512],{"type":43,"value":3513},"try:\n",{"type":38,"tag":186,"props":3515,"children":3516},{"class":188,"line":275},[3517],{"type":38,"tag":186,"props":3518,"children":3519},{},[3520],{"type":43,"value":3521},"    raw = subprocess.check_output(['tvly', 'extract', url, '--json'],\n",{"type":38,"tag":186,"props":3523,"children":3524},{"class":188,"line":308},[3525],{"type":38,"tag":186,"props":3526,"children":3527},{},[3528],{"type":43,"value":3529},"                                   stderr=subprocess.DEVNULL, timeout=30)\n",{"type":38,"tag":186,"props":3531,"children":3532},{"class":188,"line":318},[3533],{"type":38,"tag":186,"props":3534,"children":3535},{},[3536],{"type":43,"value":3537},"except Exception:\n",{"type":38,"tag":186,"props":3539,"children":3540},{"class":188,"line":327},[3541],{"type":38,"tag":186,"props":3542,"children":3543},{},[3544],{"type":43,"value":3545},"    continue\n",{"type":38,"tag":46,"props":3547,"children":3548},{},[3549,3554,3556,3561],{"type":38,"tag":52,"props":3550,"children":3551},{},[3552],{"type":43,"value":3553},"Token budget awareness.",{"type":43,"value":3555}," Your ",{"type":38,"tag":60,"props":3557,"children":3559},{"className":3558},[],[3560],{"type":43,"value":65},{"type":43,"value":3562}," output is what enters your context. Target 150-600 tokens per source. If you're printing 5000+ chars from a single page, you're probably not filtering enough. But if a source has a critical data table, it's fine to keep more.",{"type":38,"tag":69,"props":3564,"children":3566},{"id":3565},"options",[3567],{"type":43,"value":3568},"Options",{"type":38,"tag":46,"props":3570,"children":3571},{},[3572,3574,3579],{"type":43,"value":3573},"All standard ",{"type":38,"tag":60,"props":3575,"children":3577},{"className":3576},[],[3578],{"type":43,"value":1138},{"type":43,"value":3580}," options work:",{"type":38,"tag":3582,"props":3583,"children":3584},"table",{},[3585,3604],{"type":38,"tag":3586,"props":3587,"children":3588},"thead",{},[3589],{"type":38,"tag":3590,"props":3591,"children":3592},"tr",{},[3593,3599],{"type":38,"tag":3594,"props":3595,"children":3596},"th",{},[3597],{"type":43,"value":3598},"Option",{"type":38,"tag":3594,"props":3600,"children":3601},{},[3602],{"type":43,"value":3603},"Description",{"type":38,"tag":3605,"props":3606,"children":3607},"tbody",{},[3608,3626,3670,3712,3729,3746,3778],{"type":38,"tag":3590,"props":3609,"children":3610},{},[3611,3621],{"type":38,"tag":3612,"props":3613,"children":3614},"td",{},[3615],{"type":38,"tag":60,"props":3616,"children":3618},{"className":3617},[],[3619],{"type":43,"value":3620},"--max-results",{"type":38,"tag":3612,"props":3622,"children":3623},{},[3624],{"type":43,"value":3625},"Number of results (default: 5, max: 20)",{"type":38,"tag":3590,"props":3627,"children":3628},{},[3629,3638],{"type":38,"tag":3612,"props":3630,"children":3631},{},[3632],{"type":38,"tag":60,"props":3633,"children":3635},{"className":3634},[],[3636],{"type":43,"value":3637},"--depth",{"type":38,"tag":3612,"props":3639,"children":3640},{},[3641,3647,3649,3655,3656,3662,3664],{"type":38,"tag":60,"props":3642,"children":3644},{"className":3643},[],[3645],{"type":43,"value":3646},"ultra-fast",{"type":43,"value":3648},", ",{"type":38,"tag":60,"props":3650,"children":3652},{"className":3651},[],[3653],{"type":43,"value":3654},"fast",{"type":43,"value":3648},{"type":38,"tag":60,"props":3657,"children":3659},{"className":3658},[],[3660],{"type":43,"value":3661},"basic",{"type":43,"value":3663}," (default), ",{"type":38,"tag":60,"props":3665,"children":3667},{"className":3666},[],[3668],{"type":43,"value":3669},"advanced",{"type":38,"tag":3590,"props":3671,"children":3672},{},[3673,3682],{"type":38,"tag":3612,"props":3674,"children":3675},{},[3676],{"type":38,"tag":60,"props":3677,"children":3679},{"className":3678},[],[3680],{"type":43,"value":3681},"--time-range",{"type":38,"tag":3612,"props":3683,"children":3684},{},[3685,3691,3692,3698,3699,3705,3706],{"type":38,"tag":60,"props":3686,"children":3688},{"className":3687},[],[3689],{"type":43,"value":3690},"day",{"type":43,"value":3648},{"type":38,"tag":60,"props":3693,"children":3695},{"className":3694},[],[3696],{"type":43,"value":3697},"week",{"type":43,"value":3648},{"type":38,"tag":60,"props":3700,"children":3702},{"className":3701},[],[3703],{"type":43,"value":3704},"month",{"type":43,"value":3648},{"type":38,"tag":60,"props":3707,"children":3709},{"className":3708},[],[3710],{"type":43,"value":3711},"year",{"type":38,"tag":3590,"props":3713,"children":3714},{},[3715,3724],{"type":38,"tag":3612,"props":3716,"children":3717},{},[3718],{"type":38,"tag":60,"props":3719,"children":3721},{"className":3720},[],[3722],{"type":43,"value":3723},"--include-domains",{"type":38,"tag":3612,"props":3725,"children":3726},{},[3727],{"type":43,"value":3728},"Comma-separated whitelist",{"type":38,"tag":3590,"props":3730,"children":3731},{},[3732,3741],{"type":38,"tag":3612,"props":3733,"children":3734},{},[3735],{"type":38,"tag":60,"props":3736,"children":3738},{"className":3737},[],[3739],{"type":43,"value":3740},"--exclude-domains",{"type":38,"tag":3612,"props":3742,"children":3743},{},[3744],{"type":43,"value":3745},"Comma-separated blacklist",{"type":38,"tag":3590,"props":3747,"children":3748},{},[3749,3758],{"type":38,"tag":3612,"props":3750,"children":3751},{},[3752],{"type":38,"tag":60,"props":3753,"children":3755},{"className":3754},[],[3756],{"type":43,"value":3757},"--include-raw-content",{"type":38,"tag":3612,"props":3759,"children":3760},{},[3761,3763,3769,3771,3776],{"type":43,"value":3762},"Full page content (",{"type":38,"tag":60,"props":3764,"children":3766},{"className":3765},[],[3767],{"type":43,"value":3768},"markdown",{"type":43,"value":3770}," or ",{"type":38,"tag":60,"props":3772,"children":3774},{"className":3773},[],[3775],{"type":43,"value":43},{"type":43,"value":3777},")",{"type":38,"tag":3590,"props":3779,"children":3780},{},[3781,3790],{"type":38,"tag":3612,"props":3782,"children":3783},{},[3784],{"type":38,"tag":60,"props":3785,"children":3787},{"className":3786},[],[3788],{"type":43,"value":3789},"--country",{"type":38,"tag":3612,"props":3791,"children":3792},{},[3793],{"type":43,"value":3794},"Boost results from country",{"type":38,"tag":69,"props":3796,"children":3798},{"id":3797},"fallback-jq",[3799],{"type":43,"value":3800},"Fallback: jq",{"type":38,"tag":46,"props":3802,"children":3803},{},[3804,3806,3811,3813,3819],{"type":43,"value":3805},"When ",{"type":38,"tag":60,"props":3807,"children":3809},{"className":3808},[],[3810],{"type":43,"value":1297},{"type":43,"value":3812}," is unavailable, use ",{"type":38,"tag":60,"props":3814,"children":3816},{"className":3815},[],[3817],{"type":43,"value":3818},"jq",{"type":43,"value":3820}," for basic filtering:",{"type":38,"tag":175,"props":3822,"children":3824},{"className":177,"code":3823,"language":179,"meta":180,"style":180},"tvly search \"query\" --json 2>\u002Fdev\u002Fnull | jq '[.results[] | select(.score > 0.5) | {title, url, content}]'\n",[3825],{"type":38,"tag":60,"props":3826,"children":3827},{"__ignoreMap":180},[3828],{"type":38,"tag":186,"props":3829,"children":3830},{"class":188,"line":189},[3831,3835,3839,3843,3847,3851,3855,3859,3863,3867,3872,3877,3882],{"type":38,"tag":186,"props":3832,"children":3833},{"style":193},[3834],{"type":43,"value":171},{"type":38,"tag":186,"props":3836,"children":3837},{"style":199},[3838],{"type":43,"value":285},{"type":38,"tag":186,"props":3840,"children":3841},{"style":210},[3842],{"type":43,"value":290},{"type":38,"tag":186,"props":3844,"children":3845},{"style":199},[3846],{"type":43,"value":540},{"type":38,"tag":186,"props":3848,"children":3849},{"style":210},[3850],{"type":43,"value":300},{"type":38,"tag":186,"props":3852,"children":3853},{"style":199},[3854],{"type":43,"value":353},{"type":38,"tag":186,"props":3856,"children":3857},{"style":210},[3858],{"type":43,"value":358},{"type":38,"tag":186,"props":3860,"children":3861},{"style":199},[3862],{"type":43,"value":363},{"type":38,"tag":186,"props":3864,"children":3865},{"style":210},[3866],{"type":43,"value":213},{"type":38,"tag":186,"props":3868,"children":3869},{"style":193},[3870],{"type":43,"value":3871}," jq",{"type":38,"tag":186,"props":3873,"children":3874},{"style":210},[3875],{"type":43,"value":3876}," '",{"type":38,"tag":186,"props":3878,"children":3879},{"style":199},[3880],{"type":43,"value":3881},"[.results[] | select(.score > 0.5) | {title, url, content}]",{"type":38,"tag":186,"props":3883,"children":3884},{"style":210},[3885],{"type":43,"value":3886},"'\n",{"type":38,"tag":46,"props":3888,"children":3889},{},[3890],{"type":43,"value":3891},"jq can't do multi-step search-then-extract or complex filtering. Use it only for simple lookups.",{"type":38,"tag":3893,"props":3894,"children":3895},"style",{},[3896],{"type":43,"value":3897},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3899,"total":1621},[3900,3912,3925,3940,3946,3959,3970,3983,3996,4013,4030,4047],{"slug":3901,"name":3901,"fn":3902,"description":3903,"org":3904,"tags":3905,"stars":21,"repoUrl":22,"updatedAt":3911},"tavily-best-practices","implement Tavily integration best practices","Build production-ready Tavily integrations with best practices baked in. Reference documentation for developers using coding assistants (Claude Code, Cursor, etc.) to implement web search, content extraction, crawling, and research in agentic workflows, RAG systems, or autonomous agents.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3906,3909,3910],{"name":3907,"slug":3908,"type":16},"API Development","api-development",{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:54:03.550741",{"slug":3913,"name":3913,"fn":3914,"description":3915,"org":3916,"tags":3917,"stars":21,"repoUrl":22,"updatedAt":3924},"tavily-cli","conduct web research with Tavily CLI","Web search, content extraction, crawling, and deep research via the Tavily CLI. Use this skill whenever the user wants to search the web, find articles, research a topic, look something up online, extract content from a URL, grab text from a webpage, crawl documentation, download a site's pages, discover URLs on a domain, or conduct in-depth research with citations. Also use when they say \"fetch this page\", \"pull the content from\", \"get the page at https:\u002F\u002F\", \"find me articles about\", or reference extracting data from external websites. This provides LLM-optimized web search, content extraction, site crawling, URL discovery, and AI-powered deep research — capabilities beyond what agents can do natively. Do NOT trigger for local file operations, git commands, deployments, or code editing tasks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3918,3921,3922,3923],{"name":3919,"slug":3920,"type":16},"CLI","cli",{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:54:02.065814",{"slug":3926,"name":3926,"fn":3927,"description":3928,"org":3929,"tags":3930,"stars":21,"repoUrl":22,"updatedAt":3939},"tavily-crawl","crawl websites and extract content","Crawl websites and extract content from multiple pages via the Tavily CLI. Use this skill when the user wants to crawl a site, download documentation, extract an entire docs section, bulk-extract pages, save a site as local markdown files, or says \"crawl\", \"get all the pages\", \"download the docs\", \"extract everything under \u002Fdocs\", \"bulk extract\", or needs content from many pages on the same domain. Supports depth\u002Fbreadth control, path filtering, semantic instructions, and saving each page as a local markdown file.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3931,3934,3935,3936],{"name":3932,"slug":3933,"type":16},"Automation","automation",{"name":3919,"slug":3920,"type":16},{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},"Web Scraping","web-scraping","2026-04-06T18:54:09.921446",{"slug":4,"name":4,"fn":5,"description":6,"org":3941,"tags":3942,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3943,3944,3945],{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3947,"name":3947,"fn":3948,"description":3949,"org":3950,"tags":3951,"stars":21,"repoUrl":22,"updatedAt":3958},"tavily-extract","extract markdown content from URLs","Extract clean markdown or text content from specific URLs via the Tavily CLI. Use this skill when the user has one or more URLs and wants their content, says \"extract\", \"grab the content from\", \"pull the text from\", \"get the page at\", \"read this webpage\", or needs clean text from web pages. Handles JavaScript-rendered pages, returns LLM-optimized markdown, and supports query-focused chunking for targeted extraction. Can process up to 20 URLs in a single call.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3952,3953,3956,3957],{"name":3919,"slug":3920,"type":16},{"name":3954,"slug":3955,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},"2026-04-06T18:54:08.624436",{"slug":3960,"name":3960,"fn":3961,"description":3962,"org":3963,"tags":3964,"stars":21,"repoUrl":22,"updatedAt":3969},"tavily-map","map website URLs with Tavily","Discover and list all URLs on a website without extracting content, via the Tavily CLI. Use this skill when the user wants to find a specific page on a large site, list all URLs, see the site structure, find where something is on a domain, or says \"map the site\", \"find the URL for\", \"what pages are on\", \"list all pages\", or \"site structure\". Faster than crawling — returns URLs only. Essential when you know the site but not the exact page. Combine with extract for targeted content retrieval.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3965,3966,3967,3968],{"name":3919,"slug":3920,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},"2026-04-06T18:54:04.832149",{"slug":3971,"name":3971,"fn":3972,"description":3973,"org":3974,"tags":3975,"stars":21,"repoUrl":22,"updatedAt":3982},"tavily-research","conduct AI-powered research with Tavily","Conduct comprehensive AI-powered research with citations via the Tavily CLI. Use this skill when the user wants deep research, a detailed report, a comparison, market analysis, literature review, or says \"research\", \"investigate\", \"analyze in depth\", \"compare X vs Y\", \"what does the market look like for\", or needs multi-source synthesis with explicit citations. Returns a structured report grounded in web sources. Takes 30-120 seconds. For quick fact-finding, use tavily-search instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3976,3977,3978,3981],{"name":3919,"slug":3920,"type":16},{"name":14,"slug":15,"type":16},{"name":3979,"slug":3980,"type":16},"Summarization","summarization",{"name":9,"slug":8,"type":16},"2026-04-06T18:54:07.378619",{"slug":3984,"name":3984,"fn":3985,"description":3986,"org":3987,"tags":3988,"stars":21,"repoUrl":22,"updatedAt":3995},"tavily-search","search the web with Tavily","Search the web with LLM-optimized results via the Tavily CLI. Use this skill when the user wants to search the web, find articles, look up information, get recent news, discover sources, or says \"search for\", \"find me\", \"look up\", \"what's the latest on\", \"find articles about\", or needs current information from the internet. Returns relevant results with content snippets, relevance scores, and metadata — optimized for LLM consumption. Supports domain filtering, time ranges, and multiple search depths.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3989,3990,3993,3994],{"name":3919,"slug":3920,"type":16},{"name":3991,"slug":3992,"type":16},"LLM","llm",{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:54:06.085596",{"slug":3997,"name":3997,"fn":3998,"description":3999,"org":4000,"tags":4001,"stars":4010,"repoUrl":4011,"updatedAt":4012},"academic-scientific-research","synthesize academic and scientific literature","Find, screen, and synthesize academic papers, scientific literature, technical reports, preprints, clinical or biomedical publications, and evidence around a research question. Use when the user asks to find papers, summarize literature, compare methods, identify seminal or recent work, extract claims from studies, or build a source-grounded academic\u002Fscientific evidence brief.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4002,4005,4008,4009],{"name":4003,"slug":4004,"type":16},"Bioinformatics","bioinformatics",{"name":4006,"slug":4007,"type":16},"Life Sciences","life-sciences",{"name":14,"slug":15,"type":16},{"name":3979,"slug":3980,"type":16},0,"https:\u002F\u002Fgithub.com\u002Ftavily-ai\u002Ftavily-grok-plugin","2026-07-21T06:07:31.35948",{"slug":4014,"name":4014,"fn":4015,"description":4016,"org":4017,"tags":4018,"stars":4010,"repoUrl":4011,"updatedAt":4029},"investment-research-briefs","create investment research briefs","Create concise investment research briefs, company memos, sector snapshots, portfolio monitoring updates, earnings\u002Fnews summaries, risk and catalyst briefs, and market thesis support. Use when the user asks for an investor-focused brief on a company, sector, public\u002Fprivate market, comparable set, or portfolio theme.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4019,4022,4025,4028],{"name":4020,"slug":4021,"type":16},"Finance","finance",{"name":4023,"slug":4024,"type":16},"Financial Modeling","financial-modeling",{"name":4026,"slug":4027,"type":16},"Investment Banking","investment-banking",{"name":14,"slug":15,"type":16},"2026-07-21T06:07:30.328538",{"slug":4031,"name":4031,"fn":4032,"description":4033,"org":4034,"tags":4035,"stars":4010,"repoUrl":4011,"updatedAt":4046},"product-competitor-intelligence","research competitor products and market data","Research competitor products, SKUs, pricing, packaging, positioning, feature comparisons, product catalogs, category pages, retailer listings, marketplace data, and market intelligence. Use when the user asks for competitor SKU discovery, product data enrichment, pricing\u002Fspec extraction, product comparison, market intelligence, or crawl\u002Fmap-driven product research.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4036,4039,4042,4045],{"name":4037,"slug":4038,"type":16},"Competitive Intelligence","competitive-intelligence",{"name":4040,"slug":4041,"type":16},"E-commerce","e-commerce",{"name":4043,"slug":4044,"type":16},"Marketing","marketing",{"name":14,"slug":15,"type":16},"2026-07-21T06:07:34.257311",{"slug":4048,"name":4048,"fn":4049,"description":4050,"org":4051,"tags":4052,"stars":4010,"repoUrl":4011,"updatedAt":4065},"sales-account-intelligence","build sales account intelligence","Build sales-ready account intelligence for companies, prospects, customers, partners, and target buyers. Use when the user asks for sales prep, account brief, meeting prep, buyer research, expansion signals, customer intelligence, trigger events, executive context, outreach angles, or market\u002Faccount context for GTM teams.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4053,4056,4059,4062],{"name":4054,"slug":4055,"type":16},"CRM","crm",{"name":4057,"slug":4058,"type":16},"Lead Enrichment","lead-enrichment",{"name":4060,"slug":4061,"type":16},"Prospecting","prospecting",{"name":4063,"slug":4064,"type":16},"Sales","sales","2026-07-21T06:07:33.56804",{"items":4067,"total":403},[4068,4074,4081,4088,4094,4101,4108],{"slug":3901,"name":3901,"fn":3902,"description":3903,"org":4069,"tags":4070,"stars":21,"repoUrl":22,"updatedAt":3911},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4071,4072,4073],{"name":3907,"slug":3908,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3913,"name":3913,"fn":3914,"description":3915,"org":4075,"tags":4076,"stars":21,"repoUrl":22,"updatedAt":3924},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4077,4078,4079,4080],{"name":3919,"slug":3920,"type":16},{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3926,"name":3926,"fn":3927,"description":3928,"org":4082,"tags":4083,"stars":21,"repoUrl":22,"updatedAt":3939},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4084,4085,4086,4087],{"name":3932,"slug":3933,"type":16},{"name":3919,"slug":3920,"type":16},{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":4089,"tags":4090,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4091,4092,4093],{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3947,"name":3947,"fn":3948,"description":3949,"org":4095,"tags":4096,"stars":21,"repoUrl":22,"updatedAt":3958},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4097,4098,4099,4100],{"name":3919,"slug":3920,"type":16},{"name":3954,"slug":3955,"type":16},{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},{"slug":3960,"name":3960,"fn":3961,"description":3962,"org":4102,"tags":4103,"stars":21,"repoUrl":22,"updatedAt":3969},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4104,4105,4106,4107],{"name":3919,"slug":3920,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"name":3937,"slug":3938,"type":16},{"slug":3971,"name":3971,"fn":3972,"description":3973,"org":4109,"tags":4110,"stars":21,"repoUrl":22,"updatedAt":3982},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4111,4112,4113,4114],{"name":3919,"slug":3920,"type":16},{"name":14,"slug":15,"type":16},{"name":3979,"slug":3980,"type":16},{"name":9,"slug":8,"type":16}]