@pinecall/skills 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,6 +45,7 @@ cp -R skills/pinecall-guides ~/your-project/.claude/skills/
45
45
  | `pinecall-web-components` | Framework-agnostic web components |
46
46
  | `pinecall-reference` | CLI, STT/TTS/LLM providers, events, limits, REST |
47
47
  | `pinecall-security` | Security model |
48
+ | `pinecall-agent-skills` | This package — installing the Pinecall skills into your agent |
48
49
 
49
50
  Every skill carries the **house rules** so the agent never drifts:
50
51
  `stt: "deepgram/flux"`, `llm: "openai/gpt-5-chat-latest"`, `voice: "elevenlabs/sarah"`,
package/build.mjs CHANGED
@@ -30,6 +30,10 @@ const HOUSE_RULES = `## House rules — always apply
30
30
  - **Turn detection & VAD are auto-derived from the STT provider — never set
31
31
  \`turnDetection\` or \`vad\` manually.** Flux → native turns + native VAD;
32
32
  every other STT → \`smart_turn\` + \`silero\`.
33
+ - **TTS model is auto-derived from \`language\`** — non-English agents (e.g.
34
+ \`language: "es"\`) default ElevenLabs to \`eleven_multilingual_v2\` so numbers,
35
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
36
+ English stays on \`eleven_flash_v2_5\`. Override with \`voice: { ..., model: "..." }\`.
33
37
  - **Greeting**: inbound → \`greeting\` field in \`pc.agent()\`; outbound → \`greeting\`
34
38
  field in \`agent.dial()\`. It is sugar for \`call.say()\` in \`call.started\`.
35
39
  - **Auth**: \`new Pinecall()\` reads \`PINECALL_API_KEY\` from env and auto-connects.
@@ -78,26 +82,31 @@ const GROUP_MAP = {
78
82
  blurb: "@pinecall/sdk API reference — Pinecall, Agent, Call, ReplyStream.",
79
83
  keywords: "api, pc.agent, agent.dial, call object, reply stream, replyStream, server sdk surface",
80
84
  },
81
- "@pinecall/web/core (Voice)": {
85
+ "Voice — core": {
82
86
  slug: "pinecall-web-voice",
83
87
  blurb: "@pinecall/web/core — browser WebRTC voice (VoiceSession, state & phases, DataChannel protocol).",
84
88
  keywords: "webrtc, voice session, browser voice, datachannel, @pinecall/web/core",
85
89
  },
86
- "@pinecall/web (React Widget)": {
90
+ "React widget": {
87
91
  slug: "pinecall-web-widget",
88
92
  blurb: "@pinecall/web React widget — VoiceWidget props, theming, useVoiceSession hook, client tools.",
89
93
  keywords: "react widget, voicewidget, useVoiceSession, theming, props, client tools, @pinecall/web",
90
94
  },
91
- "@pinecall/web/chat (Chat)": {
95
+ "Text chat": {
92
96
  slug: "pinecall-web-chat",
93
97
  blurb: "@pinecall/web/chat — browser text chat (ChatSession, ChatView).",
94
98
  keywords: "chat, chatsession, text chat, @pinecall/web/chat",
95
99
  },
96
- "@pinecall/web (Web Components)": {
100
+ "Web components": {
97
101
  slug: "pinecall-web-components",
98
102
  blurb: "@pinecall/web web components — framework-agnostic custom elements.",
99
103
  keywords: "web components, custom element, framework-agnostic widget",
100
104
  },
105
+ "Agent Skills": {
106
+ slug: "pinecall-agent-skills",
107
+ blurb: "@pinecall/skills — install the Pinecall docs as Agent Skills into Claude Code, Cursor, Antigravity, Copilot.",
108
+ keywords: "agent skills, @pinecall/skills, claude code, cursor, antigravity, copilot, skills add, install skills",
109
+ },
101
110
  Reference: {
102
111
  slug: "pinecall-reference",
103
112
  blurb: "Reference tables — CLI commands, STT/TTS/LLM providers, events, session limits, REST API.",
@@ -136,9 +145,28 @@ function loadPage(slug) {
136
145
  };
137
146
  }
138
147
 
148
+ // Flatten nested navigation groups into leaf groups (each with only page
149
+ // slugs). A parent group whose `pages` are sub-groups contributes its leaves,
150
+ // not itself — so one skill is still emitted per leaf section.
151
+ function leafGroups(groups) {
152
+ const out = [];
153
+ for (const g of groups) {
154
+ const pages = g.pages || [];
155
+ const subs = pages.filter((p) => p && typeof p === "object" && Array.isArray(p.pages));
156
+ const slugs = pages.filter((p) => typeof p === "string");
157
+ if (subs.length) {
158
+ out.push(...leafGroups(subs));
159
+ if (slugs.length) out.push({ group: g.group, pages: slugs });
160
+ } else {
161
+ out.push({ group: g.group, pages: slugs });
162
+ }
163
+ }
164
+ return out;
165
+ }
166
+
139
167
  // --- main
140
168
  const docsJson = JSON.parse(readFileSync(join(DOCS_DIR, "..", "docs.json"), "utf8"));
141
- const groups = docsJson.navigation.groups;
169
+ const groups = leafGroups(docsJson.navigation.groups);
142
170
 
143
171
  if (existsSync(OUT_DIR)) rmSync(OUT_DIR, { recursive: true });
144
172
  mkdirSync(OUT_DIR, { recursive: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinecall/skills",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Agent Skills for the Pinecall SDK — installable into Claude Code, Antigravity, Cursor, Copilot and any agent that supports the open Skills format.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: pinecall-agent-skills
3
+ description: >-
4
+ @pinecall/skills — install the Pinecall docs as Agent Skills into Claude Code, Cursor, Antigravity, Copilot. Use when the user is building, configuring, or debugging with @pinecall/sdk. Keywords: agent skills, @pinecall/skills, claude code, cursor, antigravity, copilot, skills add, install skills.
5
+ license: MIT
6
+ ---
7
+
8
+ # Agent Skills
9
+
10
+ @pinecall/skills — install the Pinecall docs as Agent Skills into Claude Code, Cursor, Antigravity, Copilot.
11
+
12
+ This skill bundles the official Pinecall documentation for **Agent Skills**. The
13
+ table below indexes every page; open the `references/…` file for the full text
14
+ (loaded on demand). Source of truth: <https://docs.pinecall.io>.
15
+
16
+ | Page | What it covers | Open |
17
+ |------|----------------|------|
18
+ | **Agent Skills (@pinecall/skills)** | Drop the Pinecall docs into Claude Code, Cursor, Antigravity, Copilot or any agent that speaks the open Agent Skills format — so your coding agent builds voice & chat agents the right way, offline, with the correct defaults. | [`references/skills.md`](references/skills.md) · [docs](https://docs.pinecall.io/skills) |
19
+
20
+
21
+ ## House rules — always apply
22
+
23
+ - **Example defaults** (use these exact strings unless the user asks otherwise):
24
+ `stt: "deepgram/flux"`, `llm: "openai/gpt-5-chat-latest"`, `voice: "elevenlabs/sarah"`.
25
+ **NEVER use `deepgram/nova-2`** — it is not supported. Use `deepgram/nova-3`
26
+ only for languages Flux doesn't support (e.g. Arabic).
27
+ - **Turn detection & VAD are auto-derived from the STT provider — never set
28
+ `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
29
+ every other STT → `smart_turn` + `silero`.
30
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
31
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
32
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
33
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
34
+ - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
35
+ field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
36
+ - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
37
+ - Full documentation: <https://docs.pinecall.io>
38
+
39
+ ---
40
+ *Generated from `sdk/docs/` by `@pinecall/skills` — do not edit by hand; edit the
41
+ docs and re-run `node build.mjs`.*
@@ -0,0 +1,90 @@
1
+ ---
2
+ title: "Agent Skills (@pinecall/skills)"
3
+ description: "Drop the Pinecall docs into Claude Code, Cursor, Antigravity, Copilot or any agent that speaks the open Agent Skills format — so your coding agent builds voice & chat agents the right way, offline, with the correct defaults."
4
+ ---
5
+
6
+ # Agent Skills
7
+
8
+ [`@pinecall/skills`](https://github.com/pinecall/skills) packages the entire
9
+ Pinecall documentation as **[Agent Skills](https://github.com/agentskills/agentskills)** —
10
+ installable into **Claude Code, Google Antigravity, Cursor, GitHub Copilot, Codex**,
11
+ or anything that speaks the open Skills format. Your coding agent then knows how
12
+ to build Pinecall voice & chat agents **with the right defaults**, offline, without
13
+ you pasting docs into the chat.
14
+
15
+ Each skill is a folder with a `SKILL.md` + a `references/` tree of the real docs
16
+ pages, loaded **on demand** (progressive disclosure). The whole package is
17
+ **generated from these same docs** (`sdk/docs/`) — one source of truth feeds the
18
+ docs site, the [`/ask` knowledge base](/guides/knowledge-bases), and these skills.
19
+
20
+ ## Install
21
+
22
+ The open installer picks your agent's skills directory and symlinks the skills in:
23
+
24
+ ```bash
25
+ npx skills add pinecall/skills
26
+ ```
27
+
28
+ Or copy just the skills you want into your agent's skills directory:
29
+
30
+ | Agent | Directory |
31
+ |-------|-----------|
32
+ | Claude Code | `.claude/skills/` |
33
+ | Google Antigravity | `.agents/skills/` (or the plugin's `skills/`) |
34
+ | Cursor / Copilot / others | per the agent's docs |
35
+
36
+ ```bash
37
+ cp -R skills/pinecall-guides ~/your-project/.claude/skills/
38
+ ```
39
+
40
+ ## What's inside
41
+
42
+ One skill per docs section — install all of them, or only the ones you need:
43
+
44
+ | Skill | Covers |
45
+ |-------|--------|
46
+ | `pinecall-quickstart` | Install + your first voice agent |
47
+ | `pinecall-concepts` | Agents/Channels/Calls, server vs client LLM, hot reload, topologies |
48
+ | `pinecall-guides` | Inbound/outbound, WhatsApp, tools, events, takeover, WebRTC, multi-tenant, testing… |
49
+ | `pinecall-examples` | Copy-paste full agents |
50
+ | `pinecall-sdk-api` | `@pinecall/sdk` API (Pinecall / Agent / Call / ReplyStream) |
51
+ | `pinecall-web-voice` | `@pinecall/web/core` — browser WebRTC voice |
52
+ | `pinecall-web-widget` | `@pinecall/web` React widget |
53
+ | `pinecall-web-chat` | `@pinecall/web/chat` — text chat |
54
+ | `pinecall-web-components` | Framework-agnostic web components |
55
+ | `pinecall-reference` | CLI, STT/TTS/LLM providers, events, limits, REST |
56
+ | `pinecall-security` | Security model |
57
+
58
+ ## Built-in house rules
59
+
60
+ Every skill carries the Pinecall **house rules**, so the agent never drifts from
61
+ the supported configuration:
62
+
63
+ - Example defaults: `stt: "deepgram/flux"`, `llm: "openai/gpt-5-chat-latest"`,
64
+ `voice: "elevenlabs/sarah"`. Never `deepgram/nova-2`.
65
+ - **Turn detection & VAD are auto-derived from the STT provider — never set
66
+ `turnDetection` or `vad` by hand.** (Flux → native turns + native VAD; every
67
+ other STT → `smart_turn` + `silero`.)
68
+ - Greeting: inbound → `greeting` in `pc.agent()`; outbound → `greeting` in
69
+ `agent.dial()`.
70
+ - Auth: `new Pinecall()` reads `PINECALL_API_KEY` and auto-connects.
71
+
72
+ ## Staying in sync
73
+
74
+ The `skills/` tree is **generated and committed**, so `npx skills add` works
75
+ offline. Whenever the docs change, the package is regenerated from `sdk/docs/`:
76
+
77
+ ```bash
78
+ node build.mjs # reads ../sdk/docs by default
79
+ DOCS_DIR=/path/to/sdk/docs node build.mjs
80
+ ```
81
+
82
+ The generator maps each `docs.json` navigation group to one skill, copies that
83
+ group's pages into `references/`, and writes a `SKILL.md` index + the house
84
+ rules. No dependencies.
85
+
86
+ ## Related
87
+
88
+ - [Quickstart](/quickstart) — build your first agent
89
+ - [Knowledge bases](/guides/knowledge-bases) — the same docs power the `/ask` agent
90
+ - [`@pinecall/sdk` API](/api/pinecall)
@@ -31,6 +31,10 @@ table below indexes every page; open the `references/…` file for the full text
31
31
  - **Turn detection & VAD are auto-derived from the STT provider — never set
32
32
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
33
33
  every other STT → `smart_turn` + `silero`.
34
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
35
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
36
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
37
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
34
38
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
35
39
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
36
40
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -49,6 +49,10 @@ const agent = pc.agent("mara", {
49
49
  - **Turn detection & VAD are auto-derived from the STT provider — never set
50
50
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
51
51
  every other STT → `smart_turn` + `silero`.
52
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
53
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
54
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
55
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
52
56
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
53
57
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
54
58
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -58,6 +58,10 @@ const agent = pc.agent("mara", {
58
58
  - **Turn detection & VAD are auto-derived from the STT provider — never set
59
59
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
60
60
  every other STT → `smart_turn` + `silero`.
61
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
62
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
63
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
64
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
61
65
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
62
66
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
63
67
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -44,6 +44,10 @@ const agent = pc.agent("mara", {
44
44
  - **Turn detection & VAD are auto-derived from the STT provider — never set
45
45
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
46
46
  every other STT → `smart_turn` + `silero`.
47
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
48
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
49
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
50
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
47
51
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
48
52
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
49
53
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -33,6 +33,10 @@ table below indexes every page; open the `references/…` file for the full text
33
33
  - **Turn detection & VAD are auto-derived from the STT provider — never set
34
34
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
35
35
  every other STT → `smart_turn` + `silero`.
36
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
37
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
38
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
39
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
36
40
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
37
41
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
38
42
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -68,7 +68,28 @@ voice: {
68
68
 
69
69
  Shortcut: `"elevenlabs/sarah"`
70
70
 
71
- The server defaults to `eleven_flash_v2_5` (the fastest model, optimized for real-time streaming). Override it with the optional `model` field (e.g. `model: "eleven_turbo_v2_5"`).
71
+ ### Model selection (auto for non-English)
72
+
73
+ The server picks the ElevenLabs model from your `language`:
74
+
75
+ | Language | Default model | Why |
76
+ |---|---|---|
77
+ | `en` (or unset) | `eleven_flash_v2_5` | Fastest, optimized for real-time streaming |
78
+ | Any non-English (`es`, `fr`, `de`, …) | `eleven_multilingual_v2` | Flash/Turbo don't normalize text, so Spanish & other languages mispronounce numbers, dates, currency and abbreviations. The multilingual model reads them naturally. |
79
+
80
+ > `eleven_multilingual_v2` is billed at a higher rate than flash (it's a higher-quality model). If you'd rather keep the faster/cheaper flash model for a non-English agent, pin it explicitly (see below).
81
+
82
+ **Override the model** with the optional `model` field — it always wins over the auto-default:
83
+
84
+ ```typescript
85
+ voice: {
86
+ provider: "elevenlabs",
87
+ voice_id: "JBFqnCBsd6RMkjVDRZzb",
88
+ model: "eleven_multilingual_v2", // or "eleven_flash_v2_5" / "eleven_turbo_v2_5"
89
+ }
90
+ ```
91
+
92
+ The model is part of the voice config, so it hot-reloads with it — `agent.update({ voice })` and a same-provider `call.update({ voice })` keep the model/language already in effect unless you pass a new one.
72
93
 
73
94
  **Tuning notes:**
74
95
 
@@ -46,6 +46,10 @@ const agent = pc.agent("mara", {
46
46
  - **Turn detection & VAD are auto-derived from the STT provider — never set
47
47
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
48
48
  every other STT → `smart_turn` + `silero`.
49
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
50
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
51
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
52
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
49
53
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
50
54
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
51
55
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -27,6 +27,10 @@ table below indexes every page; open the `references/…` file for the full text
27
27
  - **Turn detection & VAD are auto-derived from the STT provider — never set
28
28
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
29
29
  every other STT → `smart_turn` + `silero`.
30
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
31
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
32
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
33
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
30
34
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
31
35
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
32
36
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -5,11 +5,11 @@ description: >-
5
5
  license: MIT
6
6
  ---
7
7
 
8
- # @pinecall/web/chat (Chat)
8
+ # Text chat
9
9
 
10
10
  @pinecall/web/chat — browser text chat (ChatSession, ChatView).
11
11
 
12
- This skill bundles the official Pinecall documentation for **@pinecall/web/chat (Chat)**. The
12
+ This skill bundles the official Pinecall documentation for **Text chat**. The
13
13
  table below indexes every page; open the `references/…` file for the full text
14
14
  (loaded on demand). Source of truth: <https://docs.pinecall.io>.
15
15
 
@@ -28,6 +28,10 @@ table below indexes every page; open the `references/…` file for the full text
28
28
  - **Turn detection & VAD are auto-derived from the STT provider — never set
29
29
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
30
30
  every other STT → `smart_turn` + `silero`.
31
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
32
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
33
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
34
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
31
35
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
32
36
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
33
37
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -5,11 +5,11 @@ description: >-
5
5
  license: MIT
6
6
  ---
7
7
 
8
- # @pinecall/web (Web Components)
8
+ # Web components
9
9
 
10
10
  @pinecall/web web components — framework-agnostic custom elements.
11
11
 
12
- This skill bundles the official Pinecall documentation for **@pinecall/web (Web Components)**. The
12
+ This skill bundles the official Pinecall documentation for **Web components**. The
13
13
  table below indexes every page; open the `references/…` file for the full text
14
14
  (loaded on demand). Source of truth: <https://docs.pinecall.io>.
15
15
 
@@ -27,6 +27,10 @@ table below indexes every page; open the `references/…` file for the full text
27
27
  - **Turn detection & VAD are auto-derived from the STT provider — never set
28
28
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
29
29
  every other STT → `smart_turn` + `silero`.
30
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
31
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
32
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
33
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
30
34
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
31
35
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
32
36
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -5,11 +5,11 @@ description: >-
5
5
  license: MIT
6
6
  ---
7
7
 
8
- # @pinecall/web/core (Voice)
8
+ # Voice — core
9
9
 
10
10
  @pinecall/web/core — browser WebRTC voice (VoiceSession, state & phases, DataChannel protocol).
11
11
 
12
- This skill bundles the official Pinecall documentation for **@pinecall/web/core (Voice)**. The
12
+ This skill bundles the official Pinecall documentation for **Voice — core**. The
13
13
  table below indexes every page; open the `references/…` file for the full text
14
14
  (loaded on demand). Source of truth: <https://docs.pinecall.io>.
15
15
 
@@ -30,6 +30,10 @@ table below indexes every page; open the `references/…` file for the full text
30
30
  - **Turn detection & VAD are auto-derived from the STT provider — never set
31
31
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
32
32
  every other STT → `smart_turn` + `silero`.
33
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
34
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
35
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
36
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
33
37
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
34
38
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
35
39
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -5,11 +5,11 @@ description: >-
5
5
  license: MIT
6
6
  ---
7
7
 
8
- # @pinecall/web (React Widget)
8
+ # React widget
9
9
 
10
10
  @pinecall/web React widget — VoiceWidget props, theming, useVoiceSession hook, client tools.
11
11
 
12
- This skill bundles the official Pinecall documentation for **@pinecall/web (React Widget)**. The
12
+ This skill bundles the official Pinecall documentation for **React widget**. The
13
13
  table below indexes every page; open the `references/…` file for the full text
14
14
  (loaded on demand). Source of truth: <https://docs.pinecall.io>.
15
15
 
@@ -31,6 +31,10 @@ table below indexes every page; open the `references/…` file for the full text
31
31
  - **Turn detection & VAD are auto-derived from the STT provider — never set
32
32
  `turnDetection` or `vad` manually.** Flux → native turns + native VAD;
33
33
  every other STT → `smart_turn` + `silero`.
34
+ - **TTS model is auto-derived from `language`** — non-English agents (e.g.
35
+ `language: "es"`) default ElevenLabs to `eleven_multilingual_v2` so numbers,
36
+ dates and currency are pronounced correctly (flash/turbo don't normalize text).
37
+ English stays on `eleven_flash_v2_5`. Override with `voice: { ..., model: "..." }`.
34
38
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
35
39
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
36
40
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.