Start here if you want the shortest path from “what is this?” to “okay, I get it.” @@ -107,7 +105,7 @@ read_when: -
Recent standouts across coding, devtools, mobile, and chat-native product building. @@ -234,7 +232,9 @@ Read, send, and archive messages via Beeper Desktop. Uses Beeper local MCP API s -
Scheduling, browser control, support loops, and the “just do the task for me” side of the product. @@ -316,7 +316,9 @@ Watches company Slack channel, responds helpfully, and forwards notifications to -
Systems that index, search, remember, and reason over personal or team knowledge. @@ -352,7 +354,9 @@ Watches company Slack channel, responds helpfully, and forwards notifications to -
Speech-first entry points, phone bridges, and transcription-heavy workflows. @@ -374,7 +378,9 @@ Multi-lingual audio transcription via OpenRouter (Gemini, etc). Available on Cla -
Packaging, deployment, and integrations that make OpenClaw easier to run and extend. @@ -408,7 +414,9 @@ Multi-lingual audio transcription via OpenRouter (Gemini, etc). Available on Cla -
The physical-world side of OpenClaw: homes, sensors, cameras, vacuums, and other devices. @@ -434,7 +442,7 @@ Multi-lingual audio transcription via OpenRouter (Gemini, etc). Available on Cla -
Things that grew beyond a single workflow into broader products or ecosystems. @@ -452,7 +460,7 @@ Multi-lingual audio transcription via OpenRouter (Gemini, etc). Available on Cla --- -
If you are building something interesting with OpenClaw, send it over. Strong screenshots and concrete outcomes help.
diff --git a/docs/tools/index.md b/docs/tools/index.md
index d43f005ef46..efa37d285d0 100644
--- a/docs/tools/index.md
+++ b/docs/tools/index.md
@@ -53,24 +53,24 @@ OpenClaw has three layers that work together:
These tools ship with OpenClaw and are available without installing any plugins:
-| Tool | What it does | Page |
-| ------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------- |
-| `exec` / `process` | Run shell commands, manage background processes | [Exec](/tools/exec) |
-| `code_execution` | Run sandboxed remote Python analysis | [Code Execution](/tools/code-execution) |
-| `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser](/tools/browser) |
-| `web_search` / `x_search` / `web_fetch` | Search the web, search X posts, fetch page content | [Web](/tools/web) |
-| `read` / `write` / `edit` | File I/O in the workspace | |
-| `apply_patch` | Multi-hunk file patches | [Apply Patch](/tools/apply-patch) |
-| `message` | Send messages across all channels | [Agent Send](/tools/agent-send) |
-| `canvas` | Drive node Canvas (present, eval, snapshot) | |
-| `nodes` | Discover and target paired devices | |
-| `cron` / `gateway` | Manage scheduled jobs; inspect, patch, restart, or update the gateway | |
-| `image` / `image_generate` | Analyze or generate images | [Image Generation](/tools/image-generation) |
-| `music_generate` | Generate music tracks | [Music Generation](/tools/music-generation) |
-| `video_generate` | Generate videos | [Video Generation](/tools/video-generation) |
-| `tts` | One-shot text-to-speech conversion | [TTS](/tools/tts) |
-| `sessions_*` / `subagents` / `agents_list` | Session management, status, and sub-agent orchestration | [Sub-agents](/tools/subagents) |
-| `session_status` | Lightweight `/status`-style readback and session model override | [Session Tools](/concepts/session-tool) |
+| Tool | What it does | Page |
+| ------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| `exec` / `process` | Run shell commands, manage background processes | [Exec](/tools/exec), [Exec Approvals](/tools/exec-approvals) |
+| `code_execution` | Run sandboxed remote Python analysis | [Code Execution](/tools/code-execution) |
+| `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser](/tools/browser) |
+| `web_search` / `x_search` / `web_fetch` | Search the web, search X posts, fetch page content | [Web](/tools/web), [Web Fetch](/tools/web-fetch) |
+| `read` / `write` / `edit` | File I/O in the workspace | |
+| `apply_patch` | Multi-hunk file patches | [Apply Patch](/tools/apply-patch) |
+| `message` | Send messages across all channels | [Agent Send](/tools/agent-send) |
+| `canvas` | Drive node Canvas (present, eval, snapshot) | |
+| `nodes` | Discover and target paired devices | |
+| `cron` / `gateway` | Manage scheduled jobs; inspect, patch, restart, or update the gateway | |
+| `image` / `image_generate` | Analyze or generate images | [Image Generation](/tools/image-generation) |
+| `music_generate` | Generate music tracks | [Music Generation](/tools/music-generation) |
+| `video_generate` | Generate videos | [Video Generation](/tools/video-generation) |
+| `tts` | One-shot text-to-speech conversion | [TTS](/tools/tts) |
+| `sessions_*` / `subagents` / `agents_list` | Session management, status, and sub-agent orchestration | [Sub-agents](/tools/subagents) |
+| `session_status` | Lightweight `/status`-style readback and session model override | [Session Tools](/concepts/session-tool) |
For image work, use `image` for analysis and `image_generate` for generation or editing. If you target `openai/*`, `google/*`, `fal/*`, or another non-default image provider, configure that provider's auth/API key first.
diff --git a/docs/tools/plugin.md b/docs/tools/plugin.md
index e29883c2047..99bf8d899f0 100644
--- a/docs/tools/plugin.md
+++ b/docs/tools/plugin.md
@@ -133,7 +133,7 @@ Looking for third-party plugins? See [Community Plugins](/plugins/community).
enabled: true,
allow: ["voice-call"],
deny: ["untrusted-plugin"],
- load: { paths: ["~/Projects/oss/voice-call-extension"] },
+ load: { paths: ["~/Projects/oss/voice-call-plugin"] },
entries: {
"voice-call": { enabled: true, config: { provider: "twilio" } },
},
diff --git a/docs/tts.md b/docs/tts.md
index e212b3cb32a..9fecbeac043 100644
--- a/docs/tts.md
+++ b/docs/tts.md
@@ -1,5 +1,6 @@
---
title: "Text-to-Speech"
+summary: "Redirect to /tools/tts"
redirect: /tools/tts
---
diff --git a/extensions/openai/index.test.ts b/extensions/openai/index.test.ts
index a42d1f9dd55..b7e60cd5a83 100644
--- a/extensions/openai/index.test.ts
+++ b/extensions/openai/index.test.ts
@@ -21,6 +21,12 @@ const runtimeMocks = vi.hoisted(() => ({
refreshOpenAICodexToken: vi.fn(),
}));
+type OpenAIRefreshDelegateGlobal = typeof globalThis & {
+ __OPENCLAW_TEST_REFRESH_OPENAI_CODEX_TOKEN__?: (...args: unknown[]) => unknown;
+};
+
+const openAIRefreshDelegateGlobal = () => globalThis as OpenAIRefreshDelegateGlobal;
+
vi.mock("openclaw/plugin-sdk/runtime-env", async () => {
const actual = await vi.importActual