@pinecall/skills 0.1.0 → 0.1.2

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,12 @@ 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\`. To keep flash on a non-English agent
37
+ (lower latency/cost), set the top-level \`flash: true\` flag. To pin any model,
38
+ use \`voice: { ..., model: "..." }\` (explicit model always wins over \`flash\`).
33
39
  - **Greeting**: inbound → \`greeting\` field in \`pc.agent()\`; outbound → \`greeting\`
34
40
  field in \`agent.dial()\`. It is sugar for \`call.say()\` in \`call.started\`.
35
41
  - **Auth**: \`new Pinecall()\` reads \`PINECALL_API_KEY\` from env and auto-connects.
@@ -78,26 +84,31 @@ const GROUP_MAP = {
78
84
  blurb: "@pinecall/sdk API reference — Pinecall, Agent, Call, ReplyStream.",
79
85
  keywords: "api, pc.agent, agent.dial, call object, reply stream, replyStream, server sdk surface",
80
86
  },
81
- "@pinecall/web/core (Voice)": {
87
+ "Voice — core": {
82
88
  slug: "pinecall-web-voice",
83
89
  blurb: "@pinecall/web/core — browser WebRTC voice (VoiceSession, state & phases, DataChannel protocol).",
84
90
  keywords: "webrtc, voice session, browser voice, datachannel, @pinecall/web/core",
85
91
  },
86
- "@pinecall/web (React Widget)": {
92
+ "React widget": {
87
93
  slug: "pinecall-web-widget",
88
94
  blurb: "@pinecall/web React widget — VoiceWidget props, theming, useVoiceSession hook, client tools.",
89
95
  keywords: "react widget, voicewidget, useVoiceSession, theming, props, client tools, @pinecall/web",
90
96
  },
91
- "@pinecall/web/chat (Chat)": {
97
+ "Text chat": {
92
98
  slug: "pinecall-web-chat",
93
99
  blurb: "@pinecall/web/chat — browser text chat (ChatSession, ChatView).",
94
100
  keywords: "chat, chatsession, text chat, @pinecall/web/chat",
95
101
  },
96
- "@pinecall/web (Web Components)": {
102
+ "Web components": {
97
103
  slug: "pinecall-web-components",
98
104
  blurb: "@pinecall/web web components — framework-agnostic custom elements.",
99
105
  keywords: "web components, custom element, framework-agnostic widget",
100
106
  },
107
+ "Agent Skills": {
108
+ slug: "pinecall-agent-skills",
109
+ blurb: "@pinecall/skills — install the Pinecall docs as Agent Skills into Claude Code, Cursor, Antigravity, Copilot.",
110
+ keywords: "agent skills, @pinecall/skills, claude code, cursor, antigravity, copilot, skills add, install skills",
111
+ },
101
112
  Reference: {
102
113
  slug: "pinecall-reference",
103
114
  blurb: "Reference tables — CLI commands, STT/TTS/LLM providers, events, session limits, REST API.",
@@ -136,9 +147,28 @@ function loadPage(slug) {
136
147
  };
137
148
  }
138
149
 
150
+ // Flatten nested navigation groups into leaf groups (each with only page
151
+ // slugs). A parent group whose `pages` are sub-groups contributes its leaves,
152
+ // not itself — so one skill is still emitted per leaf section.
153
+ function leafGroups(groups) {
154
+ const out = [];
155
+ for (const g of groups) {
156
+ const pages = g.pages || [];
157
+ const subs = pages.filter((p) => p && typeof p === "object" && Array.isArray(p.pages));
158
+ const slugs = pages.filter((p) => typeof p === "string");
159
+ if (subs.length) {
160
+ out.push(...leafGroups(subs));
161
+ if (slugs.length) out.push({ group: g.group, pages: slugs });
162
+ } else {
163
+ out.push({ group: g.group, pages: slugs });
164
+ }
165
+ }
166
+ return out;
167
+ }
168
+
139
169
  // --- main
140
170
  const docsJson = JSON.parse(readFileSync(join(DOCS_DIR, "..", "docs.json"), "utf8"));
141
- const groups = docsJson.navigation.groups;
171
+ const groups = leafGroups(docsJson.navigation.groups);
142
172
 
143
173
  if (existsSync(OUT_DIR)) rmSync(OUT_DIR, { recursive: true });
144
174
  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.2",
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,43 @@
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`. To keep flash on a non-English agent
34
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
35
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
36
+ - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
37
+ field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
38
+ - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
39
+ - Full documentation: <https://docs.pinecall.io>
40
+
41
+ ---
42
+ *Generated from `sdk/docs/` by `@pinecall/skills` — do not edit by hand; edit the
43
+ 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,12 @@ 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`. To keep flash on a non-English agent
38
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
39
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
34
40
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
35
41
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
36
42
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -49,6 +49,12 @@ 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`. To keep flash on a non-English agent
56
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
57
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
52
58
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
53
59
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
54
60
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -58,6 +58,12 @@ 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`. To keep flash on a non-English agent
65
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
66
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
61
67
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
62
68
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
63
69
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -44,6 +44,12 @@ 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`. To keep flash on a non-English agent
51
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
52
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
47
53
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
48
54
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
49
55
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -33,6 +33,12 @@ 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`. To keep flash on a non-English agent
40
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
41
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
36
42
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
37
43
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
38
44
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -68,7 +68,65 @@ 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, use the `flash` shortcut or pin the model explicitly (both below).
81
+
82
+ #### `flash: true` — keep flash on a non-English agent
83
+
84
+ The multilingual model trades a little **latency** for much better pronunciation.
85
+ If your non-English agent should prioritize **lowest latency / lowest cost** over
86
+ pronunciation quality, set the top-level `flash` flag — it opts out of the
87
+ multilingual auto-default and keeps `eleven_flash_v2_5`:
88
+
89
+ ```typescript
90
+ const agent = pc.agent("sofia", {
91
+ prompt: "Sos Sofía, asistente de la clínica.",
92
+ llm: "openai/gpt-5-chat-latest",
93
+ voice: "elevenlabs/agus",
94
+ stt: "deepgram/flux",
95
+ language: "es",
96
+ flash: true, // ← stay on eleven_flash_v2_5 despite language: "es"
97
+ });
98
+ ```
99
+
100
+ `flash` is a sibling of `language` (not inside `voice`), so it reads cleanly with
101
+ the rest of the shortcuts. Semantics:
102
+
103
+ | Config | Resulting ElevenLabs model |
104
+ |---|---|
105
+ | `language: "es"` | `eleven_multilingual_v2` (auto) |
106
+ | `language: "es"`, `flash: true` | `eleven_flash_v2_5` |
107
+ | `language: "en"` (with or without `flash`) | `eleven_flash_v2_5` |
108
+ | `voice: { model: "..." }` (any `flash`/`language`) | the pinned model — explicit always wins |
109
+
110
+ Notes:
111
+
112
+ - **ElevenLabs only.** `flash` has no effect on Cartesia or Polly.
113
+ - **No-op for English** — English already defaults to flash.
114
+ - **An explicit `voice: { model }` always wins** over `flash`. Use `flash: true`
115
+ for the common "I want the cheap fast model" case; use the `model` field when
116
+ you need a specific model id.
117
+ - Works per-channel too: `phoneNumbers: [{ number, language: "es", flash: true }]`.
118
+
119
+ **Override the model** with the optional `model` field — it always wins over both the auto-default and `flash`:
120
+
121
+ ```typescript
122
+ voice: {
123
+ provider: "elevenlabs",
124
+ voice_id: "JBFqnCBsd6RMkjVDRZzb",
125
+ model: "eleven_multilingual_v2", // or "eleven_flash_v2_5" / "eleven_turbo_v2_5"
126
+ }
127
+ ```
128
+
129
+ 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
130
 
73
131
  **Tuning notes:**
74
132
 
@@ -46,6 +46,12 @@ 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`. To keep flash on a non-English agent
53
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
54
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
49
55
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
50
56
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
51
57
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.
@@ -35,7 +35,8 @@ const agent = pc.agent("my-agent", {
35
35
  | Config field | Type | Description |
36
36
  |---|---|---|
37
37
  | `voice` | `string \| VoiceConfig` | TTS provider — shortcut or full config |
38
- | `language` | `string` | BCP-47 language code |
38
+ | `language` | `string` | BCP-47 language code. Non-English auto-selects ElevenLabs `eleven_multilingual_v2` |
39
+ | `flash` | `boolean` | Keep ElevenLabs `eleven_flash_v2_5` on a non-English agent (lowest latency/cost) instead of the multilingual auto-default. ElevenLabs-only; see [TTS Providers](/reference/tts-providers) |
39
40
  | `stt` | `string \| STTConfig` | STT provider — shortcut or full config |
40
41
  | `llm` | `LLMConfig` | LLM provider, model, prompt, enabled flag |
41
42
  | `tools` | `Tool[]` | Declarative tools created with `tool()` + Zod schemas (auto-executed) |
@@ -27,6 +27,12 @@ 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`. To keep flash on a non-English agent
34
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
35
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
30
36
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
31
37
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
32
38
  - **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,12 @@ 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`. To keep flash on a non-English agent
35
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
36
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
31
37
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
32
38
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
33
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 (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,12 @@ 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`. To keep flash on a non-English agent
34
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
35
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
30
36
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
31
37
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
32
38
  - **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,12 @@ 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`. To keep flash on a non-English agent
37
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
38
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
33
39
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
34
40
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
35
41
  - **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,12 @@ 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`. To keep flash on a non-English agent
38
+ (lower latency/cost), set the top-level `flash: true` flag. To pin any model,
39
+ use `voice: { ..., model: "..." }` (explicit model always wins over `flash`).
34
40
  - **Greeting**: inbound → `greeting` field in `pc.agent()`; outbound → `greeting`
35
41
  field in `agent.dial()`. It is sugar for `call.say()` in `call.started`.
36
42
  - **Auth**: `new Pinecall()` reads `PINECALL_API_KEY` from env and auto-connects.