@clawhub-hanxueyuan-e623f15c7a
Information assistant for Lionel Messi 梅西. Get biography, latest news, career highlights, and social media updates.
---
name: messi
description: "Information assistant for Lionel Messi 梅西. Get biography, latest news, career highlights, and social media updates."
metadata:
{ "openclaw": { "emoji": "⭐", "version": "0.1.0", "author": "hanxueyuan", "tags": ["celebrity","football","person"] } }
---
# ⭐ Lionel Messi 梅西 — Celebrity Info Assistant
Get comprehensive information about Lionel Messi 梅西.
## About
- **Name**: Lionel Messi 梅西
- **Known For**: Football GOAT, 8x Ballon d'Or
- **Category**: Football
## What This Skill Does
1. **Biography** — Life story, early career, key milestones
2. **Career Highlights** — Major achievements, awards, records
3. **Latest News** — Recent activities, announcements, interviews
4. **Business Ventures** — Brands, investments, endorsements
5. **Social Media** — Latest posts, follower counts, trending content
## Example Queries
- "Tell me about Lionel"
- "Latest news about Lionel"
- "What businesses does Lionel own?"
- "Lionel net worth"
## How It Works
Uses web search to fetch real-time information from news sources, social media, and biographical databases.
## Author
Created by hanxueyuan | License: MIT
Information assistant for Ferrari 法拉利. Search models, specs, pricing, reviews, and dealership info.
--- summary: "法拉利 Ferrari——意大利超跑品牌、F1 赛车传奇、红色跃马的终极梦想" read_when: - 查询法拉利 · Ferrari相关信息 - 了解相关行业发展 --- # 法拉利 · Ferrari --- ## 发展历程 | 时期 | 关键事件 | |:----:|--------| | **1939 年** | Enzo Ferrari 从 Alfa Romeo 赛车部门独立出来创立 Auto Avio Costruzioni | | **1947 年** | 第一辆法拉利 125 S 诞生 | | **1950s-2020s** | F1 历史上最成功的车队——16 次车队冠军 | | **1969 年** | 菲亚特收购 50% 股权(2016 年法拉利独立上市) | | **2016 年** | 独立上市——市值超过菲亚特克莱斯勒 | | **2020s** | 推出 Purosangue——第一款法拉利 SUV(四门轿跑) | --- ## 核心特点 超跑(296 GTB/SF90/ Roma)+ 限量版(Icona 系列)+ F1 赛车 + 品牌授权 ## 核心优势 F1 赛车基因+限量版策略(每年只生产约 13000 辆)+ 品牌溢价极高 --- ## 关键数据 | 指标 | 数值 | |------|------| | 年营收 | 约 59 亿欧元 | | 年产量 | 约 13000 辆 | | 净利润率 | 约 25%(汽车业最高) | | 员工数 | 约 5500 人 | --- ## 值得了解 法拉利的二手车往往升值——经典车型拍卖价超过 5000 万美元
星巴克品牌介绍和购物指南
--- summary: "Starbucks 星巴克 - 咖啡连锁品牌技能" read_when: - 用户需要查询星巴克信息 - 用户询问咖啡品牌 - 用户需要咖啡厅推荐 --- # Starbucks 星巴克技能 ## 技能描述 Starbucks(星巴克)是全球最大咖啡连锁品牌,以咖啡、茶饮、糕点闻名。本技能帮助用户查询星巴克产品、优惠、门店信息。 ## 核心功能 - ☕ **产品查询**:咖啡、茶饮、星冰乐 - 🍰 **食品查询**:糕点、三明治、轻食 - 💰 **优惠信息**:星星奖励、促销活动 - 🏪 **门店查询**:附近门店、营业时间 - 📱 **APP 功能**:手机点餐、会员积分 - 🎁 **礼品卡**:星礼卡、礼品推荐 ## 使用场景 - 查询附近星巴克 - 获取优惠信息 - 了解产品菜单 - 会员积分查询 ## 注意事项 - 优惠可能因地区而异 - 部分产品季节性供应 - 会员星星有有效期
Information assistant for Mercedes-Benz. Search products, news, financials, and official resources for Mercedes-Benz.
--- summary: "mercedes 使用指南" read_when: - 用户询问 mercedes - 需要 mercedes 详细信息 --- # mercedes 百科 mercedes 是你可能听说过的知名品牌。让我们一起了解它。 ## 内容导航 ▸ 品牌故事 — 创立背景和发展节点 ▸ 产品矩阵 — 主要业务线和特色产品 ▸ 全球足迹 — 市场覆盖和分支机构 ▸ 行业观察 — 竞争分析和未来趋势 ## 典型场景 「我要了解 mercedes 的基本信息」→ 使用本技能 「我需要 mercedes 的产品详情」→ 使用本技能 「我想对比 mercedes 和竞品」→ 使用本技能 📖 深入阅读请访问官方网站或查阅行业白皮书。
Information assistant for BMW. Search products, news, financials, and official resources for BMW.
--- version: 1.0.4 summary: "bmw 详细信息" read_when: - 用户询问 bmw - 用户需要了解 bmw 相关信息 --- # 关于 bmw bmw 是业内知名的品牌/组织。本技能帮助用户获取 bmw 的详细资料,包括发展历程、业务范围和市场地位。 ## 主要信息 - 创立时间和地点 - 核心业务和产品线 - 全球市场布局 - 行业发展趋势 ## 使用场景 - 背景调研 - 产品信息查询 - 市场分析 ## 参考资源 官方信息请以 bmw 官网发布为准。
Information assistant for 埃安 Aion. Search products, news, financials, and official resources for 埃安 Aion.
---
name: aion
description: "Information assistant for 埃安 Aion. Search products, news, financials, and official resources for 埃安 Aion."
metadata:
{ "openclaw": { "emoji": "🏢", "version": "0.1.0", "author": "hanxueyuan", "tags": ["brand","aion","enterprise-info"] } }
---
# 埃安 Aion — Information Assistant
Query products, news, stock prices, financial reports, and official resources for **埃安 Aion**.
## About
- **Company**: 埃安 Aion
- **Industry**: EV brand (GAC)
- **Official Website**: https://www.aion.com.cn
## What This Skill Does
When activated, this skill helps you:
1. **Product Search** — Find and compare 埃安 Aion products, pricing, and availability
2. **News & Updates** — Get the latest news, press releases, and announcements
3. **Financial Info** — Stock price, market cap, earnings reports (for public companies)
4. **Official Resources** — Direct links to official websites, support pages, and documentation
5. **Competitor Comparison** — Compare with competitors in the same industry
## Usage Examples
- "What are the latest 埃安 Aion products?"
- "Show me 埃安 Aion stock price"
- "Compare 埃安 Aion with competitors"
- "Find 埃安 Aion official support page"
- "What's new at 埃安 Aion?"
## How It Works
This skill uses web search to fetch real-time information about 埃安 Aion from:
- Official website: https://www.aion.com.cn
- Financial data providers
- News aggregators
- Product databases
## Instructions for Agent
When this skill is triggered:
1. Identify the user's specific query about 埃安 Aion
2. Use web search tools to find current information
3. Prioritize official sources (https://www.aion.com.cn)
4. Present results in a structured, easy-to-read format
5. Include direct links to sources
## Author
Created by hanxueyuan | Part of the Agent Commerce ecosystem
License: MIT
Information assistant for Nike. Search products, news, financials, and official resources for Nike.
---
name: nike
description: "Information assistant for Nike. Search products, news, financials, and official resources for Nike."
metadata:
{ "openclaw": { "emoji": "🏢", "version": "0.1.0", "author": "hanxueyuan", "tags": ["brand","nike","enterprise-info"] } }
---
# Nike — Information Assistant
Query products, news, stock prices, financial reports, and official resources for **Nike**.
## About
- **Company**: Nike
- **Industry**: Sportswear
- **Official Website**: https://www.nike.com
## What This Skill Does
When activated, this skill helps you:
1. **Product Search** — Find and compare Nike products, pricing, and availability
2. **News & Updates** — Get the latest news, press releases, and announcements
3. **Financial Info** — Stock price, market cap, earnings reports (for public companies)
4. **Official Resources** — Direct links to official websites, support pages, and documentation
5. **Competitor Comparison** — Compare with competitors in the same industry
## Usage Examples
- "What are the latest Nike products?"
- "Show me Nike stock price"
- "Compare Nike with competitors"
- "Find Nike official support page"
- "What's new at Nike?"
## How It Works
This skill uses web search to fetch real-time information about Nike from:
- Official website: https://www.nike.com
- Financial data providers
- News aggregators
- Product databases
## Instructions for Agent
When this skill is triggered:
1. Identify the user's specific query about Nike
2. Use web search tools to find current information
3. Prioritize official sources (https://www.nike.com)
4. Present results in a structured, easy-to-read format
5. Include direct links to sources
## Author
Created by hanxueyuan | Part of the Agent Commerce ecosystem
License: MIT
Best Adidas product deals
---
name: adidas-deals
description: "Best Adidas product deals"
metadata:
{ "openclaw": { "emoji": "🛒", "version": "0.1.0", "author": "hanxueyuan", "tags": ["shopping","agent-commerce","adidas"] } }
---
# 🛒 Adidas Deals
Best Adidas product deals
## What It Does
Find the best Adidas deals across adidas.com, authorized retailers, and outlet stores. Track new releases, Creators Club member discounts, seasonal sales, and compare prices across platforms for shoes, apparel, and accessories.
## Usage
When the user mentions buying, purchasing, shopping, or looking for product deals, this skill activates to help find the best options.
### Example Prompts
- "Find me the best deal on [product]"
- "Compare prices for [product] across platforms"
- "Is there a coupon for [product]?"
- "Help me buy [product] under [budget]"
## Configuration
Set up API credentials in environment variables as needed for each supported platform.
## Architecture
```
User Request → Intent Parser → Product Search API → Result Ranker → Recommendation Display
```
## Roadmap
- v0.1: Basic product search via web search
- v0.2: Platform API integration
- v0.3: Price tracking and alerts
- v1.0: Full autonomous purchasing flow
## Author
Created by hanxueyuan as part of the Agent Commerce initiative.
License: MIT
Information assistant for Adele 阿黛尔. Get biography, latest news, career highlights, and social media updates.
---
name: adele
description: "Information assistant for Adele 阿黛尔. Get biography, latest news, career highlights, and social media updates."
metadata:
{ "openclaw": { "emoji": "⭐", "version": "0.1.0", "author": "hanxueyuan", "tags": ["celebrity","music","person"] } }
---
# ⭐ Adele 阿黛尔 — Celebrity Info Assistant
Get comprehensive information about Adele 阿黛尔.
## About
- **Name**: Adele 阿黛尔
- **Known For**: British singer
- **Category**: Music
## What This Skill Does
1. **Biography** — Life story, early career, key milestones
2. **Career Highlights** — Major achievements, awards, records
3. **Latest News** — Recent activities, announcements, interviews
4. **Business Ventures** — Brands, investments, endorsements
5. **Social Media** — Latest posts, follower counts, trending content
## Example Queries
- "Tell me about Adele"
- "Latest news about Adele"
- "What businesses does Adele own?"
- "Adele net worth"
## How It Works
Uses web search to fetch real-time information from news sources, social media, and biographical databases.
## Author
Created by hanxueyuan | License: MIT
Information assistant for ADB 亚洲开发银行. Get mission info, latest reports, member states, and organizational resources.
---
name: adb
description: "Information assistant for ADB 亚洲开发银行. Get mission info, latest reports, member states, and organizational resources."
metadata:
{ "openclaw": { "emoji": "🏛️", "version": "0.1.0", "author": "hanxueyuan", "tags": ["organization","institution","info"] } }
---
# 🏛️ ADB 亚洲开发银行 — Organization Info Assistant
Get comprehensive information about ADB 亚洲开发银行.
## About
- **Organization**: ADB 亚洲开发银行
- **Focus**: Asian development
- **Official Website**: https://www.adb.org
## What This Skill Does
1. **Mission & Overview** — What this organization does and why it matters
2. **Latest Reports** — Recent publications, data releases, policy papers
3. **News & Events** — Upcoming meetings, conferences, announcements
4. **Member Info** — Member states/countries, leadership, structure
5. **Resources** — Key databases, tools, and publications
## Example Queries
- "What does ADB do?"
- "Latest ADB report"
- "Who leads ADB?"
- "ADB member countries"
## How It Works
Uses web search to fetch information from official organizational websites and news sources.
## Author
Created by hanxueyuan | License: MIT
Information assistant for Acura 讴歌. Search models, specs, pricing, reviews, and dealership info.
---
name: acura
description: "Information assistant for Acura 讴歌. Search models, specs, pricing, reviews, and dealership info."
metadata:
{ "openclaw": { "emoji": "🚗", "version": "0.1.0", "author": "hanxueyuan", "tags": ["automotive","brand","cars"] } }
---
# 🚗 Acura 讴歌 — Automotive Info Assistant
Your AI guide to Acura 讴歌. Get model info, specs, pricing, reviews, and more.
## About
- **Brand**: Acura 讴歌
- **Category**: Honda luxury brand
- **Official Website**: https://www.acura.com
## What This Skill Does
1. **Model Lineup** — Current models, specs, pricing, and configurations
2. **Reviews & Comparisons** — Expert and user reviews, competitor comparisons
3. **Pricing & Deals** — MSRP, dealer pricing, incentives, and financing options
4. **News & Updates** — Latest launches, recalls, technology updates
5. **Dealership Locator** — Find nearby dealers and service centers
## Example Queries
- "What Acura models are available?"
- "Compare Acura vs [competitor]"
- "Acura latest news"
- "Best Acura for families"
## How It Works
Uses web search to fetch real-time information from https://www.acura.com, automotive review sites, and dealer networks.
## Author
Created by hanxueyuan | License: MIT
Information assistant for 比亚迪 BYD. Search products, news, financials, and official resources for 比亚迪 BYD.
--- summary: "byd - 品牌/组织详细信息" read_when: - 用户询问 byd - 用户想了解 byd 的背景或产品 --- # byd byd 是在其领域具有知名度的品牌。本技能帮助用户获取关于 byd 的结构化信息。 ## 信息概览 - 创立时间和总部地点 - 核心业务和产品范围 - 全球市场分布情况 - 行业地位和竞争格局 - 近期重要动态和新闻 ## 使用场景 - 商业背景调研 - 产品信息查询 - 市场分析和决策参考 ## 延伸资源 官方网站:https://www.byd.com 建议查阅官方发布内容和权威行业报告获取最新、最准确的信息。
Search the web using coze-coding-dev-sdk. Supports web search, image search, AI summaries, time filters, and site restrictions.
---
name: coze-web-search
description: Search the web using coze-coding-dev-sdk. Supports web search, image search, AI summaries, time filters, and site restrictions.
homepage: https://www.coze.com
metadata: { "openclaw": { "emoji": "🔍", "requires": { "bins": ["npx"] } } }
---
# Coze Web Search
Search the web using coze-coding-dev-sdk. Returns structured results with URLs, snippets, and AI summaries.
## Quick Start
### Basic Search
```bash
npx ts-node {baseDir}/scripts/search.ts -q "Python programming"
```
### With Time Filter
```bash
npx ts-node {baseDir}/scripts/search.ts \
-q "AI news" \
--time-range 1w \
--count 15
```
### Site-Specific Search
```bash
npx ts-node {baseDir}/scripts/search.ts \
-q "Python tutorials" \
--sites "python.org,github.com,stackoverflow.com"
```
### Image Search
```bash
npx ts-node {baseDir}/scripts/search.ts \
-q "mountain landscape" \
--type image \
--count 20
```
### Output as Markdown
```bash
npx ts-node {baseDir}/scripts/search.ts \
-q "machine learning" \
--format markdown
```
## Script Options
| Option | Description |
| ------------------------- | ------------------------------------------ |
| `-q, --query <text>` | Search query (required) |
| `--type <type>` | `web` or `image` (default: web) |
| `--count <n>` | Number of results (default: 10) |
| `--time-range <range>` | `1d`, `1w`, `1m` (web only) |
| `--sites <domains>` | Comma-separated domains to include |
| `--block-hosts <domains>` | Comma-separated domains to exclude |
| `--no-summary` | Disable AI summary |
| `--need-content` | Include full page content |
| `--format <fmt>` | `json`, `text`, `markdown` (default: text) |
## Time Range
| Value | Description |
| ----- | ------------- |
| `1d` | Last 24 hours |
| `1w` | Last week |
| `1m` | Last month |
## Output Formats
### Text (default)
```
============================================================
AI SUMMARY
============================================================
Python is a high-level programming language...
============================================================
SEARCH RESULTS (10 items)
============================================================
[1] Python.org
URL: https://www.python.org
Source: Python Software Foundation
The official home of the Python Programming Language...
```
### Markdown
Formatted with headers, links, and collapsible content sections.
### JSON
Raw API response.
## Notes
- Use `--time-range` for recent content
- Use `--sites` to limit to trusted sources
- Use `--need-content` sparingly (increases response size)
FILE:scripts/search.ts
#!/usr/bin/env npx ts-node
import { SearchClient, Config, APIError } from "coze-coding-dev-sdk";
interface SearchOptions {
query: string;
type: "web" | "image";
count: number;
timeRange?: string;
sites?: string;
blockHosts?: string;
needSummary: boolean;
needContent: boolean;
format: "json" | "text" | "markdown";
}
function formatWebResultsAsMarkdown(
results: any[],
summary?: string
): string {
let md = "# Web Search Results\n\n";
if (summary) {
md += "## AI Summary\n\n";
md += `summary\n\n`;
md += "---\n\n";
}
md += "## Results\n\n";
results.forEach((item, i) => {
md += `### i + 1. item.title\n\n`;
md += `- **URL**: item.url\n`;
md += `- **Source**: item.site_name || "Unknown"\n`;
if (item.publish_time) {
md += `- **Published**: item.publish_time\n`;
}
md += `\nitem.snippet\n\n`;
if (item.content) {
md += `<details>\n<summary>Full Content</summary>\n\nitem.content.slice(0, 2000)""\n\n</details>\n\n`;
}
});
return md;
}
function formatImageResultsAsMarkdown(results: any[]): string {
let md = "# Image Search Results\n\n";
results.forEach((item, i) => {
md += `### i + 1. item.title || "Untitled"\n\n`;
md += `- **Source**: item.site_name || "Unknown"\n`;
md += `- **Page URL**: item.url || "N/A"\n`;
md += `- **Image URL**: item.image?.url\n`;
if (item.image?.width && item.image?.height) {
md += `- **Size**: item.image.widthxitem.image.height\n`;
}
md += `\n\n\n`;
});
return md;
}
function formatWebResultsAsText(results: any[], summary?: string): string {
let text = "";
if (summary) {
text += "=".repeat(60) + "\n";
text += "AI SUMMARY\n";
text += "=".repeat(60) + "\n";
text += summary + "\n\n";
}
text += "=".repeat(60) + "\n";
text += `SEARCH RESULTS (results.length items)\n`;
text += "=".repeat(60) + "\n\n";
results.forEach((item, i) => {
text += `[i + 1] item.title\n`;
text += ` URL: item.url\n`;
text += ` Source: item.site_name || "Unknown"\n`;
if (item.publish_time) {
text += ` Published: item.publish_time\n`;
}
text += ` item.snippet.slice(0, 200)""\n\n`;
});
return text;
}
function formatImageResultsAsText(results: any[]): string {
let text = "=".repeat(60) + "\n";
text += `IMAGE RESULTS (results.length items)\n`;
text += "=".repeat(60) + "\n\n";
results.forEach((item, i) => {
text += `[i + 1] item.title || "Untitled"\n`;
text += ` Source: item.site_name || "Unknown"\n`;
text += ` Image: item.image?.url\n`;
if (item.image?.width && item.image?.height) {
text += ` Size: item.image.widthxitem.image.height\n`;
}
text += "\n";
});
return text;
}
async function main(): Promise<number> {
const args = process.argv.slice(2);
const options: SearchOptions = {
query: "",
type: "web",
count: 10,
needSummary: true,
needContent: false,
format: "text",
};
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if ((arg === "--query" || arg === "-q") && args[i + 1]) {
options.query = args[++i];
} else if (arg === "--type" && args[i + 1]) {
options.type = args[++i] as "web" | "image";
} else if (arg === "--count" && args[i + 1]) {
options.count = parseInt(args[++i], 10);
} else if (arg === "--time-range" && args[i + 1]) {
options.timeRange = args[++i];
} else if (arg === "--sites" && args[i + 1]) {
options.sites = args[++i];
} else if (arg === "--block-hosts" && args[i + 1]) {
options.blockHosts = args[++i];
} else if (arg === "--no-summary") {
options.needSummary = false;
} else if (arg === "--need-content") {
options.needContent = true;
} else if (arg === "--format" && args[i + 1]) {
options.format = args[++i] as "json" | "text" | "markdown";
} else if (arg === "--help") {
console.log(`
Usage: npx ts-node search.ts [OPTIONS]
Options:
-q, --query <text> Search query (required)
--type <type> Search type: web or image (default: web)
--count <n> Number of results (default: 10)
--time-range <range> Time filter: 1d, 1w, 1m (web search only)
--sites <domains> Comma-separated domains to include
--block-hosts <domains> Comma-separated domains to exclude
--no-summary Disable AI summary
--need-content Include full page content
--format <fmt> Output format: json, text, markdown (default: text)
--help Show this help message
Examples:
# Basic web search
npx ts-node search.ts -q "Python programming"
# Search with time filter and site restriction
npx ts-node search.ts -q "AI news" --time-range 1w --sites "techcrunch.com,wired.com"
# Image search
npx ts-node search.ts -q "cute cats" --type image --count 20
# Output as markdown
npx ts-node search.ts -q "machine learning" --format markdown
`);
return 0;
}
}
if (!options.query) {
console.error("Error: --query is required");
return 1;
}
const config = new Config();
const client = new SearchClient(config);
try {
let response: any;
if (options.type === "image") {
console.log(`Searching images for: "options.query"...`);
response = await client.imageSearch(options.query, options.count);
} else {
const hasAdvancedOptions =
options.timeRange || options.sites || options.blockHosts || options.needContent;
if (hasAdvancedOptions) {
console.log(`Advanced searching for: "options.query"...`);
response = await client.advancedSearch(options.query, {
searchType: "web",
count: options.count,
timeRange: options.timeRange,
sites: options.sites,
blockHosts: options.blockHosts,
needSummary: options.needSummary,
needContent: options.needContent,
});
} else {
console.log(`Searching for: "options.query"...`);
response = await client.webSearch(
options.query,
options.count,
options.needSummary
);
}
}
let output: string;
if (options.format === "json") {
output = JSON.stringify(response, null, 2);
} else if (options.format === "markdown") {
if (options.type === "image") {
output = formatImageResultsAsMarkdown(response.image_items || []);
} else {
output = formatWebResultsAsMarkdown(
response.web_items || [],
response.summary
);
}
} else {
if (options.type === "image") {
output = formatImageResultsAsText(response.image_items || []);
} else {
output = formatWebResultsAsText(response.web_items || [], response.summary);
}
}
console.log("\n" + output);
const itemCount =
options.type === "image"
? (response.image_items?.length || 0)
: (response.web_items?.length || 0);
console.log(`\nFound itemCount results.`);
return 0;
} catch (error) {
if (error instanceof APIError) {
console.error(`API Error: error.message`);
console.error(`Status Code: error.statusCode`);
} else {
console.error(`Error: String(error)`);
}
return 1;
}
}
main().then((code) => process.exit(code));
Fetch and extract content from URLs using coze-coding-dev-sdk. Supports web pages, PDF, Office documents (doc/docx/ppt/pptx/xls/xlsx/csv), text files, e-book...
---
name: coze-web-fetch
description: Fetch and extract content from URLs using coze-coding-dev-sdk. Supports web pages, PDF, Office documents (doc/docx/ppt/pptx/xls/xlsx/csv), text files, e-books (epub/mobi), XML, and images. Returns structured content with text, images, and links.
homepage: https://www.coze.com
metadata: { "openclaw": { "emoji": "🦞", "requires": { "bins": ["npx"] } } }
---
# Coze Web Fetch
Fetch and extract structured content from any URL using coze-coding-dev-sdk. Returns text, images, and links in various output formats.
## Quick Start
### Basic Fetch
```bash
npx ts-node {baseDir}/scripts/fetch.ts -u "https://example.com/article"
```
### Multiple URLs
```bash
npx ts-node {baseDir}/scripts/fetch.ts \
-u "https://example.com/page1" \
-u "https://example.com/page2"
```
### Output as Markdown
```bash
npx ts-node {baseDir}/scripts/fetch.ts \
-u "https://docs.python.org/3/tutorial/" \
--format markdown
```
### Output as JSON
```bash
npx ts-node {baseDir}/scripts/fetch.ts \
-u "https://example.com/document.pdf" \
--format json
```
### Text Only (No Images/Links)
```bash
npx ts-node {baseDir}/scripts/fetch.ts \
-u "https://example.com/article" \
--text-only
```
## Script Options
| Option | Description |
| -------------------- | ------------------------------------------ |
| `-u, --url <url>` | URL to fetch (required, can be repeated) |
| `--format <fmt>` | `json`, `text`, `markdown` (default: text) |
| `--text-only` | Extract text content only |
| `--help` | Show help message |
## Supported Document Formats
| Format | Extensions |
| ---------------- | ------------------------------------------- |
| PDF | .pdf |
| Office Documents | .doc, .docx, .ppt, .pptx, .xls, .xlsx, .csv |
| Text Files | .txt, .text |
| E-books | .epub, .mobi |
| XML | .xml |
| Images | .jpg, .png, .gif, .webp, etc. |
| Web Pages | .html, .htm, or any URL |
## Output Formats
### Text (default)
```
============================================================
FETCHED CONTENT
============================================================
Title: Example Article
URL: https://example.com/article
------------------------------------------------------------
CONTENT
------------------------------------------------------------
[TEXT] This is the main article content...
[IMAGE] https://example.com/image.jpg
[LINK] Related Article -> https://example.com/related
```
### Markdown
```markdown
# Example Article
**URL**: https://example.com/article
---
## Content
This is the main article content...

- [Related Article](https://example.com/related)
```
### JSON
Raw API response with full content structure.
## Content Types
The fetcher extracts three types of content:
| Type | Description |
| ----- | ------------------------------------ |
| text | Extracted text content from the page |
| image | Image URLs with display information |
| link | Hyperlinks found in the content |
## Notes
- Use `--text-only` for cleaner output when you only need text
- PDF and Office documents are automatically parsed
- Images are re-signed for secure access
- Multiple URLs can be fetched in a single command
FILE:scripts/fetch.ts
#!/usr/bin/env npx ts-node
import { FetchClient, Config, APIError } from "coze-coding-dev-sdk";
interface FetchOptions {
urls: string[];
format: "json" | "text" | "markdown";
textOnly: boolean;
}
interface ContentItem {
type: "text" | "image" | "link";
text?: string;
image?: {
display_url?: string;
url?: string;
width?: number;
height?: number;
};
url?: string;
title?: string;
}
interface FetchResponse {
title?: string;
url?: string;
content?: ContentItem[];
}
function formatAsMarkdown(response: FetchResponse, textOnly: boolean): string {
let md = "";
if (response.title) {
md += `# response.title\n\n`;
}
if (response.url) {
md += `**URL**: response.url\n\n`;
}
md += "---\n\n";
md += "## Content\n\n";
if (response.content && response.content.length > 0) {
const links: ContentItem[] = [];
for (const item of response.content) {
if (item.type === "text" && item.text) {
md += `item.text\n\n`;
} else if (item.type === "image" && !textOnly) {
const imageUrl = item.image?.display_url || item.image?.url;
if (imageUrl) {
md += `\n\n`;
}
} else if (item.type === "link" && !textOnly) {
links.push(item);
}
}
if (links.length > 0) {
md += "## Links\n\n";
for (const link of links) {
const linkTitle = link.title || link.url || "Link";
md += `- [linkTitle](link.url)\n`;
}
md += "\n";
}
} else {
md += "*No content extracted*\n\n";
}
return md;
}
function formatAsText(response: FetchResponse, textOnly: boolean): string {
let text = "";
text += "=".repeat(60) + "\n";
text += "FETCHED CONTENT\n";
text += "=".repeat(60) + "\n";
if (response.title) {
text += `Title: response.title\n`;
}
if (response.url) {
text += `URL: response.url\n`;
}
text += "\n";
text += "-".repeat(60) + "\n";
text += "CONTENT\n";
text += "-".repeat(60) + "\n";
if (response.content && response.content.length > 0) {
for (const item of response.content) {
if (item.type === "text" && item.text) {
text += `[TEXT] item.text\n\n`;
} else if (item.type === "image" && !textOnly) {
const imageUrl = item.image?.display_url || item.image?.url;
if (imageUrl) {
text += `[IMAGE] imageUrl\n\n`;
}
} else if (item.type === "link" && !textOnly) {
const linkTitle = item.title || "Link";
text += `[LINK] linkTitle -> item.url\n\n`;
}
}
} else {
text += "No content extracted\n";
}
return text;
}
async function fetchUrl(
client: FetchClient,
url: string,
options: FetchOptions
): Promise<string> {
console.log(`Fetching: url...`);
const response = (await client.fetch(url)) as FetchResponse;
if (options.format === "json") {
return JSON.stringify(response, null, 2);
} else if (options.format === "markdown") {
return formatAsMarkdown(response, options.textOnly);
} else {
return formatAsText(response, options.textOnly);
}
}
async function main(): Promise<number> {
const args = process.argv.slice(2);
const options: FetchOptions = {
urls: [],
format: "text",
textOnly: false,
};
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if ((arg === "--url" || arg === "-u") && args[i + 1]) {
options.urls.push(args[++i]);
} else if (arg === "--format" && args[i + 1]) {
options.format = args[++i] as "json" | "text" | "markdown";
} else if (arg === "--text-only") {
options.textOnly = true;
} else if (arg === "--help") {
console.log(`
Usage: npx ts-node fetch.ts [OPTIONS]
Options:
-u, --url <url> URL to fetch (required, can be repeated for multiple URLs)
--format <fmt> Output format: json, text, markdown (default: text)
--text-only Extract text content only (ignore images and links)
--help Show this help message
Supported Document Formats:
- Web pages (HTML)
- PDF documents
- Office documents (doc, docx, ppt, pptx, xls, xlsx, csv)
- Text files (txt, text)
- E-books (epub, mobi)
- XML documents
- Images
Examples:
# Basic fetch
npx ts-node fetch.ts -u "https://example.com/article"
# Multiple URLs
npx ts-node fetch.ts -u "https://example.com/page1" -u "https://example.com/page2"
# Output as markdown
npx ts-node fetch.ts -u "https://docs.python.org/3/tutorial/" --format markdown
# Text only (no images/links)
npx ts-node fetch.ts -u "https://example.com/article" --text-only
`);
return 0;
}
}
if (options.urls.length === 0) {
console.error("Error: at least one --url is required");
return 1;
}
const config = new Config();
const client = new FetchClient(config);
try {
for (const url of options.urls) {
const output = await fetchUrl(client, url, options);
console.log("\n" + output);
if (options.urls.length > 1) {
console.log("\n" + "=".repeat(60) + "\n");
}
}
console.log(`\nSuccessfully fetched options.urls.length URL(s).`);
return 0;
} catch (error) {
if (error instanceof APIError) {
console.error(`API Error: error.message`);
console.error(`Status Code: error.statusCode`);
} else {
console.error(
`Error: String(error)`
);
}
return 1;
}
}
main().then((code) => process.exit(code));
Text-to-Speech (TTS) and Speech-to-Text (ASR) using coze-coding-dev-sdk. Returns results directly to stdout.
---
name: coze-voice-gen
description: Text-to-Speech (TTS) and Speech-to-Text (ASR) using coze-coding-dev-sdk. Returns results directly to stdout.
homepage: https://www.coze.com
metadata: { "openclaw": { "emoji": "🎙️", "requires": { "bins": ["npx"] } } }
---
# Coze Voice Generation
Text-to-Speech (TTS) and Automatic Speech Recognition (ASR) using coze-coding-dev-sdk.
## Text-to-Speech (TTS)
### Single Audio
```bash
npx ts-node {baseDir}/scripts/tts.ts --text "Hello, welcome to our service!"
```
### With Different Voice
```bash
npx ts-node {baseDir}/scripts/tts.ts \
--text "This is a male voice" \
--speaker zh_male_m191_uranus_bigtts
```
### Batch Generation
```bash
npx ts-node {baseDir}/scripts/tts.ts \
--texts "Chapter 1: Introduction" "Chapter 2: Getting Started" "Chapter 3: Advanced Topics" \
--speaker zh_female_xueayi_saturn_bigtts
```
### With Custom Parameters
```bash
npx ts-node {baseDir}/scripts/tts.ts \
--text "Fast and loud announcement!" \
--speech-rate 30 \
--loudness-rate 20 \
--format mp3 \
--sample-rate 48000
```
## TTS Options
| Option | Description |
| -------------------- | -------------------------------------------------- |
| `--text <text>` | Single text to synthesize |
| `--texts <texts...>` | Multiple texts for batch generation |
| `--speaker <id>` | Voice ID (default: zh_female_xiaohe_uranus_bigtts) |
| `--format <fmt>` | mp3, pcm, ogg_opus (default: mp3) |
| `--sample-rate <hz>` | 8000-48000 (default: 24000) |
| `--speech-rate <n>` | -50 to 100 (default: 0) |
| `--loudness-rate <n>` | -50 to 100 (default: 0) |
## TTS Output
The script outputs audio URLs directly to stdout:
```
[1/1] Hello, welcome to our service!
https://example.com/generated-audio.mp3
```
## Available Voices
**General Purpose:**
- `zh_female_xiaohe_uranus_bigtts` - Xiaohe (default)
- `zh_female_vv_uranus_bigtts` - Vivi (Chinese & English)
- `zh_male_m191_uranus_bigtts` - Yunzhou (male)
- `zh_male_taocheng_uranus_bigtts` - Xiaotian (male)
**Audiobook:**
- `zh_female_xueayi_saturn_bigtts` - Children's audiobook
**Video Dubbing:**
- `zh_male_dayi_saturn_bigtts` - Dayi (male)
- `zh_female_mizai_saturn_bigtts` - Mizai (female)
- `zh_female_jitangnv_saturn_bigtts` - Motivational female
**Role Playing:**
- `saturn_zh_female_keainvsheng_tob` - Cute girl
- `saturn_zh_male_shuanglangshaonian_tob` - Cheerful boy
## Speech-to-Text (ASR)
### From URL
```bash
npx ts-node {baseDir}/scripts/asr.ts --url "https://example.com/audio.mp3"
```
### From Local File
```bash
npx ts-node {baseDir}/scripts/asr.ts --file ./recording.mp3
```
## ASR Options
| Option | Description |
| --------------- | --------------------- |
| `--url <url>` | Audio file URL |
| `--file <path>` | Local audio file path |
## ASR Output
Transcription is printed directly to stdout:
```
============================================================
TRANSCRIPTION
============================================================
Hello, this is the transcribed text from the audio file...
============================================================
Duration: 1m 30s
Segments: 5
```
## ASR Requirements
- Duration: ≤ 2 hours
- File size: ≤ 100MB
- Formats: WAV, MP3, OGG OPUS, M4A
## Notes
- Audio URLs have valid expiration - use directly when possible
- Speech rate: negative = slower, positive = faster
- Loudness rate: negative = quieter, positive = louder
FILE:scripts/asr.ts
#!/usr/bin/env npx ts-node
import { ASRClient, Config, APIError } from "coze-coding-dev-sdk";
import * as fs from "fs";
interface ASROptions {
url?: string;
file?: string;
}
function formatDuration(ms: number): string {
const seconds = Math.floor(ms / 1000);
const minutes = Math.floor(seconds / 60);
const hours = Math.floor(minutes / 60);
if (hours > 0) {
return `hoursh minutes % 60m seconds % 60s`;
} else if (minutes > 0) {
return `minutesm seconds % 60s`;
} else {
return `secondss`;
}
}
async function main(): Promise<number> {
const args = process.argv.slice(2);
const options: ASROptions = {};
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if ((arg === "--url" || arg === "-u") && args[i + 1]) {
options.url = args[++i];
} else if ((arg === "--file" || arg === "-f") && args[i + 1]) {
options.file = args[++i];
} else if (arg === "--help") {
console.log(`
Usage: npx ts-node asr.ts [OPTIONS]
Options:
-u, --url <url> Audio file URL
-f, --file <path> Local audio file path
--help Show this help message
Audio Requirements:
- Duration: ≤ 2 hours
- File size: ≤ 100MB
- Formats: WAV, MP3, OGG OPUS, M4A
Examples:
# From URL
npx ts-node asr.ts --url "https://example.com/audio.mp3"
# From local file
npx ts-node asr.ts --file ./recording.mp3
`);
return 0;
}
}
if (!options.url && !options.file) {
console.error("Error: --url or --file is required");
return 1;
}
const config = new Config();
const client = new ASRClient(config);
try {
let result;
if (options.file) {
console.log(`Reading local file: options.file`);
if (!fs.existsSync(options.file)) {
console.error(`Error: File not found: options.file`);
return 1;
}
const audioData = fs.readFileSync(options.file);
const fileSizeMB = audioData.length / (1024 * 1024);
console.log(`File size: fileSizeMB.toFixed(2) MB`);
if (fileSizeMB > 100) {
console.error("Error: File size exceeds 100MB limit");
return 1;
}
const base64Data = audioData.toString("base64");
console.log("Recognizing speech...");
result = await client.recognize({
uid: `asr-Date.now()`,
base64Data,
});
} else if (options.url) {
console.log(`Recognizing from URL: options.url`);
result = await client.recognize({
uid: `asr-Date.now()`,
url: options.url,
});
}
if (!result) {
console.error("Error: Recognition failed");
return 1;
}
console.log("\n" + "=".repeat(60));
console.log("TRANSCRIPTION");
console.log("=".repeat(60));
console.log(result.text);
console.log("=".repeat(60));
if (result.duration) {
console.log(`\nDuration: formatDuration(result.duration)`);
}
if (result.utterances && result.utterances.length > 0) {
console.log(`\nSegments: result.utterances.length`);
}
return 0;
} catch (error) {
if (error instanceof APIError) {
console.error(`API Error: error.message`);
console.error(`Status Code: error.statusCode`);
} else {
console.error(`Error: String(error)`);
}
return 1;
}
}
main().then((code) => process.exit(code));
FILE:scripts/tts.ts
#!/usr/bin/env npx ts-node
import { TTSClient, Config, APIError } from "coze-coding-dev-sdk";
type AudioFormat = "mp3" | "pcm" | "ogg_opus";
type SampleRate = 8000 | 16000 | 22050 | 24000 | 32000 | 44100 | 48000;
interface TTSOptions {
texts: string[];
speaker: string;
audioFormat: AudioFormat;
sampleRate: SampleRate;
speechRate: number;
loudnessRate: number;
}
async function main(): Promise<number> {
const args = process.argv.slice(2);
const options: TTSOptions = {
texts: [],
speaker: "zh_female_xiaohe_uranus_bigtts",
audioFormat: "mp3",
sampleRate: 24000,
speechRate: 0,
loudnessRate: 0,
};
let singleText: string | undefined;
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (arg === "--text" && args[i + 1]) {
singleText = args[++i];
} else if (arg === "--texts") {
while (args[i + 1] && !args[i + 1].startsWith("--")) {
options.texts.push(args[++i]);
}
} else if (arg === "--speaker" && args[i + 1]) {
options.speaker = args[++i];
} else if (arg === "--format" && args[i + 1]) {
options.audioFormat = args[++i] as AudioFormat;
} else if (arg === "--sample-rate" && args[i + 1]) {
options.sampleRate = parseInt(args[++i], 10) as SampleRate;
} else if (arg === "--speech-rate" && args[i + 1]) {
options.speechRate = parseInt(args[++i], 10);
} else if (arg === "--loudness-rate" && args[i + 1]) {
options.loudnessRate = parseInt(args[++i], 10);
} else if (arg === "--help") {
console.log(`
Usage: npx ts-node tts.ts [OPTIONS]
Options:
--text <text> Single text to synthesize
--texts <texts...> Multiple texts for batch generation
--speaker <id> Voice ID (default: zh_female_xiaohe_uranus_bigtts)
--format <fmt> Audio format: mp3, pcm, ogg_opus (default: mp3)
--sample-rate <hz> Sample rate: 8000-48000 (default: 24000)
--speech-rate <n> Speech rate: -50 to 100 (default: 0)
--loudness-rate <n> Volume: -50 to 100 (default: 0)
--help Show this help message
Available Voices:
General:
zh_female_xiaohe_uranus_bigtts - Xiaohe (default)
zh_female_vv_uranus_bigtts - Vivi (Chinese & English)
zh_male_m191_uranus_bigtts - Yunzhou (male)
zh_male_taocheng_uranus_bigtts - Xiaotian (male)
Audiobook:
zh_female_xueayi_saturn_bigtts - Children's audiobook
Video Dubbing:
zh_male_dayi_saturn_bigtts - Dayi (male)
zh_female_mizai_saturn_bigtts - Mizai (female)
Examples:
# Single audio
npx ts-node tts.ts --text "Hello world"
# Batch generation
npx ts-node tts.ts --texts "Chapter 1" "Chapter 2"
# Custom voice and parameters
npx ts-node tts.ts --text "Fast speech" --speaker zh_male_dayi_saturn_bigtts --speech-rate 30
`);
return 0;
}
}
if (singleText) {
options.texts = [singleText];
}
if (options.texts.length === 0) {
console.error("Error: --text or --texts is required");
return 1;
}
const config = new Config();
const client = new TTSClient(config);
for (let idx = 0; idx < options.texts.length; idx++) {
const text = options.texts[idx];
console.log(`[idx + 1/options.texts.length] text.slice(0, 50)""`);
try {
const response = await client.synthesize({
uid: `tts-Date.now()`,
text,
speaker: options.speaker,
audioFormat: options.audioFormat,
sampleRate: options.sampleRate,
speechRate: options.speechRate,
loudnessRate: options.loudnessRate,
});
console.log(` response.audioUri`);
} catch (error) {
if (error instanceof APIError) {
console.error(` API Error: error.message`);
console.error(` Status Code: error.statusCode`);
} else {
console.error(` Error: String(error)`);
}
}
}
return 0;
}
main().then((code) => process.exit(code));
Create images from text prompts. Use when you need to generate/draw/create images based on descriptions.
---
name: coze-image-gen
description: Create images from text prompts. Use when you need to generate/draw/create images based on descriptions.
homepage: https://www.coze.com
metadata: { "openclaw": { "emoji": "🎨", "requires": { "bins": ["npx"] } } }
---
# Coze Image Generation
Generate high-quality images from text prompts using coze-coding-dev-sdk. Returns image URLs directly.
## Quick Start
### Single Image
```bash
npx ts-node {baseDir}/scripts/gen.ts --prompt "A futuristic city at sunset"
```
### Batch Generation (Random Prompts)
```bash
npx ts-node {baseDir}/scripts/gen.ts --count 4
```
### With Custom Size
```bash
npx ts-node {baseDir}/scripts/gen.ts \
--prompt "A serene mountain landscape" \
--size 4K
```
### Sequential Image Generation (Story Mode)
```bash
npx ts-node {baseDir}/scripts/gen.ts \
--prompt "A hero's journey through magical lands" \
--sequential \
--max-sequential 5
```
## Script Options
| Option | Description |
| ---------------------- | ----------------------------------------- |
| `--prompt <text>` | Image prompt (random if omitted) |
| `--count <n>` | Number of images (default: 1) |
| `--size <size>` | 2K, 4K, or WIDTHxHEIGHT (default: 2K) |
| `--sequential` | Enable sequential generation (story mode) |
| `--max-sequential <n>` | Max images for sequential (default: 5) |
## Output
The script outputs image URLs directly to stdout:
```
[1/1] A futuristic city at sunset
https://example.com/generated-image.png
```
## Text in Images
Wrap text in quotes for accurate rendering:
```bash
npx ts-node {baseDir}/scripts/gen.ts \
--prompt 'A poster with the text "Hello World" on it'
```
## Notes
- Size range for custom dimensions: 2560x1440 to 4096x4096
- Image URLs have valid expiration - use directly when possible
FILE:scripts/gen.ts
#!/usr/bin/env npx ts-node
import { ImageGenerationClient, Config } from "coze-coding-dev-sdk";
interface GenerateOptions {
prompt?: string;
count: number;
size: string;
sequential: boolean;
maxSequential: number;
}
function pickPrompts(count: number): string[] {
const subjects = [
"a lobster astronaut floating in space",
"a cozy Japanese coffee shop",
"a cyberpunk street market at night",
"a minimalist Scandinavian living room",
"a magical forest with glowing mushrooms",
"a steampunk airship above the clouds",
"a serene zen garden with cherry blossoms",
];
const styles = [
"ultra-detailed photorealistic",
"cinematic 35mm film style",
"isometric 3D illustration",
"soft watercolor painting",
"dramatic concept art",
"anime style illustration",
"vintage travel poster",
];
const lighting = [
"golden hour sunlight",
"soft diffused lighting",
"neon glow",
"dramatic rim lighting",
"moody overcast",
"warm candlelight",
];
const prompts: string[] = [];
for (let i = 0; i < count; i++) {
const subject = subjects[Math.floor(Math.random() * subjects.length)];
const style = styles[Math.floor(Math.random() * styles.length)];
const light = lighting[Math.floor(Math.random() * lighting.length)];
prompts.push(`style of subject, light`);
}
return prompts;
}
async function main(): Promise<number> {
const args = process.argv.slice(2);
const options: GenerateOptions = {
prompt: undefined,
count: 1,
size: "2K",
sequential: false,
maxSequential: 5,
};
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (arg === "--prompt" && args[i + 1]) {
options.prompt = args[++i];
} else if (arg === "--count" && args[i + 1]) {
options.count = parseInt(args[++i], 10);
} else if (arg === "--size" && args[i + 1]) {
options.size = args[++i];
} else if (arg === "--sequential") {
options.sequential = true;
} else if (arg === "--max-sequential" && args[i + 1]) {
options.maxSequential = parseInt(args[++i], 10);
} else if (arg === "--help") {
console.log(`
Usage: npx ts-node gen.ts [OPTIONS]
Options:
--prompt <text> Single prompt. If omitted, random prompts are generated.
--count <n> Number of images to generate (default: 1)
--size <size> Image size: 2K, 4K, or WIDTHxHEIGHT (default: 2K)
--sequential Enable sequential image generation (story mode)
--max-sequential <n> Max images for sequential generation (default: 5)
--help Show this help message
`);
return 0;
}
}
const config = new Config();
const client = new ImageGenerationClient(config);
const prompts = options.prompt
? Array(options.count).fill(options.prompt)
: pickPrompts(options.count);
const urls: string[] = [];
for (let idx = 0; idx < prompts.length; idx++) {
const prompt = prompts[idx];
console.log(`[idx + 1/prompts.length] prompt`);
try {
const response = await client.generate({
prompt,
size: options.size,
sequentialImageGeneration: options.sequential ? "auto" : "disabled",
sequentialImageGenerationMaxImages: options.maxSequential,
});
const helper = client.getResponseHelper(response);
if (!helper.success) {
console.error(` Error: helper.errorMessages.join(", ")`);
continue;
}
for (const url of helper.imageUrls) {
urls.push(url);
console.log(` url`);
}
} catch (error) {
console.error(` Error: String(error)`);
}
}
return 0;
}
main().then((code) => process.exit(code));
OpenClaw workspace backup & restore - simple tar-based guide
---
name: claw-migrate
description: OpenClaw workspace backup & restore - simple tar-based guide
homepage: https://github.com/hanxueyuan/claw-migrate
metadata:
{"openclaw":{"emoji":"🔄","requires":{"bins":["tar"]}}}
---
# claw-migrate - OpenClaw Backup & Restore Guide
> **Simple & Safe**: No code, no automation, just clear instructions
---
## 🎯 What Is This?
claw-migrate is a **pure guidance skill** - no installation needed, no code to run.
Just follow the instructions below to backup and restore your OpenClaw workspace.
---
## 📁 Path 1: Backup
### Quick Backup (Recommended)
```bash
# Backup core files only (fast)
tar -czf openclaw-backup-$(date +%Y%m%d_%H%M%S).tar.gz \
-C /workspace/projects/workspace \
AGENTS.md SOUL.md IDENTITY.md USER.md TOOLS.md HEARTBEAT.md \
memory/ .learnings/ docs/ scripts/ templates/
```
### Full Backup (Include Skills)
```bash
# Backup everything including skills
tar -czf openclaw-full-backup-$(date +%Y%m%d_%H%M%S).tar.gz \
-C /workspace/projects/workspace \
AGENTS.md SOUL.md IDENTITY.md USER.md TOOLS.md HEARTBEAT.md \
memory/ .learnings/ docs/ scripts/ templates/ skills/ agents/
```
### What to Backup ✅
| Category | Files | Backup? |
|----------|-------|---------|
| Core Config | AGENTS.md, SOUL.md, IDENTITY.md, USER.md | ✅ Yes |
| Tools | TOOLS.md, HEARTBEAT.md | ✅ Yes |
| Memory | memory/*.md | ✅ Yes |
| Learnings | .learnings/*.md | ✅ Yes |
| Docs | docs/ | ✅ Yes |
| Scripts | scripts/ | ✅ Yes |
| Templates | templates/ | ✅ Yes |
| Skills | skills/ | ⚠️ Optional (large) |
| Agents | agents/ | ⚠️ Optional |
### What NOT to Backup ❌
| Files | Reason |
|-------|--------|
| `.env` | Contains API keys |
| `openclaw.json` | Contains secrets |
| `credentials/` | Pairing tokens |
| `identity/` | Device auth |
| `devices/` | Paired devices |
| `feishu/` | Channel config |
| `browser/` | Browser data (large) |
---
## 🔄 Path 2: Restore
### Restore from Backup
```bash
# Extract backup to workspace
tar -xzf openclaw-backup-YYYYMMDD_HHMMSS.tar.gz \
-C /workspace/projects/workspace/
```
### Restore Steps
1. **Stop OpenClaw** (if running)
```bash
openclaw gateway stop
```
2. **Extract Backup**
```bash
tar -xzf your-backup.tar.gz -C /workspace/projects/workspace/
```
3. **Verify Files**
```bash
ls -la /workspace/projects/workspace/
```
4. **Re-pair Channels** (required)
```bash
openclaw pairing
```
5. **Restart OpenClaw**
```bash
openclaw gateway restart
```
### Restore Notes ⚠️
| Item | Action |
|------|--------|
| API Keys | Re-add to `.env` |
| Channel Pairing | Re-pair all channels |
| Device Auth | Re-authenticate devices |
| Memory Files | Merged automatically |
| Skills | Preserved (no re-install needed) |
---
## 📤 Path 3: Share to ClawTalent
### Prepare for Sharing
1. **Sanitize Sensitive Info**
```bash
# Remove .env, credentials, etc.
rm -rf .env credentials/ identity/ devices/
```
2. **Create Manifest**
```json
{
"name": "my-openclaw-config",
"version": "1.0.0",
"description": "My OpenClaw workspace config",
"openclaw_version": "2026.3.13",
"skills": ["coze-web-search", "agent-browser"],
"agents": ["main", "life", "work"]
}
```
3. **Upload to GitHub**
```bash
git add .
git commit -m "Share OpenClaw config"
git push origin main
```
### Share via ClawTalent Platform
Visit: https://clawtalent.shop
1. Create account
2. Upload sanitized config
3. Get CT-XXXX ID
4. Share ID with others
---
## 🔍 Path 4: Discover Configs
### Browse ClawTalent
Visit: https://clawtalent.shop
Search for:
- Multi-agent setups
- Specific skills
- Industry templates
### Deploy from ClawTalent
```bash
# Get config from CT-XXXX ID
git clone https://github.com/hanxueyuan/clawtalent-CT-XXXX.git
cd clawtalent-CT-XXXX
tar -xzf config.tar.gz -C /workspace/projects/workspace/
```
### Verify Before Deploy
1. Check OpenClaw version compatibility
2. Review skills list
3. Check agent configurations
4. Verify no sensitive data included
---
## 🔐 Security Best Practices
### Always ✅
- Store backups in **private** GitHub repos
- Use environment variables for API keys
- Re-pair channels after restore
- Sanitize before sharing
### Never ❌
- Share `.env` files
- Commit API keys to Git
- Share pairing tokens
- Backup browser data (privacy)
---
## 📋 Quick Reference
### Backup Commands
```bash
# Quick backup (core files only)
tar -czf backup.tar.gz -C /workspace/projects/workspace \
AGENTS.md SOUL.md memory/ .learnings/
# Full backup (include skills)
tar -czf full-backup.tar.gz -C /workspace/projects/workspace \
AGENTS.md SOUL.md memory/ .learnings/ skills/ agents/
```
### Restore Commands
```bash
# Extract backup
tar -xzf backup.tar.gz -C /workspace/projects/workspace/
# Verify
ls -la /workspace/projects/workspace/
```
### Storage Options
| Option | Command |
|--------|---------|
| Local | `cp backup.tar.gz ~/backups/` |
| GitHub | `git push origin main` |
| Cloud | Upload to Google Drive / Dropbox |
---
## 🆘 Troubleshooting
### "Permission denied"
```bash
# Fix permissions
chmod -R 755 /workspace/projects/workspace/
chmod 600 /workspace/projects/workspace/.env
```
### "Missing files after restore"
Check `.gitignore` - some files are excluded from backup by design.
### "Channel not working after restore"
Re-pair channels:
```bash
openclaw pairing
```
### "Skills not found"
Skills are in `skills/` directory. Verify:
```bash
ls /workspace/projects/workspace/skills/
```
---
## 📚 Resources
- **GitHub**: https://github.com/hanxueyuan/claw-migrate
- **ClawTalent**: https://clawtalent.shop
- **OpenClaw Docs**: https://docs.openclaw.ai
---
## 📄 License
MIT License - Free to use and share (but sanitize first!)
FILE:CHANGELOG.md
# ClawMigrate Changelog
## [3.0.0] - 2026-03-20
### 🎉 Complete Redesign - Pure Guidance Skill
**Philosophy**: Simple > Complex, Guide > Automation
#### What Changed
- ❌ **Removed**: All code (4613 lines across 13 modules)
- ❌ **Removed**: `src/` directory (backup.js, restore.js, setup.js, etc.)
- ❌ **Removed**: `tests/` directory
- ❌ **Removed**: `package.json`, `package-lock.json`, `node_modules/`
- ✅ **Kept**: SKILL.md, README.md, CHANGELOG.md, .clawhub.json
- ✅ **Added**: Clear, simple instructions
#### Why v3.0.0?
- Major breaking change: from tool to guide
- No backward compatibility needed (just follow new instructions)
- Fresh start with lessons learned
#### New Structure
```
claw-migrate/
├── SKILL.md # Full instructions (6KB)
├── README.md # Quick start (2KB)
├── CHANGELOG.md # Version history
├── .clawhub.json # ClawHub metadata
└── .github/ # GitHub workflows (optional)
```
**Total size**: ~15KB (was: 4613 lines of code + dependencies)
#### Benefits
- ✅ Zero maintenance cost
- ✅ Zero security risks (no GITHUB_TOKEN needed)
- ✅ Zero dependencies
- ✅ User in full control
- ✅ Works with any OpenClaw version
#### Migration from v2.x
No migration needed! Just:
1. Delete old claw-migrate skill
2. Install v3.0.0
3. Follow instructions in SKILL.md
---
## [2.8.2] - 2026-03-20
### Clarified Two Modes
- Personal Migration (full backup with sensitive info)
- Community Sharing (auto-sanitized)
---
## [2.8.1] - 2026-03-20
### Selective Restore
- Added `--categories` option
- Fallback to default backup list if no setup
---
## [2.8.0] - 2026-03-20
### Restored Executable Functionality
- Now actually backs up and restores
- Automated backup with file scanning
- Automated restore with validation
---
## [2.7.7] - 2026-03-19
### Attempted Pure Guide Conversion
**Note**: This conversion was incomplete. Code remained but documentation claimed "no code".
This was addressed in v3.0.0 with complete removal of all code.
---
## [2.7.6] - 2026-03-19
### Full English Localization
- All documentation rewritten in English
- All code output in English
- Bug fixes
---
## [2.7.0] - 2026-03-19
### ClawTalent Platform Integration
#### New Commands
- `share` - Share to ClawTalent platform
- `deploy` - Deploy from ClawTalent (CT-XXXX)
- `search` - Search ClawTalent marketplace
#### Features
- Sensitive info detection
- Template desensitization
- Manifest generation
- Smart merge strategies
---
## [2.2.0] - 2026-03-15
### Configuration Management & Scheduled Backups
#### New Modules
- `src/setup.js` - Interactive configuration wizard
- `src/backup.js` - Backup execution
- `src/restore.js` - Restore execution
- `src/merger.js` - Merge engine
- `src/config-manager.js` - Configuration management
- `src/scheduler.js` - Scheduled backup tasks
#### Test Coverage
- 131 test cases, 100% pass rate
- 68.8% code coverage
---
## [2.0.0] - 2026-03-10
### Initial Automated Version
- Automated backup to GitHub
- Automated restore from backup
- Interactive setup wizard
---
## [1.0.0] - 2026-03-01
### First Release
- Basic backup instructions
- Simple restore guide
- Manual process
FILE:README.md
# claw-migrate - OpenClaw Backup & Restore Guide
> 🔄 **Pure Guidance Skill** - No code, no installation, just follow the instructions
[](https://github.com/hanxueyuan/claw-migrate)
[](https://opensource.org/licenses/MIT)
---
## 🎯 What Is This?
**claw-migrate is NOT a tool - it's a guide.**
No installation needed. No code to run. Just follow the instructions in [SKILL.md](SKILL.md).
---
## 🚀 Quick Start
### I Want to Backup
```bash
# Quick backup (core files)
tar -czf backup.tar.gz -C /workspace/projects/workspace \
AGENTS.md SOUL.md IDENTITY.md USER.md TOOLS.md \
memory/ .learnings/ docs/ scripts/
# Full backup (include skills)
tar -czf full-backup.tar.gz -C /workspace/projects/workspace \
AGENTS.md SOUL.md memory/ .learnings/ skills/ agents/
```
### I Want to Restore
```bash
# Extract backup
tar -xzf backup.tar.gz -C /workspace/projects/workspace/
# Re-pair channels
openclaw pairing
```
### I Want to Share
1. Sanitize sensitive files (`.env`, `credentials/`, etc.)
2. Upload to GitHub or ClawTalent
3. Share the repo link or CT-XXXX ID
### I Want to Discover
Visit: https://clawtalent.shop
Search for configs shared by the community.
---
## 📋 Full Instructions
See **[SKILL.md](SKILL.md)** for:
- ✅ Detailed backup checklist
- ✅ Restore step-by-step guide
- ✅ Security best practices
- ✅ Troubleshooting tips
- ✅ Quick reference commands
---
## 🔐 Security Tips
### Always ✅
- Store backups in **private** repos
- Use environment variables for API keys
- Re-pair channels after restore
- Sanitize before sharing
### Never ❌
- Share `.env` files
- Commit API keys to Git
- Share pairing tokens
- Backup browser data
---
## 📊 What's Included
| File | Size | Type |
|------|------|------|
| SKILL.md | ~6KB | Full instructions |
| README.md | ~2KB | Quick start |
| CHANGELOG.md | ~6KB | Version history |
| .clawhub.json | ~1KB | ClawHub metadata |
**Total: ~15KB** (no code, no dependencies!)
---
## 🌐 Links
- **[Full Instructions](SKILL.md)** - Complete backup/restore guide
- **[ClawTalent](https://clawtalent.shop)** - Share & discover configs
- **[GitHub](https://github.com/hanxueyuan/claw-migrate)** - Source & examples
- **[OpenClaw Docs](https://docs.openclaw.ai)** - Official documentation
---
## 📄 License
MIT License - Free to use and share (but remember to sanitize first!)