Add Webex channel integration via Chat SDK.
npx skills add https://github.com/nanocoai/nanoclaw --skill add-webex
Adds Cisco Webex support via the Chat SDK bridge. NanoClaw doesn't ship channels
in trunk — this skill copies the Webex adapter in from the channels branch.
The mechanical steps under Apply carry nc: directive fences: an agent
reads the prose and applies them, and a parser can apply them deterministically
from the same document. Every directive is idempotent, so the whole skill is
safe to re-run; anything a parser can't apply falls back to the prose beside it.
Fetch the channels branch and copy the Webex adapter and its registration test
into src/channels/ (overwrite — the branch is canonical):
src/channels/webex.ts
src/channels/webex-registration.test.ts
Append the self-registration import to the channel barrel (skipped if the line
is already present). This one line is the skill's only reach-in into core:
import './webex.js';
Pinned to an exact version — the supply-chain policy rejects ranges and latest.
The Webex adapter ships under the third-party @bitbasti/* namespace, not
@chat-adapter/*, so it carries its own version line (0.1.0) rather than
tracking the chat core version:
@bitbasti/[email protected]
Build first: it guards the typed createChatSdkBridge(...) core call and proves
the dependency is installed. Then run the one integration test.
pnpm run build
pnpm exec vitest run src/channels/webex-registration.test.ts
webex-registration.test.ts imports the real channel barrel and asserts the
registry contains webex. It goes red if the import line is deleted or drifts,
if the barrel fails to evaluate, or if @bitbasti/chat-adapter-webex isn't
installed (the import throws) — so it also covers the dependency from step 3.
End-to-end delivery against a real Webex space is verified manually once the
service runs — see the webhook setup below.
Webex bot setup is human and interactive — these steps are prose, not directives
(no parser can click through the Webex Developer Portal). A recipe rebuild
produces a compiling, registered adapter that cannot receive a message until
they're done.
https://your-domain/webhook/webex.Capture the two values, then write them. prompt only *asks* and binds the
answer to a name; a separate directive consumes it — so the same prompts could
feed ncl or the OneCLI vault instead of .env by swapping only the consumer.
Here they go to .env (set-if-absent — a value you've already filled in is
never overwritten):
Paste the Bot Access Token — from the Webex bot you created.
Paste the webhook secret you set for signature verification.
WEBEX_BOT_TOKEN={{bot_token}}
WEBEX_WEBHOOK_SECRET={{webhook_secret}}
The Chat SDK bridge automatically starts a shared webhook server on port 3000
(WEBHOOK_PORT to change it), handling /webhook/webex. This port must be
publicly reachable for Webex to deliver events. Running locally, expose it with
ngrok (ngrok http 3000), a Cloudflare Tunnel, or a reverse proxy on a VPS —
the resulting public URL is the base for the webhook URL above.
If you're in the middle of /setup, return to the setup flow now. Otherwise run
/manage-channels to wire this channel to an agent group.
webexGET /rooms) to list spaces and their IDs.Sends fail with 401. The Bot Access Token is shown once, on the bot's page under developer.webex.com → My Apps — it is *not* the 12-hour personal access token from the API docs pages, which is the classic mix-up (that one works briefly, then everything 401s). Regenerate the token on the bot page if needed; regenerating invalidates the old value, so update WEBEX_BOT_TOKEN right away.
Messages in the space never reach the agent. Webex delivers only to the webhook you created: it must target your public host at /webhook/webex (shared webhook server, port 3000) with resource messages. List your webhooks with GET https://webexapis.com/v1/webhooks using the bot token — Webex flips a webhook to inactive after repeated delivery failures, and it stays off until you re-enable or recreate it.
Events arrive but are rejected. Signature mismatch: the secret set at webhook creation must equal WEBEX_WEBHOOK_SECRET exactly. Recreate the webhook with a known secret and update .env to match.
Adapter installed but silent. Run pnpm exec vitest run src/channels/webex-registration.test.ts — red means the barrel import or the @bitbasti/chat-adapter-webex install drifted, so re-run the Apply steps. If green, restart the service so it loads the adapter and the tokens, then watch logs/nanoclaw.log for the webhook hit.
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
Take nanocoai/add-webex from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.