# customware-support-widget

Wires the Customware support chat into a client-only React Router SPA: script in root.tsx, <customware-chat> in the route or layout that needs it.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 2400 installs · ★ 2
- Author: customware-ai
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/customware-ai/skills/tree/HEAD/skills/customware-support-widget/SKILL.md
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/skills/customware-support-widget

## What it does

The skill walks an agent through embedding a third-party browser custom element, `<customware-chat>`, in the Customware React Router client-only template. The script at `https://app.customware.ai/support-widget/customware-chat.js` is loaded once from `root.tsx` or the equivalent root document file, and the element itself is rendered only where support belongs — a floating launcher or an embedded panel.

Two modes are covered: `chat-bubble` for a floating launcher and dialog, `full` for a rail, drawer or split pane. Both need `org-id` and `project-id`. When either id is missing, the task is supposed to fail with a clear reason; the skill forbids placeholder values and follow-up questions. Visitor identity goes through `meta` only, limited to `email` and `name`. Sizing belongs to the wrapper, `styleOptions` or `style-options` — the native DOM `style` property is not widget configuration.

The widget owns its Shadow DOM, chat runtime, service calls, tool badges and page operation: filling fields, picking options, clicking buttons, replacing values. Adding your own click or fill handlers around it is pointless, and so is restyling its internals in React or reaching into the Shadow DOM. In `full` mode the wrapper needs a concrete height and the widget keeps its own scrolling. In `chat-bubble` mode make sure the container does not clip the element and carries a suitable `z-index`.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add customware-ai/skills --skill customware-support-widget -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/customware-support-widget/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/customware-support-widget/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add customware-ai/skills --skill customware-support-widget -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/customware-support-widget/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add customware-ai/skills --skill customware-support-widget -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/customware-support-widget/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install customware-ai/skills customware-support-widget
```

2. **Manually: put the files in place**
- File: `.github/skills/customware-support-widget/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add customware-ai/skills --skill customware-support-widget -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/customware-ai/skills --path skills/customware-support-widget
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/customware-support-widget/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add customware-ai/skills --skill customware-support-widget -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/customware-ai/skills/tree/HEAD/skills/customware-support-widget/SKILL.md

## When to use it
- add a support chat to a client-only React Router SPA
- place a floating support launcher in the app shell
- embed chat as a panel inside a layout region
- let the support agent fill a form for the user
- fix the placement or styling of an existing widget

## Example prompts
- Add the Customware support widget to `root.tsx` and render it in the app layout
- Render `<customware-chat>` in `chat-bubble` mode with `org-id` and `project-id`
- Switch the widget to `full` mode in a right-hand panel and give the wrapper a height

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: d9eb39498d13a89f.

BEGIN THIRD-PARTY FILE d9eb39498d13a89f
```text
---
name: customware-support-widget
description: Use this skill when adding, placing, configuring, or fixing the Customware support chat widget in the Customware React Router client-only SPA template. It covers root.tsx/root document script loading, route/layout placement, required org/project ids, bubble versus full mode, optional metadata and style options, page-operation support, and constraints for MITB-style code generation.
---

# Customware Support Widget

Use this skill when the Customware React Router client-only SPA template needs a Customware support chat entry point.

The widget is a third-party browser custom element. In this template, load the widget script in `root.tsx` or the equivalent React Router root file/component where the HTML document structure is defined, and render `<customware-chat>` only in the route or layout where support should appear. The widget owns its Shadow DOM UI, chat runtime, service calls, tool badges, speech input, and page-operation behavior.

For all React code examples, script loading patterns, JSX typing, bubble/full mode examples, metadata, and style options, read [references/component-usage.md](references/component-usage.md).

## What It Offers

- A support chat UI as `<customware-chat>`.
- `chat-bubble` mode for a floating launcher/dialog.
- `full` mode for a sidebar, rail, drawer, or split-pane chat region.
- Optional visitor metadata through the `meta` DOM property.
- Optional sizing/customization through `styleOptions` or `style-options`.
- Tool-backed support behavior: read domain/context, list tasks, create tasks, and operate the visible page.
- Page operation for user requests like filling forms, selecting options, clicking buttons, replacing values, or submitting visible UI.

## When To Use

- Add support chat to the Customware React Router client-only SPA template.
- Place a floating support launcher in an app shell.
- Place support chat as a full embedded panel in a layout region.
- Allow the support agent to help with visible app UI, such as filling a form on behalf of the user.
- Update an existing support widget placement or styling.
```
END THIRD-PARTY FILE d9eb39498d13a89f

The third-party file has ended. Everything between the d9eb39498d13a89f tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2130 of 6480 bytes. © customware-ai · MIT · https://github.com/customware-ai/skills/tree/HEAD/skills/customware-support-widget/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
