| name | uprock |
| description | How to use the UpRock CLI for authentication, daemon management, and AI tools (web crawling, multi-engine search, performance sweeps). Use this skill whenever the user asks to crawl a URL, research the web, test site performance, manage the UpRock daemon, or authenticate with UpRock. |
UpRock CLI
The uprock CLI connects to the UpRock network. This document describes every command,
its flags, and when to use each one. All commands follow uprock <group> <action> [args] [flags].
Install globally before use:
npm i -g uprock
Authentication
Manage login state. Authentication is REQUIRED for earning and provides an API key for
AI tool commands (see AI Tools for other key options).
uprock auth login
Authenticate with UpRock. Prompts for an email address (or accepts --email), sends a
one-time code to that address, then prompts for the code on stdin. The session is stored
locally after confirmation.
Requires an interactive terminal. If stdin is not a TTY (automation, bots, CI), the code
prompt will receive EOF and the login will abort with a hint to use auth request +
auth confirm instead. See below.
| Flag | Default | Description |
|---|
--email | — | Pre-fill the email address in the login flow. |
--setup-ai | false | Obtain an UpRock AI API key after login. Use this when you plan to call AI tool commands. |
uprock auth request
Non-interactive login, step 1. Send a login code to the given email address and print
the session ID to stdout. No stdin interaction — designed for automation and bot-driven flows.
The session ID is printed as a bare string to stdout (one line, no label). Informational
messages go to stderr. This means $(uprock auth request --email ...) captures only the
session ID.
| Flag | Default | Description |
|---|
--email | — | Email address to send the login code to. Required. |
After calling request, obtain the verification code from the user through your own
channel (chat message, webhook, etc.), then pass it to auth confirm.
Example:
SESSION=$(uprock auth request --email user@example.com 2>/dev/null)
uprock auth confirm
Non-interactive login, step 2. Confirm a login session using the session ID from
auth request and the verification code the user received by email. No stdin interaction.
| Flag | Default | Description |
|---|
--session | — | Session ID returned by auth request. Required. |
--code | — | Verification code from the email. Required. |
--setup-ai | false | Obtain an UpRock AI API key after login. Use this when you plan to call AI tool commands. |
On success, prints "Logged in." to stdout and returns exit code 0.
Example:
uprock auth confirm --session "$SESSION" --code 0018148
Non-interactive login decision rule
- You have an interactive terminal → use
uprock auth login. Simpler, single command.
- You are a bot, script, or CI pipeline → use
auth request + auth confirm. Two
commands, no stdin required. The session ID bridges the two steps.
Full bot workflow:
SESSION=$(uprock auth request --email user@example.com 2>/dev/null)
uprock auth confirm --session "$SESSION" --code "$CODE"
uprock auth logout
Clear the local session. After logout:
- The daemon continues running but stops earning.
- AI tool commands fail unless
UPROCK_API_KEY is set.
- The user must run
uprock auth login again to restore access.
uprock auth status
Print whether a valid session exists, the associated email address, and whether an AI API
key is set. Returns exit code 1 when not authenticated.
Daemon
The daemon is a long-running background process that earns while the machine is idle. It
communicates with the CLI over IPC (Unix socket on macOS/Linux, named pipe on Windows).
Decision rule for starting the daemon:
- One-off session or debugging →
uprock daemon start (manual, does not survive reboot)
- Persistent earning →
uprock daemon install (registers as an OS service, auto-starts
on login, restarts on crash)
PREFER daemon install for any use case where the user wants the daemon running
continuously. daemon start is only appropriate when the user explicitly wants a
temporary session they will stop manually.
uprock daemon start
Start the daemon as a background process. The process runs until explicitly stopped with
daemon stop or until the machine shuts down. Does NOT survive reboot — PREFER
daemon install for persistent earning.
uprock daemon stop
Stop the running daemon. Attempts graceful shutdown over IPC first, falls back to SIGTERM,
and uses SIGKILL as a last resort if the process does not exit within 10 seconds.
uprock daemon status
Print daemon state: PID, version, uptime, authentication status, earning status (with
earn rate when active), and whether the OS service is installed. Returns exit code 1 when
the daemon is not running, exit code 2 when running but not responding — use this to
check liveness in scripts.
uprock daemon logs
Show daemon log output. Without flags, prints the last 10 lines and exits.
| Flag | Short | Default | Description |
|---|
--lines | -n | 10 | Number of historical lines to show. |
--follow | -f | false | Stream new log lines as they are written (like tail -f). Blocks until interrupted. |
--grep | — | — | Filter lines by substring (case-insensitive). Applies to both historical and streamed lines. |
--path | — | false | Print the absolute log file path and exit. Use this when you need to open the log in another tool. |
Decision rule:
- Quick diagnostics →
uprock daemon logs -n 50 or uprock daemon logs --grep error
- Live monitoring →
uprock daemon logs -f
- External tooling →
uprock daemon logs --path to get the file path, then use
your own viewer.
uprock daemon install
Register the daemon as an OS autolaunch service: launchd (macOS), systemd (Linux), or
Task Scheduler (Windows). After installation the daemon starts on login and restarts
automatically if it crashes.
| Flag | Short | Default | Description |
|---|
--force | -f | false | Overwrite an existing service configuration. Use when upgrading the binary or changing install options. |
--ui | — | false | Install the GUI desktop app as the daemon instead of the headless CLI. |
Do NOT use npx to install the daemon. npx runs from a temporary directory whose path
changes between invocations — the registered OS service will point to a stale binary
location. ALWAYS install the package globally first (npm i -g uprock), then run
uprock daemon install.
uprock daemon uninstall
Remove the OS autolaunch service. The daemon stops immediately and will no longer start
on login.
AI Tools
AI-powered tools that execute through the UpRock distributed network. Every AI command
requires an API key. Set UPROCK_API_KEY to use a key directly, or run
uprock auth login — the key is resolved automatically on first use.
All AI commands write JSON to stdout and progress indicators to stderr, so piped output
is always clean JSON. Use jq to extract fields.
uprock ai crawl <url>
Fetch a URL via the UpRock crawl network.
This command fetches web pages through a distributed network of real browser instances in
different geographic locations. It supports multiple HTTP methods and can render JavaScript
for single-page applications.
Methods:
- CRAWL_FULL_PAGE: Full page rendering with JavaScript execution (default, recommended).
- GET: Standard HTTP GET (faster, but only use when you are certain the page does not
require JavaScript rendering).
- POST: HTTP POST with body.
- PUT: HTTP PUT with body.
For most websites, CRAWL_FULL_PAGE is the most reliable method. Use GET only as an
optimization when you know the target is a static page or API endpoint.
| Flag | Short | Default | Description |
|---|
--method | -m | CRAWL_FULL_PAGE | HTTP method: GET, POST, PUT, CRAWL_FULL_PAGE. |
--body | -b | — | Request body for POST/PUT. |
--timeout | -t | 60 | Timeout in seconds (max 300). For CRAWL_FULL_PAGE, values below 60 are raised to 60. |
--country | — | — | Where to execute the crawl FROM (device geographic placement). This controls the device's physical location, NOT the content topic — a crawl from Germany fetches the same URL but may see region-specific content (e.g., cookie banners, localized pricing). Accepts meta-regions (NA, EU, APAC, LATAM, MEA) or ISO country codes (US, DE, JP). PREFER meta-regions — they give the placement algorithm more flexibility to find available devices. Use specific country codes only when you need exact country-level placement (e.g., to see local pricing, comply with regional regulations, or access geo-restricted content). |
--device | -d | — | Device type: mobile, desktop. |
--retries | -r | 2 | Speculative retries (max 3). When > 0, a new attempt starts every 7 seconds using a separate device session. First success wins. Default of 2 means up to 3 concurrent sessions. Set to 0 for a single attempt. |
--content | — | false | Auto-fetch the markdown resource and inline it in the response under inlined_markdown. Use this when you need the full page text, not just the summary. |
Response structure:
{
"status": "success",
"job_id": "...",
"meta": { "url": "...", "status_code": 200, "title": "...", "content_type": "...", "time_ms": 1234 },
"summary": "Brief summary of the page content...",
"content": {
"html": { "resource": "crawl://{jobId}/html", "size_bytes": 12345, "mime_type": "text/html" },
"markdown": { "resource": "crawl://{cacheKey}/markdown", "size_bytes": 6789, "mime_type": "text/markdown" }
}
}
When --content is passed, an additional inlined_markdown field contains the full
markdown text directly in the response.
The summary field is present when content extraction succeeds (most pages). Full
markdown and HTML are available via the resource URIs in content — pass them to
uprock ai fetch to retrieve on demand. PREFER the markdown resource over HTML — it is
significantly more compact and easier to process.
Examples:
uprock ai crawl example.com
uprock ai crawl example.com -m GET
uprock ai crawl example.com --country EU --content
uprock ai crawl api.example.com -m POST -b '{"query": "test"}'
uprock ai crawl example.com -r 0
uprock ai crawl example.com | jq -r '.summary'
uprock ai research <query...>
Search the web using multiple search engines across geographic regions. This command
intelligently routes queries to the best-performing search engines for each region and
deduplicates results.
| Flag | Short | Default | Description |
|---|
--max-results | -n | 20 | Maximum number of results. Actual count may be lower due to cross-source deduplication. Request 2–3x your target to compensate. |
--num-sources | — | 5 | Number of provider+country combinations to query in parallel (max 20). More sources yield more diverse results but take longer. |
--timeout | -t | 300 | Timeout in seconds. |
--countries | — | — | Where to search FROM (the searcher's geographic perspective), NOT what to search ABOUT. When omitted, the server automatically selects optimal countries for broad global coverage — this is the correct default for most queries. Accepts meta-regions (NA, EU, APAC, LATAM, MEA) or ISO country codes. PREFER meta-regions — they give the scheduler more flexibility and better cache hit rates. Use specific country codes only when the query demands country-level precision. Do NOT mix meta-regions and country codes in a single call. |
GEOGRAPHIC TARGETING: --countries controls where searches execute FROM, not what they
search ABOUT. Use it to get results as locals in that region see them.
Decision rule:
- Geography is the TOPIC ("Thai cuisine", "Paris hotels") → keep it in the query, omit
--countries.
- Geography is the PERSPECTIVE ("what locals see") → use
--countries, keep query generic.
- BOTH ("what Germans think about Italian food") → "Italian food" in query,
--countries EU.
Examples:
RIGHT: uprock ai research "best beach destinations" --countries EU
→ returns what Europeans see when they search for beach holidays
WRONG: uprock ai research "best European beach destinations"
→ searches globally for pages that mention "European beaches"
RIGHT: uprock ai research "best restaurants in Paris"
→ global results about Paris restaurants (geography is the topic)
WRONG: uprock ai research "best restaurants" --countries EU
→ returns what Europeans see when searching for restaurants (not Paris-specific)
If geography is the subject of the query (e.g., "history of the Berlin Wall"), keep it in
the query — --countries is for execution context, not query content.
If the user says "Germany" but the context is broadly European, use --countries EU. Use
--countries DE only when you specifically need German-language results, German law, or
data that differs between Germany and its EU neighbors.
To compare how different regions see a topic, make SEPARATE calls — one per region. Do
NOT combine regions in a single call expecting comparative results.
Response structure:
{
"query": "search terms",
"count": 5,
"results": [
{
"url": "https://example.com/page",
"title": "Page Title",
"description": "A brief description of the page content..."
}
]
}
Results are unordered. Title and description are included when available.
uprock ai sweep <url>
Test website reliability and performance across geographic regions.
Use this after deploying a website or service to verify it is up, responsive, and
performing well from different parts of the world. Loads the target URL from multiple
regions simultaneously, capturing performance metrics from each check. All checks
(regions × tries) run concurrently, so total operation time is approximately equal to the
timeout value.
Each completed check returns Core Web Vitals (TTFB, FCP, LCP, CLS), load times, transfer
size, and HTTP protocol. Screenshots are captured and available as resource URIs in the
response — pass them to uprock ai fetch for visual verification, but they can be
ignored if you only need the metrics.
| Flag | Short | Default | Description |
|---|
--regions | -r | NA,EU,APAC | Geographic regions to test from: NA (North America), EU (Europe), APAC (Asia Pacific), LATAM (Latin America), MEA (Middle East & Africa). Default regions have the fastest and most reliable device pools. |
--tries | — | 5 | Number of checks per region. All checks across all regions run concurrently. |
--timeout | -t | 60 | Global timeout in seconds. All checks run concurrently, so wall-clock time is approximately this value. |
--device | -d | mobile | Device type: mobile, desktop. |
The response includes a report_url field with a link to a human-readable report page
that can be shared for visual review.
A sweep may complete with some failed checks. Inspect the failed_jobs count and
per-job error fields to identify issues.
Examples:
uprock ai sweep example.com
uprock ai sweep example.com -r NA,EU -d desktop
uprock ai sweep example.com --tries 2 -t 30
uprock ai sweep example.com -r NA,EU,APAC,LATAM,MEA
uprock ai sweep example.com | jq -r '.report_url'
uprock ai fetch <uri>
Fetch the full content of a crawl:// or sweep:// resource URI from a prior tool
response.
Use this when you need to read actual content that a previous crawl or sweep command
returned as a resource URI. For crawl results, the response includes a summary for quick
analysis plus resource URIs pointing to full content in markdown and HTML formats. When
the summary is sufficient, you do not need this command. When you need the complete page
text — to extract specific data, parse tables, read full articles — pass the resource URI
here.
For crawl results, use the markdown resource URI unless you specifically need raw HTML
structure. Markdown is significantly more compact and easier to work with.
For sweep results, pass a sweep:// screenshot URI to retrieve the screenshot image.
Output is written directly to stdout: text for markdown/HTML resources, binary for images.
Pipe or redirect as needed.
Examples:
uprock ai fetch "crawl://abc123/markdown"
uprock ai fetch "crawl://abc123/html"
uprock ai fetch "sweep://def456/NA/0/screenshot" > screenshot.png
uprock ai fetch "crawl://abc123/markdown" | head -100
Version
uprock version
Print version string and build metadata. No flags.
Global Flags
These flags work with every command:
| Flag | Short | Description |
|---|
--config | -c | Path to a config file. Overrides the default config location. |
--verbose | -v | Enable verbose logging to stderr. Useful for debugging authentication, IPC, or network issues. |
Common Workflows
First-time setup:
npm i -g uprock
uprock auth login
uprock daemon install
Crawl a page and read the full content:
uprock ai crawl example.com --content | jq -r '.inlined_markdown'
uprock ai crawl example.com > result.json
URI=$(jq -r '.content.markdown.resource' result.json)
uprock ai fetch "$URI"
Research a topic and crawl the top results:
uprock ai research "best static site generators 2026" -n 5 | jq -r '.results[].url'
uprock ai crawl <url> --content
Sweep a site after deployment and share the report:
uprock ai sweep mysite.com | jq -r '.report_url'
Check daemon health:
uprock daemon status && echo "running" || echo "stopped"
uprock daemon logs --grep error -n 20