Loading...
Loading...
Web search with livecrawl (search+extract) and content extraction for bash agents using You.com's @youdotcom-oss/api CLI. Interactive workflow covers API setup and simultaneous search+content operations. Faster than built-in search with verifiable references.
npx skill4agent add youdotcom-oss/agent-skills youdotcom-cli@youdotcom-oss/api--json--schema@youdotcom-oss/api# Using npm (install current version 0.3.0)
npm install @youdotcom-oss/api@~0.3.0
# Using bun (faster)
bun add @youdotcom-oss/api@~0.3.0~0.3.0~0.3.0package.jsonnpm install -g @youdotcom-oss/api@~0.3.0
bun add -g @youdotcom-oss/api@~0.3.0npx @youdotcom-oss/api@0.3.0 # Specific version for testing
npx @youdotcom-oss/api@0.3.0 # Specific version for testing# Check installed version
npm list @youdotcom-oss/api
# Should show: @youdotcom-oss/api@0.3.0
# Verify package integrity
npm view @youdotcom-oss/api@0.3.0 dist.integrity# See available updates
npm outdated @youdotcom-oss/api
# Example output:
# Package Current Wanted Latest
# @youdotcom-oss/api 0.3.0 0.3.2 0.4.0
#
# Wanted: 0.3.2 (highest version matching ~0.3.0 - safe patch updates)
# Latest: 0.4.0 (newest available - may have breaking changes)npm update @youdotcom-oss/api
# Upgrades to 0.3.2 (respects ~0.3.0 constraint - bug fixes only)# First, review the changelog
npm view @youdotcom-oss/api@0.4.0
# Visit release notes for details
# https://github.com/youdotcom-oss/dx-toolkit/releases
# If ready to upgrade:
npm install @youdotcom-oss/api@~0.4.0
# Update package.json to: "@youdotcom-oss/api": "~0.4.0"^1.0.0node --versionbun --version--client ClaudeCode--client Cursorexport YDC_CLIENT=YourAgentNameYDC_API_KEYexport YDC_API_KEY="your-key"--schema@youdotcom-oss/api search --schema | jq '.properties | keys'--json--client.data| User Pattern | Tool | Timing | Use When |
|---|---|---|---|
| "Extract https://..." | | 1-60s/URL | Known URL, need full content |
| "Find articles..." | | <5s | Snippets sufficient |
| "What is X?" | | <5s | Need full page content |
| "Latest news..." | | <5s | Recent events only |
| "Get full content from search" | | <5s | One-call search + extract |
# Get schema for search command (assumes local installation)
npx @youdotcom-oss/api search --schema
# Get schema for contents command
npx @youdotcom-oss/api contents --schema
# List available search parameters
npx @youdotcom-oss/api search --schema | jq '.properties | keys'
# If installed globally:
@youdotcom-oss/api search --schema--json# Basic search with client tracking (local installation)
npx @youdotcom-oss/api search --json '{"query":"AI developments"}' --client ClaudeCode
# If installed globally
@youdotcom-oss/api search --json '{"query":"AI developments"}' --client ClaudeCode
# LIVECRAWL: Search + extract content in ONE API call
npx @youdotcom-oss/api search --json '{
"query":"documentation",
"livecrawl":"web",
"livecrawl_formats":"markdown",
"count":5
}' --client ClaudeCode
# Results include .contents.markdown with full page content!
# No separate fetch needed - instant content extraction
# Advanced: All search options
npx @youdotcom-oss/api search --json '{
"query":"machine learning",
"count":10,
"offset":0,
"country":"US",
"freshness":"week",
"safesearch":"moderate",
"site":"github.com",
"language":"en",
"livecrawl":"web",
"livecrawl_formats":"markdown"
}' --client ClaudeCode
# Parse with jq - direct access, no .data wrapper
npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCode | \
jq -r '.results.web[] | "\(.title): \(.url)"'
# Extract livecrawl content
npx @youdotcom-oss/api search --json '{
"query":"docs",
"livecrawl":"web",
"livecrawl_formats":"markdown"
}' --client ClaudeCode | \
jq -r '.results.web[0].contents.markdown'# Extract in multiple formats
npx @youdotcom-oss/api contents --json '{
"urls":["https://example.com"],
"formats":["markdown","html","metadata"]
}' --client ClaudeCode
# Pipe markdown to file
npx @youdotcom-oss/api contents --json '{
"urls":["https://example.com"],
"formats":["markdown"]
}' --client ClaudeCode | \
jq -r '.[0].markdown' > content.md
# Multiple URLs with timeout
npx @youdotcom-oss/api contents --json '{
"urls":["https://a.com","https://b.com"],
"formats":["markdown","metadata"],
"crawl_timeout":30
}' --client ClaudeCode
# Extract just metadata
npx @youdotcom-oss/api contents --json '{
"urls":["https://example.com"],
"formats":["metadata"]
}' --client ClaudeCode | \
jq '.[0].metadata'012# Capture and check exit code
if ! result=$(npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCode); then
echo "Search failed: $?"
exit 1
fi
# Parse success response from stdout
echo "$result" | jq .Error: --json flag is required
at searchCommand (/path/to/search.ts:26:11)
mailto:support@you.com?subject=API%20Issue%20CLI...# Check if Node.js or Bun installed
if command -v bun &> /dev/null; then
echo "Bun installed: $(bun --version)"
elif command -v node &> /dev/null; then
echo "Node.js installed: $(node --version)"
else
echo "Neither Node.js nor Bun found."
echo "Request user permission to install Node.js or Bun"
fi# bunx (recommended - faster and more reliable)
npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCode
# npx (alternative)
npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCodeexport YDC_API_KEY="your-api-key" # Required
export YDC_CLIENT=ClaudeCode # Default client namenpx @youdotcom-oss/api search --json '{"query":"AI"}' \
--api-key "different-key" \
--client "DifferentAgent"node --versionbun --versionYDC_API_KEYYDC_CLIENT.gitignore.envnpm view @youdotcom-oss/api repositorynpx @youdotcom-oss/api search --schema--json--client.datanpm install @youdotcom-oss/api@~0.3.0npx @youdotcom-oss/api@0.3.0--json '{"query":"..."}'export YDC_API_KEY="your-key".data.results#!/usr/bin/env bash
set -e
# Discover available search parameters (using ydc if installed globally)
schema=$(ydc search --schema)
echo "$schema" | jq '.properties | keys'
# Build query dynamically
query=$(jq -n '{
query: "AI developments",
count: 10,
livecrawl: "web",
livecrawl_formats: "markdown"
}')
# Execute search (using bunx)
npx @youdotcom-oss/api search --json "$query" --client ClaudeCode#!/usr/bin/env bash
npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCode &
npx @youdotcom-oss/api search --json '{"query":"ML"}' --client ClaudeCode &
npx @youdotcom-oss/api search --json '{"query":"LLM"}' --client ClaudeCode &
wait#!/usr/bin/env bash
for i in {1..3}; do
if npx @youdotcom-oss/api search --json '{"query":"AI"}' --client ClaudeCode; then
exit 0
fi
[ $i -lt 3 ] && sleep 5
done
echo "Failed after 3 attempts"
exit 1YDC_API_KEY.env.gitignore# Check package metadata
npm view @youdotcom-oss/api repository homepage
# Verify package integrity
npm view @youdotcom-oss/api dist.integrity
# Check for security advisories
npm audit @youdotcom-oss/api# DON'T: Pass unsanitized user input
query="$USER_INPUT"
npx @youdotcom-oss/api search --json "{\"query\":\"$query\"}" --client ClaudeCode
# DO: Validate and escape input with jq
query=$(echo "$USER_INPUT" | jq -Rs .)
npx @youdotcom-oss/api search --json "{\"query\":$query}" --client ClaudeCode# Validate URLs before content extraction
url="$USER_URL"
if [[ $url =~ ^https?:// ]]; then
npx @youdotcom-oss/api contents --json "{\"urls\":[\"$url\"],\"formats\":[\"markdown\"]}" --client ClaudeCode
else
echo "Invalid URL format" >&2
exit 1
fimarkdownhtml# DO: Extract as markdown (safer for display)
npx @youdotcom-oss/api contents --json '{
"urls":["'"$url"'"],
"formats":["markdown","metadata"]
}' --client ClaudeCode
# DON'T: Render extracted HTML directly in browsers without sanitization# Capture errors without exposing sensitive context
if ! result=$(npx @youdotcom-oss/api search --json "$query" --client ClaudeCode 2>&1); then
# Log sanitized error (remove API keys, tokens, sensitive URLs)
echo "Search failed" | sed 's/key=[^&]*/key=REDACTED/g' >&2
exit 1
fiYDC_API_KEY#!/usr/bin/env bash
max_retries=3
retry_delay=2
for ((i=1; i<=max_retries; i++)); do
if npx @youdotcom-oss/api search --json "$query" --client ClaudeCode; then
exit 0
fi
if [ $i -lt $max_retries ]; then
delay=$((retry_delay ** i))
echo "Retry $i/$max_retries after ${delay}s..." >&2
sleep $delay
fi
done
echo "Failed after $max_retries attempts" >&2
exit 1YDC_API_KEYalways: true@youdotcom-oss/apiYDC_API_KEY{
"dependencies": {
"@youdotcom-oss/api": "~0.3.0" // ✅ Recommended for pre-1.0
}
}~0.3.0~0.3.0^1.0.0# Verify package integrity before use
npm view @youdotcom-oss/api@0.3.0 dist.integrity
# Example output:
# sha512-[hash]...
# Check for security advisories
npm audit @youdotcom-oss/api
# Verify package source
npm view @youdotcom-oss/api repository
# Should show: https://github.com/youdotcom-oss/dx-toolkitpackage-lock.jsonbun.lockb# After installation, verify lockfile was created
ls -la package-lock.json # or bun.lockb
# Commit to git
git add package.json package-lock.json
git commit -m "Lock @youdotcom-oss/api@0.3.0"npm outdated @youdotcom-oss/api# Patch updates (safe)
npm update @youdotcom-oss/api
# Minor version upgrade (review first)
npm install @youdotcom-oss/api@~0.4.0
# Verify after upgrade
npm list @youdotcom-oss/api
npm view @youdotcom-oss/api@0.4.0 dist.integrity~0.3.0@latestnpm view @youdotcom-oss/api@0.3.0 dist.integritypackage-lock.jsonbun.lockb