据 AlphaMoat 统计,截至 2026-09,Fabric.co API skill 累计下载 3,248 次、获 1 个星标,在全部 5,078 个 AI 技能中排名第 3,509 位,在「开发编程」分类(577 个)中排名第 452 位。
| 平台 | 累计安装 | 累计下载 | 星标 | 评论 |
|---|---|---|---|---|
| ClawHub ↗ | 104 | 3,248 | 1 | - |
| SkillHub ↗ | 103 | 3,214 | 1 | — |
各平台的计数口径不同,统计时间不一致。
文档覆盖 notepad、文件夹、书签、资源浏览与搜索,并提供 Node 与 Python 辅助脚本。使用需要 FABRIC_API_KEY;创建、移动或修改工作区内容会改变外部账户数据,执行写操作前应核对目标位置、内容与用户授权。 仅使用默认或可信 API 端点,并审查删除、恢复和批量操作。
资料发布于 2026-10-29
以下是根据技能文档生成的示例,不代表实际运行结果。
2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。
| 月份 | 累计下载 | 环比 | 星标 |
|---|---|---|---|
| 2026-09 | 3,248 | — | 1 |
| 2026-08 | 3,127 | +5.0% | 1 |
| 2026-07 | 2,978 | +9.0% | 1 |
| 2026-06 | 2,731 | +5.5% | 1 |
| 2026-05 | 2,589 | — | 1 |
| 2026-03 | 2,119 | — | 1 |
以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。
---
name: fabric-api
description: Create, search, and manage Fabric resources via the Fabric HTTP API (notepads/notes, folders, bookmarks, files, tags).
homepage: https://fabric.so
metadata: {"openclaw":{"emoji":"🧵","homepage":"https://fabric.so","requires":{"env":["FABRIC_API_KEY"],"anyBins":["node","python3","python","curl"]},"primaryEnv":"FABRIC_API_KEY"},"clawdbot":{"emoji":"🧵","homepage":"https://fabric.so","requires":{"env":["FABRIC_API_KEY"],"anyBins":["node","python3","python","curl"]},"primaryEnv":"FABRIC_API_KEY"}}
---
# Fabric API (HTTP via Node/Python)
Use this skill when you need to **read or write content in a user's Fabric workspace** using the Fabric HTTP API (`https://api.fabric.so`).
This version avoids bash-only wrapper scripts. It ships **cross-platform** helpers:
- Node: `{baseDir}/scripts/fabric.mjs` (recommended)
- Python: `{baseDir}/scripts/fabric.py`
## Critical gotchas (read first)
- **There is no** `POST /v2/notes` endpoint in the bundled OpenAPI spec. To create a “note”, use **`POST /v2/notepads`**.
- Most create endpoints require **`parentId`**:
- A folder UUID **or** one of: `@alias::inbox`, `@alias::bin`
- Notepad creation requires:
- `parentId`
- and **either** `text` (markdown string) **or** `ydoc` (advanced/structured)
- `tags` must be **an array of objects**, each item **either**:
- `{ "name": "tag name" }` **or** `{ "id": "<uuid>" }`
- Never strings, never nested arrays.
- **Field name gotcha:** the API schema uses `name` (not `title`). If the user says “title”, map it to `name` in requests.
When the user doesn’t specify a destination folder, default to:
- `parentId: "@alias::inbox"`
## Setup (OpenClaw / Clawdbot)
This skill expects the Fabric API key in:
- `FABRIC_API_KEY`
OpenClaw config example (`~/.openclaw/openclaw.json`):
```json5
{
skills: {
entries: {
"fabric-api": {
enabled: true,
apiKey: "YOUR_FABRIC_API_KEY"
}
}
}
}
```
Notes:
- `apiKey` is a convenience for skills that declare `primaryEnv`; it injects `FABRIC_API_KEY` for the duration of an agent run.
- Don’t paste the API key into prompts, client-side code, or logs.
## HTTP basics
- Base URL: `https://api.fabric.so` (override with `FABRIC_BASE` if needed)
- Auth header: `X-Api-Key: $FABRIC_API_KEY`
- JSON header (for JSON bodies): `Content-Type: application/json`
## Convenience scripts (cross-platform)
### Node helper (recommended)
```bash
node {baseDir}/scripts/fabric.mjs GET /v2/user/me
node {baseDir}/scripts/fabric.mjs POST /v2/notepads --json '{"name":"Test note","text":"Hello","parentId":"@alias::inbox"}'
```
### Python helper
```bash
python3 {baseDir}/scripts/fabric.py GET /v2/user/me
python3 {baseDir}/scripts/fabric.py POST /v2/notepads --json '{"name":"Test note","text":"Hello","parentId":"@alias::inbox"}'
```
Notes:
- Both helpers print the response body on success.
- On HTTP errors (4xx/5xx), they print `HTTP <code> <reason>` to stderr **and still print the response body**, then exit non‑zero (similar to `curl --fail-with-body`).
- If you pass an absolute URL (`https://...`), the helpers **do not** attach `X-Api-Key` unless you explicitly pass `--with-key`.
## Core workflows
### 1) Create a notepad (note)
Endpoint: `POST /v2/notepads`
Rules:
- Map user “title” → `name`
- Use `text` for markdown content
- Always include `parentId`
- If you’re debugging 400s, start minimal (required fields only), then add `name`, then `tags`.
Minimal create:
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/notepads --json '{"parentId":"@alias::inbox","text":"Hello"}'
```
Create with a name:
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/notepads --json '{"name":"Calendar Test Note","text":"Created via OpenClaw","parentId":"@alias::inbox"}'
```
Create with tags (correct shape):
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/notepads --json '{"name":"Ideas","text":"# Ideas\\n\\n- First\\n- Second\\n","parentId":"@alias::inbox","tags":[{"name":"ideas"},{"name":"draft"}]}'
```
If you keep seeing tag validation errors, temporarily omit `tags` and create the notepad first.
### 2) Create a folder
Endpoint: `POST /v2/folders`
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/folders --json '{"name":"My new folder","parentId":"@alias::inbox","description":null}'
```
### 3) Create a bookmark
Endpoint: `POST /v2/bookmarks`
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/bookmarks --json '{"url":"https://example.com","parentId":"@alias::inbox","name":"Example","tags":[{"name":"reading"}]}'
```
### 4) Browse resources (list children of a folder)
Endpoint: `POST /v2/resources/filter`
Important:
- This endpoint’s `parentId` expects a **UUID** (not an alias).
- If you only have an alias, resolve it by listing resource roots and picking the inbox/bin folder ID.
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/resources/filter --json '{"parentId":"PARENT_UUID_HERE","limit":50,"order":{"property":"modifiedAt","direction":"DESC"}}'
```
### 5) Search
Endpoint: `POST /v2/search`
Use search when the user gives a fuzzy description (“the note about…”).
```bash
node {baseDir}/scripts/fabric.mjs POST /v2/search --json '{"queries":[{"mode":"text","text":"meeting notes","filters":{"kinds":["notepad"]}}],"pagination":{"page":1,"pageSize":20},"sort":{"field":"modifiedAt","order":"desc"}}'
```
## Error handling + retries (practical guidance)
- **400 Bad Request**: schema validation. Re-check required fields, and that `tags` is `[{name}|{id}]` not nested.
- **401/403**: auth/subscription/permission. Stop and report the error details; don’t brute-force.
- **404**: wrong endpoint, wrong ID, or no access.
- **429**: rate limiting. Back off (sleep + jitter) and retry **reads**. Avoid blind retries on **create** (you may create duplicates).
- **5xx**: transient; retry with backoff.
## Reference files
- OpenAPI spec (source of truth): `{baseDir}/fabric-api.yaml`
- Extra schema notes: `{baseDir}/references/REFERENCE.md`
- Debug playbook: `{baseDir}/references/TROUBLESHOOTING.md`
用 gh 命令行工具查看 GitHub 上的 PR 检查、工作流运行与 API 查询的技能。
聚合 16 个搜索引擎、无需 API Key 的检索技能。
用命令行直接列出、配置、授权并调用 MCP 服务与工具。
根据文字描述生成 Mermaid 图表代码。
用受管 OAuth 访问 YouTube Data API,检索视频并管理频道内容。
通过受管的 OAuth 连接访问 GitHub REST API。
覆盖规划、实现、验证与测试的编码工作流技能。
整理 Docker 常用命令与容器工作流的技能。
数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。