← Back to Skills Marketplace
wangzhiming1999

Felo Web Extract

by wangzhiming · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
391
Downloads
0
Stars
4
Active Installs
1
Versions
Install in OpenClaw
/install felo-web-extract
Description
Extract web page content from a URL using Felo Web Extract API. Use when users ask to scrape/capture/fetch webpage content, extract article text from URL, co...
README (SKILL.md)

\r \r

Felo Web Extract Skill\r

\r

When to Use\r

\r Trigger this skill when the user wants to:\r \r

  • Extract or scrape content from a webpage URL\r
  • Get article/main text from a link\r
  • Convert a webpage to Markdown or plain text\r
  • Capture readable content from a URL for summarization or processing\r \r Trigger keywords (examples):\r \r
  • extract webpage, scrape URL, fetch page content, web extract, url to markdown\r
  • Explicit: /felo-web-extract, "use felo web extract"\r
  • Same intent in other languages (e.g. 网页抓取, 提取网页内容) also triggers this skill\r \r Do NOT use for:\r \r
  • Real-time search or Q&A (use felo-search)\r
  • Generating slides (use felo-slides)\r
  • Local file content (read files directly)\r \r

Setup\r

\r

1. Get API key\r

\r

  1. Visit felo.ai\r
  2. Open Settings -> API Keys\r
  3. Create and copy your API key\r \r

2. Configure environment variable\r

\r Linux/macOS:\r \r

export FELO_API_KEY="your-api-key-here"\r
```\r
\r
Windows PowerShell:\r
\r
```powershell\r
$env:FELO_API_KEY="your-api-key-here"\r
```\r
\r
## How to Execute\r
\r
### Option A: Use the bundled script or packaged CLI\r
\r
**Script** (from repo):\r
\r
```bash\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com/article" [options]\r
```\r
\r
**Packaged CLI** (after `npm install -g felo-ai`): same options, with short forms allowed:\r
\r
```bash\r
felo web-extract -u "https://example.com" [options]\r
# Short forms: -u (url), -f (format), -t (timeout, seconds), -j (json)\r
```\r
\r
Options:\r
\r
| Option | Default | Description |\r
|--------|---------|-------------|\r
| `--url` | (required) | Webpage URL to extract |\r
| `--format` | markdown | Output format: `html`, `text`, `markdown` |\r
| `--target-selector` | - | CSS selector: extract only this element (e.g. `article.main`, `#content`) |\r
| `--wait-for-selector` | - | Wait for this selector before extracting (e.g. dynamic content) |\r
| `--readability` | false | Enable readability processing (main content only) |\r
| `--crawl-mode` | fast | `fast` or `fine` |\r
| `--timeout` | 60000 (script) / 60 (CLI) | Request timeout: script uses **milliseconds**, CLI uses **seconds** (e.g. `-t 90`) |\r
| `--json` / `-j` | false | Print full API response as JSON |\r
\r
### How to write instructions (target_selector + output_format)\r
\r
When the user wants a **specific part** of the page or a **specific output format**, phrase the command like this:\r
\r
- **Output format**: "Extract as **text**" / "Get **markdown**" / "Return **html**" → use `--format text`, `--format markdown`, or `--format html`.\r
- **Target one element**: "Only the **main article**" / "Just the **content inside** `#main`" / "Extract only **article.main-content**" → use `--target-selector "article.main"` or the selector they give (e.g. `#main`, `.main-content`, `article .post`).\r
\r
Examples of user intents and equivalent commands:\r
\r
| User intent | Command |\r
|-------------|---------|\r
| "Extract this page as plain text" | `--url "..." --format text` |\r
| "Get only the main content area" | `--url "..." --target-selector "main"` or `article` |\r
| "Extract the div with id=content as markdown" | `--url "..." --target-selector "#content" --format markdown` |\r
| "Just the article body, as HTML" | `--url "..." --target-selector "article .body" --format html` |\r
\r
Examples:\r
\r
```bash\r
# Basic: extract as Markdown\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com"\r
\r
# Article-style with readability\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com/article" --readability --format markdown\r
\r
# Raw HTML\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com" --format html --json\r
\r
# Only the element matching a CSS selector (e.g. main article)\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com" --target-selector "article.main" --format markdown\r
\r
# Specific output format + target selector\r
node felo-web-extract/scripts/run_web_extract.mjs --url "https://example.com" --target-selector "#content" --format text\r
```\r
\r
### Option B: Call API with curl\r
\r
```bash\r
curl -X POST "https://openapi.felo.ai/v2/web/extract" \\r
  -H "Authorization: Bearer $FELO_API_KEY" \\r
  -H "Content-Type: application/json" \\r
  -d '{"url": "https://example.com", "output_format": "markdown", "with_readability": true}'\r
```\r
\r
## API Reference (summary)\r
\r
- **Endpoint**: `POST /v2/web/extract`\r
- **Base URL**: `https://openapi.felo.ai`. Override with `FELO_API_BASE` env if needed.\r
- **Auth**: `Authorization: Bearer YOUR_API_KEY`\r
\r
### Request body (JSON)\r
\r
| Parameter | Type | Required | Default | Description |\r
|-----------|------|----------|---------|-------------|\r
| url | string | Yes | - | Webpage URL to extract |\r
| crawl_mode | string | No | fast | `fast` or `fine` |\r
| output_format | string | No | html | `html`, `text`, `markdown` |\r
| with_readability | boolean | No | - | Use readability (main content) |\r
| with_links_summary | boolean | No | - | Include links summary |\r
| with_images_summary | boolean | No | - | Include images summary |\r
| target_selector | string | No | - | CSS selector for target element |\r
| wait_for_selector | string | No | - | Wait for selector before extract |\r
| timeout | integer | No | - | Timeout in milliseconds |\r
| with_cache | boolean | No | true | Use cache |\r
\r
### Response\r
\r
Success (200):\r
\r
```json\r
{\r
  "code": 0,\r
  "message": "success",\r
  "data": {\r
    "content": { ... }\r
  }\r
}\r
```\r
\r
Extracted content is in `data.content`; structure depends on `output_format`.\r
\r
### Error codes\r
\r
| HTTP | Code | Description |\r
|------|------|-------------|\r
| 400 | - | Parameter validation failed |\r
| 401 | INVALID_API_KEY | API key invalid or revoked |\r
| 500/502 | WEB_EXTRACT_FAILED | Extract failed (server or page error) |\r
\r
## Output Format\r
\r
On success (script without `--json`):\r
\r
- Print the extracted content only (for direct use or piping).\r
\r
With `--json`:\r
\r
- Print full API response including `code`, `message`, `data`.\r
\r
Error response to user:\r
\r
```markdown\r
## Web Extract Failed\r
\r
- Error: \x3Ccode or message>\r
- URL: \x3Crequested url>\r
- Suggestion: \x3Ce.g. check URL, retry, or use --timeout>\r
```\r
\r
## Important Notes\r
\r
- Always check `FELO_API_KEY` before calling; if missing, return setup instructions.\r
- For long articles or slow sites, consider `--timeout` or `timeout` in request body.\r
- Use `output_format: "markdown"` and `with_readability: true` for clean article text.\r
- API may cache results; use `with_cache: false` in body only when fresh content is required (script does not expose this by default).\r
\r
## References\r
\r
- [Felo Web Extract API](https://openapi.felo.ai/docs/api-reference/v2/web-extract.html)\r
- [Felo Open Platform](https://openapi.felo.ai/docs/)\r
Usage Guidance
This skill appears to do what it says (POST to openapi.felo.ai to extract page content), but the manifest failed to declare the required FELO_API_KEY. Before installing or running: (1) confirm you are comfortable supplying your Felo API key (ensure the key's scope/permissions are appropriate); (2) verify the provider (openapi.felo.ai / felo.ai) and that the key will only be sent to that endpoint; (3) be aware the included Node script will make network requests using whatever FELO_API_KEY is present in the environment — avoid exposing broader credentials; (4) because the skill source/homepage is listed as unknown, prefer obtaining the tool directly from a trusted Felo release or the vendor if available. If you need higher assurance, request that the skill manifest be updated to declare FELO_API_KEY explicitly and provide publisher/homepage provenance.
Capability Analysis
Type: OpenClaw Skill Name: felo-web-extract Version: 1.0.0 The felo-web-extract skill is a legitimate tool designed to extract webpage content via the Felo Web Extract API (openapi.felo.ai). The core logic in scripts/run_web_extract.mjs is transparent, using standard Node.js fetch calls to send user-provided URLs to the official API endpoint, and it correctly handles authentication via the FELO_API_KEY environment variable without any signs of data exfiltration, obfuscation, or malicious intent.
Capability Assessment
Purpose & Capability
Name, description, README, SKILL.md, and the included Node script all consistently implement a web-extraction client for the Felo API. However the skill's registry metadata claims 'Required env vars: none' while the runtime explicitly requires FELO_API_KEY (and optionally FELO_API_BASE). That metadata omission is an incoherence.
Instruction Scope
Runtime instructions and the script only perform an HTTP POST to the Felo API, accept user-supplied URL and selector options, and print returned content. The skill does not read arbitrary local files, other credentials, or call unexpected external endpoints beyond the documented openapi.felo.ai endpoint (FELO_API_BASE override is documented).
Install Mechanism
There is no install spec (instruction-only style) and the included script is plain JavaScript (no obfuscation). No downloads from untrusted URLs or archive extraction are present. The script will run locally if executed, but nothing in the repository attempts to install additional packages automatically.
Credentials
The runtime requires an API key (FELO_API_KEY) to authenticate with the Felo service, which is proportionate to the skill's purpose. The concern is that this required credential is not declared in the registry metadata (manifest lists 'none'), creating a mismatch: users or systems that rely on the manifest might not realize an API key is necessary or might supply it incorrectly. No other unrelated secrets are requested.
Persistence & Privilege
The skill is not set to 'always' and does not request persistent system-wide privileges. It does not modify other skills or system configs. Autonomous invocation is allowed by default (platform normal) but not combined with other privilege escalations.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install felo-web-extract
  3. After installation, invoke the skill by name or use /felo-web-extract
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release of felo-web-extract skill. - Extracts content from web pages (URL) using the Felo Web Extract API. - Supports extraction as HTML, plain text, or Markdown, with options for readability mode and target element via CSS selector. - CLI script and API usage instructions included for setup and execution. - Clearly distinguishes use cases from other skills, like felo-search and felo-slides. - Provides troubleshooting, error codes, and output formatting guidance.
Metadata
Slug felo-web-extract
Version 1.0.0
License
All-time Installs 4
Active Installs 4
Total Versions 1
Frequently Asked Questions

What is Felo Web Extract?

Extract web page content from a URL using Felo Web Extract API. Use when users ask to scrape/capture/fetch webpage content, extract article text from URL, co... It is an AI Agent Skill for Claude Code / OpenClaw, with 391 downloads so far.

How do I install Felo Web Extract?

Run "/install felo-web-extract" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Felo Web Extract free?

Yes, Felo Web Extract is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Felo Web Extract support?

Felo Web Extract is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Felo Web Extract?

It is built and maintained by wangzhiming (@wangzhiming1999); the current version is v1.0.0.

💬 Comments