Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor/skills/tuyaopen-doc-loop/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ docs/{topic}-{YYYY-MM}
Examples:
- `docs/tal-wifi-api-2026-04`
- `docs/peripheral-examples-2026-04`
- `docs/duckyclaw-guides-2026-04`
- `docs/tclaw-guides-2026-04`
- `docs/cloud-agent-update-2026-05`
- `docs/i18n-parity-2026-05`

Expand Down
2 changes: 1 addition & 1 deletion .cursor/skills/tuyaopen-doc-planner/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ A doc is **shared** if the same steps work across platforms (e.g., `tos.py build
The sidebar is defined in `sidebars.js` (root of repo). It has 12 major sections separated by HTML dividers:

1. Top-level pages (about, releases, walkthrough)
2. DuckyClaw
2. TClaw
3. Getting Started (quick-start/*)
4. Hardware Guides (hardware-specific/*)
5. Apps & Examples (applications/*, examples/*, peripheral/*, new-hardware/*)
Expand Down
4 changes: 2 additions & 2 deletions .cursor/skills/tuyaopen-doc-planner/directory-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ docs/
│ ├── faq_template.md
│ ├── operation_guide-template.md
│ └── README-template.md
├── duckyclaw/
├── tclaw/
│ ├── ducky-quick-start-T5AI.md
│ ├── ducky-quick-start-raspberry-pi-5.md
│ ├── ducky-quick-start-ESP32S3.md
Expand Down Expand Up @@ -181,7 +181,7 @@ docs/
## Sidebar sections (quick reference)

1. Top-level: about-tuyaopen, maintenance-and-releases, project-walkthrough
2. DuckyClaw: duckyclaw/*
2. TClaw: tclaw/*
3. Getting Started: quick-start/*
4. Hardware Guides: hardware-specific/*
5. Applications: applications/*
Expand Down
10 changes: 5 additions & 5 deletions .cursor/skills/tuyaopen-docs-author/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: tuyaopen-docs-author
description: Senior technical-writer craft for the TuyaOpen.ai (TuyaOpen.io) Docusaurus site, across all four product pillars — SDK, Hardware, Cloud, and Agent (TuyaOpenClaw). Use when writing, revising, reviewing, or structuring any doc, tutorial, API reference, hardware guide, cloud/agent guide, or per-product overview on the site. Produces bilingual (en + zh), audience-tiered, single-concept, linear docs grounded in real source — never assumption. Delegates placement to tuyaopen-doc-planner, build/render checks to tuyaopen-build-check, and source grounding to tuyaopen-code-analyzer; this skill governs HOW the doc reads and WHICH product model it follows.
description: Senior technical-writer craft for the TuyaOpen.ai (TuyaOpen.io) Docusaurus site, across all four product pillars — SDK, Hardware, Cloud, and Agent (TClaw). Use when writing, revising, reviewing, or structuring any doc, tutorial, API reference, hardware guide, cloud/agent guide, or per-product overview on the site. Produces bilingual (en + zh), audience-tiered, single-concept, linear docs grounded in real source — never assumption. Delegates placement to tuyaopen-doc-planner, build/render checks to tuyaopen-build-check, and source grounding to tuyaopen-code-analyzer; this skill governs HOW the doc reads and WHICH product model it follows.
---

# TuyaOpen Docs Author
Expand Down Expand Up @@ -43,14 +43,14 @@ If code and an existing doc disagree, the code wins — flag the stale doc, do n

## The four product pillars (pick the right model)

The site is one Docusaurus instance with **four sidebars** (`sidebars.js`): `sdkSidebar`, `hardwareSidebar`, `cloudSidebar`, `duckyclawSidebar`. Each pillar documents best by borrowing from a proven model. Identify the pillar first — it sets the doc's shape, depth, and visual budget.
The site is one Docusaurus instance with **four sidebars** (`sidebars.js`): `sdkSidebar`, `hardwareSidebar`, `cloudSidebar`, `tclawSidebar`. Each pillar documents best by borrowing from a proven model. Identify the pillar first — it sets the doc's shape, depth, and visual budget.

| Pillar | Sidebar · root | Reader's job | Model to follow | Shape |
| --- | --- | --- | --- | --- |
| **SDK** | `sdkSidebar` · `docs/` (TKL/TAL, build, examples, peripherals) | Build firmware, call an API | **ESP-IDF + STM32 HAL**: Get Started → Guides → exhaustive API Reference | Signature + params table + return + minimal runnable example, grounded in the header. Link the repo example. |
| **Hardware** | `hardwareSidebar` · `docs/hardware/` (boards, pinouts, DevKits, porting) | Wire it up, flash it, know the specs | **Adafruit + Waveshare**: visual-first resource hub | Board photo, pinout diagram, specs table, "what you need", per-board steps. Overview page gathers schematic/datasheet/downloads. |
| **Cloud** | `cloudSidebar` · `docs/cloud/` (Tuya Cloud IoT, OpenAPI, device-AI demos) | Connect a device, call cloud/OpenAPI | **Claude + Google**: concept + how-to, honest reference | Definition-first, "why", numbered flow, OpenAPI reference, explicit license/授权码 rule (below). |
| **Agent** | `duckyclawSidebar` · `docs/duckyclaw/` (TuyaOpenClaw — skills, MCP, voice modes) | Make the on-device agent do X | **Claude (capability docs)**: definition-first, capability-honest, cookbook | What it is in one line, what it can/can't do, a worked end-to-end run, MCP/skill contract. |
| **Agent** | `tclawSidebar` · `docs/tclaw/` (TClaw — skills, MCP, voice modes) | Make the on-device agent do X | **Claude (capability docs)**: definition-first, capability-honest, cookbook | What it is in one line, what it can/can't do, a worked end-to-end run, MCP/skill contract. |

A doc belongs to exactly one pillar. If a topic spans pillars (e.g. "flash the AI chat demo on T5"), it is a **how-to in one pillar that links once** to the others — not a doc that lives in two trees.

Expand Down Expand Up @@ -132,7 +132,7 @@ Every doc ships in English (`docs/…`) and 简体中文 (`i18n/zh/docusaurus-pl

**The docs tree must be fully Chinese too.** Sidebar text is NOT localized by the doc files — leaf `type: 'doc'` items show the doc's zh `title:` frontmatter (so always translate it), but every **`label:`** in `sidebars.js` (category, link, custom-doc) falls back to English on the zh site unless it has a matching key in `i18n/zh/docusaurus-plugin-content-docs/current.json`. The build does **not** warn about this.

The translation key is namespaced by **the sidebar's id** (its key in the `sidebars.js` export), not the literal `docs`. This repo exports **four** sidebars — `sdkSidebar`, `hardwareSidebar`, `cloudSidebar`, `duckyclawSidebar` — so keys are `sidebar.<sidebarId>.category.X` (e.g. `sidebar.cloudSidebar.category.Voice Chat Modes`), where `X` is the label verbatim (including `&`/`+`/punctuation). **Renaming a sidebar id orphans every one of its keys** and silently reverts those labels to English — which is exactly how a whole tree can go un-localized while dividers (CSS) and leaf docs (frontmatter) still look fine.
The translation key is namespaced by **the sidebar's id** (its key in the `sidebars.js` export), not the literal `docs`. This repo exports **four** sidebars — `sdkSidebar`, `hardwareSidebar`, `cloudSidebar`, `tclawSidebar` — so keys are `sidebar.<sidebarId>.category.X` (e.g. `sidebar.cloudSidebar.category.Voice Chat Modes`), where `X` is the label verbatim (including `&`/`+`/punctuation). **Renaming a sidebar id orphans every one of its keys** and silently reverts those labels to English — which is exactly how a whole tree can go un-localized while dividers (CSS) and leaf docs (frontmatter) still look fine.

Never hand-guess the namespace. Generate the authoritative keys, then translate the English defaults:

Expand All @@ -143,7 +143,7 @@ npx docusaurus write-translations --locale zh # adds correct sidebar.<id>.* ke
Then audit — flag any real-namespace sidebar key whose message has no Chinese (proper-noun product names like board IDs may legitimately stay Latin):

```bash
node -e 'const j=require("./i18n/zh/docusaurus-plugin-content-docs/current.json"),R=new Set(["sdkSidebar","hardwareSidebar","cloudSidebar","duckyclawSidebar"]),cjk=s=>/[一-鿿]/.test(s||"");const m=Object.entries(j).filter(([k,v])=>{const x=k.match(/^sidebar\.([^.]+)\.(category|link|doc)\./);return x&&R.has(x[1])&&!cjk(v.message)});console.log(m.length?"UNTRANSLATED: "+m.map(([k])=>k).join(", "):"OK — docs tree fully localized")'
node -e 'const j=require("./i18n/zh/docusaurus-plugin-content-docs/current.json"),R=new Set(["sdkSidebar","hardwareSidebar","cloudSidebar","tclawSidebar"]),cjk=s=>/[一-鿿]/.test(s||"");const m=Object.entries(j).filter(([k,v])=>{const x=k.match(/^sidebar\.([^.]+)\.(category|link|doc)\./);return x&&R.has(x[1])&&!cjk(v.message)});console.log(m.length?"UNTRANSLATED: "+m.map(([k])=>k).join(", "):"OK — docs tree fully localized")'
```

After a sidebar rename or split, delete the orphaned old-namespace keys (e.g. dead `sidebar.docs.*`) so the file does not accumulate cruft. `tuyaopen-doc-planner` documents the key-shape rules.
Expand Down
8 changes: 4 additions & 4 deletions .cursor/skills/tuyaopen-seo-geo/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Columns: `关键词层级, 关键词, 搜索意图, 承接页面, 数据来源`.
| Tier | Meaning | Lands on | Intent mix |
| --- | --- | --- | --- |
| **L1** 核心开源平台词 | Core platform brand terms (`open source iot platform`, `tuyaopen`, `开源物联网平台`) | Homepage `/` and `/zh/` | navigational + informational + commercial |
| **L2** 品类技术词 | Category/tech terms (`embedded development ide`, `edge ai platform open source`, `ai agent development platform`) | Product pages (`/tuyaopen-ide`, `/duckyclaw`, `/get-hardware`, `/tools`, `/pricing`) + key docs | mostly commercial |
| **L2** 品类技术词 | Category/tech terms (`embedded development ide`, `edge ai platform open source`, `ai agent development platform`) | Product pages (`/tuyaopen-ide`, `/tclaw`, `/get-hardware`, `/tools`, `/pricing`) + key docs | mostly commercial |
| **L3** 硬件场景词 | Hardware/scenario terms (`esp32 ai tutorial`, `raspberry pi home automation`, `arduino smart home`) | Hardware docs (`docs/hardware/...`) | mostly informational |
| **L4** 长尾教程词 | Long-tail tutorial/comparison terms (`best open source iot frameworks 2026`, `tuyaopen vs esphome`) | Blog, `/learn`, deep docs | informational |

Expand Down Expand Up @@ -163,7 +163,7 @@ A draft exists at `SEO-temp-folder/tuyaopen.ai-llms.txt.md` — but note it is *
- `/docs/applications/tuya_cloud/...` → `/docs/cloud/iot-client/...` (iot-light demo)
- `/docs/hardware-specific` (bare) → `/docs/hardware`
- `/projects` → `/learn?cat=community` (or omit; prefer the canonical `/learn` surface)
- Keep it factual, link-dense, and ≤~50 lines: what TuyaOpen is, the four pillars (SDK / Hardware / Cloud & AI / TuyaOpenClaw), primary entry URLs, key docs. Write it the way you'd describe the project to a smart engineer in 30 seconds.
- Keep it factual, link-dense, and ≤~50 lines: what TuyaOpen is, the four pillars (SDK / Hardware / Cloud & AI / TClaw), primary entry URLs, key docs. Write it the way you'd describe the project to a smart engineer in 30 seconds.
- Optionally `static/llms-full.txt` — a longer concatenation of key docs for models that fetch it.
- This is the single highest-leverage GEO artifact; keep its URLs in sync with `createRedirects` whenever docs move.

Expand All @@ -181,7 +181,7 @@ Schema.org JSON-LD is how you tell both Google and LLMs exactly what each entity
| --- | --- | --- |
| Site-wide (Organization + WebSite + SearchAction) | `Organization`, `WebSite` (with `potentialAction` SearchAction → `/search?q={query}`) | `docusaurus.config.js` `headTags` |
| Homepage | `SoftwareApplication` or `WebApplication` (TuyaOpen as open-source platform: `applicationCategory`, `operatingSystem`, `offers` free, `license` Apache-2.0) | `<Head>` in `index.js` |
| Product pages (`/tuyaopen-ide`, `/duckyclaw`, `/get-hardware`, `/pricing`) | `SoftwareApplication` / `Product` + `Offer` | page `<Head>` |
| Product pages (`/tuyaopen-ide`, `/tclaw`, `/get-hardware`, `/pricing`) | `SoftwareApplication` / `Product` + `Offer` | page `<Head>` |
| Hardware board docs (`docs/hardware/.../overview-*.md`) | `Product` (board: `brand`, `category`, `description`) + `BreadcrumbList` | swizzled `theme/DocItem` from frontmatter, or MDX `<head>` export |
| Tutorial / quick-start docs | `HowTo` (steps from the doc's numbered list) + `BreadcrumbList` | per doc |
| FAQ sections | `FAQPage` (one `Question`/`Answer` per block) | per doc/page that has an FAQ |
Expand All @@ -198,7 +198,7 @@ Schema.org JSON-LD is how you tell both Google and LLMs exactly what each entity
- **Comparison tables** (TuyaOpen vs ESPHome, T5 vs Raspberry Pi) — LLMs love structured comparisons and quote them.
- **Numbered step lists** for procedures → maps to `HowTo` schema.
- **Cite sources.** Link the GitHub repo, real specs, official Tuya docs. E-E-A-T for both Google and AI.
- **Consistent entity definitions.** Define "TuyaOpen", "TuyaOpenClaw", "T5 AI Board", "TuyaOpen IDE" the same way everywhere so models form a stable entity. Cross-reference the terminology table in `tuyaopen-technical-writer`.
- **Consistent entity definitions.** Define "TuyaOpen", "TClaw", "T5 AI Board", "TuyaOpen IDE" the same way everywhere so models form a stable entity. Cross-reference the terminology table in `tuyaopen-technical-writer`.

## Bilingual (zh) SEO

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
title: Connect TuyaOpenClaw to OpenClaw
description: "TuyaOpenClaw edge-AI voice firmware connects to the OpenClaw Gateway over the WebSocket ACP protocol for AI voice conversation."
title: Connect TClaw to OpenClaw
description: "TClaw edge-AI voice firmware connects to the OpenClaw Gateway over the WebSocket ACP protocol for AI voice conversation."
keywords:
- duckyclaw
- tuyaopenclaw
- tclaw
- openclaw gateway
- edge ai platform open source
- acp protocol
Expand All @@ -14,14 +14,14 @@ import TabItem from '@theme/TabItem';

## 1. Overview

TuyaOpenClaw (formerly DuckyClaw) is an AI voice assistant firmware that runs on IoT devices. It connects to the OpenClaw Gateway via the **ACP protocol (Agent Client Protocol, WebSocket-based)** to enable real-time conversation with an AI Agent.
TClaw (formerly DuckyClaw) is an AI voice assistant firmware that runs on IoT devices. It connects to the OpenClaw Gateway via the **ACP protocol (Agent Client Protocol, WebSocket-based)** to enable real-time conversation with an AI Agent.

OpenClaw is an open-source AI Agent platform that can be deployed on Linux, macOS, or Windows. Its built-in Gateway service listens on port `18789` by default, and TuyaOpenClaw connects to it over the local network (or the internet).
OpenClaw is an open-source AI Agent platform that can be deployed on Linux, macOS, or Windows. Its built-in Gateway service listens on port `18789` by default, and TClaw connects to it over the local network (or the internet).

**Connection architecture:**

```
TuyaOpenClaw (IoT device)
TClaw (IoT device)
│ WebSocket (ACP protocol)
▼
OpenClaw Gateway (PC / server)
Expand All @@ -39,19 +39,19 @@ AI Agent (LLM conversation)
| Software | Description | Download |
|----------|-------------|----------|
| **OpenClaw** | AI Agent platform — install on your PC or server | [Official website](https://openclaw.ai) |
| **TuyaOpenClaw firmware toolchain** | Required to compile and flash TuyaOpenClaw firmware | See [TuyaOpenClaw Quick Start](ducky-quick-start-T5AI) |
| **TClaw firmware toolchain** | Required to compile and flash TClaw firmware | See [TClaw Quick Start](ducky-quick-start-T5AI) |

### 2.2 Network requirements

- **LAN mode**: TuyaOpenClaw device and the PC running OpenClaw are on the same local network or Wi-Fi
- **LAN mode**: TClaw device and the PC running OpenClaw are on the same local network or Wi-Fi
- **Internet mode**: OpenClaw is deployed on a server with a public IP address

### 2.3 TuyaOpenClaw base setup
### 2.3 TClaw base setup

Complete the TuyaOpenClaw base setup (Wi-Fi, firmware flashing) before following this guide.
Complete the TClaw base setup (Wi-Fi, firmware flashing) before following this guide.

:::note
See: [TuyaOpenClaw Quick Start (T5-AI)](ducky-quick-start-T5AI)
See: [TClaw Quick Start (T5-AI)](ducky-quick-start-T5AI)
:::

---
Expand Down Expand Up @@ -253,7 +253,7 @@ Keep the `"token"` field's existing value. Do not write `your_token_here` litera

| Field | Description |
|-------|-------------|
| `"bind": "lan"` | Makes the Gateway listen on the LAN network interface instead of only `127.0.0.1` — **required** for TuyaOpenClaw to connect |
| `"bind": "lan"` | Makes the Gateway listen on the LAN network interface instead of only `127.0.0.1` — **required** for TClaw to connect |
| `dangerouslyAllowHostHeaderOriginFallback: true` | Allows non-browser clients (e.g. IoT devices) to open WebSocket connections |
| `allowInsecureAuth: true` | Allows authentication without HTTPS (LAN scenario) |
| `dangerouslyDisableDeviceAuth: true` | Disables device-level secondary authentication; token-only auth |
Expand Down Expand Up @@ -346,7 +346,7 @@ Get-NetIPAddress | Where-Object {
</Tabs>

:::tip
Use the IP address on the **same LAN segment** as your TuyaOpenClaw device (typically `192.168.x.x` or `10.x.x.x`). A wired connection is more stable than Wi-Fi.
Use the IP address on the **same LAN segment** as your TClaw device (typically `192.168.x.x` or `10.x.x.x`). A wired connection is more stable than Wi-Fi.
:::

### 5.2 Get the Gateway Token
Expand Down Expand Up @@ -384,7 +384,7 @@ grep '"token"' ~/.openclaw/openclaw.json

### 5.3 Verify Gateway accessibility

Open a browser on a device on the same network as TuyaOpenClaw and visit:
Open a browser on a device on the same network as TClaw and visit:

```
http://<your-LAN-IP>:18789/
Expand All @@ -394,7 +394,7 @@ Any HTTP response (even an error page) means the Gateway is listening on the LAN

---

## 6. Configure TuyaOpenClaw firmware
## 6. Configure TClaw firmware

### 6.1 Create the config file

Expand Down Expand Up @@ -458,13 +458,13 @@ Open `include/tuya_app_config_secrets.h` and fill in the ACP Gateway macros:

### 6.3 Recompile and flash

After saving the config, recompile the firmware and flash it to the TuyaOpenClaw device.
After saving the config, recompile the firmware and flash it to the TClaw device.

---

## 7. Troubleshooting

### 7.1 TuyaOpenClaw cannot connect
### 7.1 TClaw cannot connect

| Error in device log | Likely cause | Fix |
|---------------------|-------------|-----|
Expand Down
Loading
Loading