Skip to main content

crewai-skim

Give your CrewAI agents the ability to read any URL — clean Markdown, no ads, no nav, no boilerplate. Two ways to pay: card plan (API key) or x402 wallet pay-per-call.

PyPI version License: MIT

crewai-skim is the official CrewAI tool for Skim — the clean reader API for AI agents. It exposes one tool, SkimReader, that any agent in your crew can call to fetch a web page as agent-ready Markdown plus structured metadata (title, byline, published date, language, excerpt). Two ways to pay: card plan with API key (free tier: 1,000 reads/month — skim402.com/pricing) or x402 wallet pay-per-call ($0.002 USDC on Base, no account needed).

See it before you wire it: try Skim free in your browser — 10 free skims a day, no wallet, no signup. Paste a URL, see exactly what your agent gets back.


Install

pip install crewai-skim

This pulls in the x402 client with EVM support, so there's nothing else to install.


Quickstart (60 seconds)

1. Fund a Base wallet with $1 of USDC

A dollar funds roughly 500 reads. Full step-by-step (with screenshots, for non-crypto-native devs): https://skim402.com/wallet.

Use a fresh wallet, not your personal one. This wallet's private key signs payment authorizations on your machine — treat it like a hot wallet for paying $0.002 tolls, not a savings account.

2. Point the tool at your wallet

export SKIM_WALLET_PRIVATE_KEY=0xYOUR_BASE_WALLET_PRIVATE_KEY

3. Use it

from crewai_skim import SkimReader

reader = SkimReader()  # reads SKIM_WALLET_PRIVATE_KEY from the environment

markdown = reader.run(url="https://en.wikipedia.org/wiki/HTTP_402")
print(markdown)

The tool signs an EIP-3009 USDC authorization for $0.002, Skim returns clean Markdown, and you get back the article body with a YAML frontmatter block of metadata. The payment shows up in your wallet's transaction history on BaseScan.


Use it in a crew

SkimReader is a standard CrewAI BaseTool, so it drops straight into any agent's tool list:

from crewai import Agent, Task, Crew
from crewai_skim import SkimReader

researcher = Agent(
    role="Research Analyst",
    goal="Read and summarize web articles accurately",
    backstory="You turn messy web pages into clean, citable notes.",
    tools=[SkimReader()],
)

task = Task(
    description="Read https://en.wikipedia.org/wiki/HTTP_402 and summarize it in 5 bullet points.",
    expected_output="A 5-bullet summary.",
    agent=researcher,
)

crew = Crew(agents=[researcher], tasks=[task])
print(crew.kickoff())

The agent decides when to call the Skim Web Reader, the wallet pays per read, and the model gets clean Markdown instead of raw HTML.


Output shape

SkimReader returns Markdown with a YAML frontmatter block of the page metadata:

---
title: Example article
byline: Jane Doe
publishedAt: 2025-01-15
lang: en
excerpt: A short summary...
---

# Example article

The cleaned article body in Markdown...

Set include_metadata=False to get just the Markdown body.


Configuration

SkimReader takes the following parameters (all optional except the wallet key):

Parameter Default Notes
private_key $SKIM_WALLET_PRIVATE_KEY Hex private key for the Base wallet that pays for reads. With or without 0x. Use a dedicated wallet — never your personal one.
base_url https://skim402.com Override the API base URL. For self-hosting or local development.
max_price_usd 0.01 Hard cap on per-call price in USD. The wallet refuses to sign for anything above this. Skim is $0.002/call.
include_metadata True Prepend a YAML frontmatter block of page metadata to the returned Markdown.
timeout 60 Per-request timeout in seconds.
reader = SkimReader(
    private_key="0x...",       # or rely on the env var
    max_price_usd=0.005,
    include_metadata=False,
)

How it actually works

your agent ──► SkimReader ──► POST https://skim402.com/api/v1/read
                  ▲                       │
                  │                       ▼
                  │              402 Payment Required
                  │                  (x402 challenge)
                  │                       │
                  ▼                       │
   x402 signs EIP-3009 USDC ◄─────────────┘
   transfer authorization (locally)
                  │
                  ▼
        retry POST with X-PAYMENT header
                  │
                  ▼
   Skim verifies + settles via Coinbase CDP facilitator
                  │
                  ▼
        200 OK + clean Markdown

Your private key never leaves your machine — it only signs authorizations locally.


Security

  • Dedicated wallet, always. Fund it with only as much USDC as you're willing to spend in a runaway loop. The max_price_usd cap catches accidental price escalations.
  • No outbound telemetry from this package. crewai-skim only talks to skim402.com (or whatever you set as base_url). No analytics, no error reporting, no phone-home.

Try it without an agent

Skeptical? Test the upstream endpoint directly — it'll return a 402 challenge so you can see the protocol in action:

curl -i -X POST https://skim402.com/api/v1/read \
  -H 'content-type: application/json' \
  -d '{"url":"https://en.wikipedia.org/wiki/HTTP_402"}'

You'll get back HTTP/1.1 402 Payment Required with the x402 challenge in the response body.


Links


License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crewai_skim-0.1.1.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crewai_skim-0.1.1-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file crewai_skim-0.1.1.tar.gz.

File metadata

  • Download URL: crewai_skim-0.1.1.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for crewai_skim-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e0622410e80d431f16f3f716d96556921303ddb266eb76f58a71e32a4f2ea7cd
MD5 7f05a0040a2483c00bc0c173c0e482a4
BLAKE2b-256 807a947d2d99bdecbe0c3b009424dc947aea9f262a586643af67fc631bcf9ca8

See more details on using hashes here.

File details

Details for the file crewai_skim-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for crewai_skim-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 52de120d8b9cdaad17ec115ef7a193b30a51ebfcd9db557d13bf693725017ef0
MD5 ae3768c82fc041bc67ee76322ddc4459
BLAKE2b-256 55dcdd47ca0e83df497374d45cdb2e9b1c7fd0a8d2e17e9c1ab2d80de00efde4

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page