tavus-cli 0.1.1__tar.gz → 0.2.0__tar.gz
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.
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/PKG-INFO +20 -16
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/README.md +18 -14
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/docs/gemini-enterprise/README.md +21 -16
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/docs/gemini-enterprise/listing.md +8 -8
- tavus_cli-0.2.0/docs/gemini-enterprise/test-queries.md +161 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/pyproject.toml +2 -2
- tavus_cli-0.2.0/skills/tavus-agentic-pals/SKILL.md +208 -0
- tavus_cli-0.2.0/skills/tavus-agentic-pals/agents/openai.yaml +4 -0
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/build-and-verify.md +27 -27
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/builder-workflow.md +37 -37
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/chat-mode.md +19 -19
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/examples.md +23 -23
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/cli/main.py +115 -112
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/client/http.py +14 -14
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/patch.py +3 -3
- tavus_cli-0.2.0/src/tavus_mcp/sdk/recipes/__init__.py +6 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/build_and_verify.py +83 -71
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/options.py +13 -13
- tavus_cli-0.2.0/src/tavus_mcp/sdk/recipes/quickstart.py +50 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/templates.py +9 -9
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/tool_reuse.py +4 -4
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/__init__.py +5 -5
- tavus_cli-0.1.1/src/tavus_mcp/sdk/schemas/persona.py → tavus_cli-0.2.0/src/tavus_mcp/sdk/schemas/pal.py +8 -8
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/server.py +101 -96
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/integration/test_cli.py +6 -6
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/integration/test_client.py +32 -32
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/integration/test_mcp_server.py +3 -3
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_build_and_verify.py +57 -49
- tavus_cli-0.1.1/tests/unit/test_persona_schema.py → tavus_cli-0.2.0/tests/unit/test_pal_schema.py +14 -14
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_patch.py +5 -5
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_tool_reuse.py +2 -2
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/uv.lock +688 -686
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/src/tavus.ts +101 -98
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/test/tavus.test.ts +8 -8
- tavus_cli-0.1.1/docs/gemini-enterprise/test-queries.md +0 -161
- tavus_cli-0.1.1/skills/tavus-agentic-personas/SKILL.md +0 -208
- tavus_cli-0.1.1/skills/tavus-agentic-personas/agents/openai.yaml +0 -4
- tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/__init__.py +0 -6
- tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/quickstart.py +0 -48
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.env.example +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.github/workflows/deploy-cloudflare-worker.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.github/workflows/pr-reviews.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.github/workflows/pypi-cli.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/.gitignore +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/session.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/conftest.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_conversation_chat.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/package-lock.json +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/package.json +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/src/oauth.ts +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/tsconfig.json +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.2.0}/workers/tavus-mcp/wrangler.jsonc +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tavus-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Tavus CLI and MCP server for agentic
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Tavus CLI and MCP server for agentic PAL creation and editing.
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Requires-Dist: fastmcp>=2.0.0
|
|
7
7
|
Requires-Dist: httpx>=0.27.0
|
|
@@ -20,21 +20,25 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
|
|
21
21
|
# tavus-cli
|
|
22
22
|
|
|
23
|
-
Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus
|
|
23
|
+
Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus PAL creation end-to-end — separate from the human-facing PAL Maker.
|
|
24
24
|
|
|
25
25
|
## What's here
|
|
26
26
|
|
|
27
|
-
- **MCP server.**
|
|
28
|
-
- **CLI.** Scripted
|
|
27
|
+
- **MCP server.** PAL CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
|
|
28
|
+
- **CLI.** Scripted PAL authoring + publish. `tavus pal list / options / patch`, JSON round-tripping, OS-keychain auth.
|
|
29
29
|
- **Codex skill.** Publishable skill so an external agent can invoke the MCP server and CLI without reading the full Tavus API.
|
|
30
30
|
|
|
31
|
-
## Why standalone (not under
|
|
31
|
+
## Why standalone (not under PAL Maker)
|
|
32
32
|
|
|
33
|
-
The
|
|
33
|
+
The PAL Maker project is the **human** builder — face-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
|
|
34
|
+
|
|
35
|
+
> The Tavus API exposes `/v2/pals` and `/v2/faces` as backwards-compatible
|
|
36
|
+
> vocabulary aliases over `/v2/personas` and `/v2/replicas`. This toolkit speaks
|
|
37
|
+
> the new pal/face vocabulary throughout.
|
|
34
38
|
|
|
35
39
|
## Out of scope (for now)
|
|
36
40
|
|
|
37
|
-
-
|
|
41
|
+
- Face/video preview surfaces (live in the PAL Maker)
|
|
38
42
|
- Marketplace / sharing UX
|
|
39
43
|
- Multi-tenant auth beyond the existing dev-portal token model
|
|
40
44
|
|
|
@@ -57,11 +61,11 @@ Examples:
|
|
|
57
61
|
|
|
58
62
|
```bash
|
|
59
63
|
# Production defaults; only the API key is required.
|
|
60
|
-
TAVUS_API_KEY=... uv run tavus
|
|
64
|
+
TAVUS_API_KEY=... uv run tavus pal list
|
|
61
65
|
|
|
62
66
|
# Test DB without URL overrides.
|
|
63
|
-
TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus
|
|
64
|
-
uv run tavus --env TEST
|
|
67
|
+
TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus pal list
|
|
68
|
+
uv run tavus --env TEST pal list
|
|
65
69
|
```
|
|
66
70
|
|
|
67
71
|
The login flow opens the dev-portal at `/dev/cli-authorize` with a loopback callback URL and an
|
|
@@ -87,9 +91,9 @@ Local development commands:
|
|
|
87
91
|
|
|
88
92
|
```bash
|
|
89
93
|
uv run tavus doctor
|
|
90
|
-
uv run tavus
|
|
91
|
-
uv run tavus
|
|
92
|
-
uv run tavus
|
|
94
|
+
uv run tavus pal list
|
|
95
|
+
uv run tavus pal options <pal_id>
|
|
96
|
+
uv run tavus pal patch <pal_id> --op replace --path /pal_name --value '"New Name"'
|
|
93
97
|
```
|
|
94
98
|
|
|
95
99
|
## MCP
|
|
@@ -184,8 +188,8 @@ OAuth routes yet.
|
|
|
184
188
|
|
|
185
189
|
## Codex Skill
|
|
186
190
|
|
|
187
|
-
A publishable Codex skill for this repo lives at `skills/tavus-agentic-
|
|
188
|
-
It documents the CLI and MCP workflows, safe
|
|
191
|
+
A publishable Codex skill for this repo lives at `skills/tavus-agentic-pals/`.
|
|
192
|
+
It documents the CLI and MCP workflows, safe PAL patching, environment setup,
|
|
189
193
|
and concrete examples for agents using this toolkit.
|
|
190
194
|
|
|
191
195
|
Install it by copying that folder into `${CODEX_HOME:-$HOME/.codex}/skills/`, or
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
# tavus-cli
|
|
2
2
|
|
|
3
|
-
Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus
|
|
3
|
+
Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus PAL creation end-to-end — separate from the human-facing PAL Maker.
|
|
4
4
|
|
|
5
5
|
## What's here
|
|
6
6
|
|
|
7
|
-
- **MCP server.**
|
|
8
|
-
- **CLI.** Scripted
|
|
7
|
+
- **MCP server.** PAL CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
|
|
8
|
+
- **CLI.** Scripted PAL authoring + publish. `tavus pal list / options / patch`, JSON round-tripping, OS-keychain auth.
|
|
9
9
|
- **Codex skill.** Publishable skill so an external agent can invoke the MCP server and CLI without reading the full Tavus API.
|
|
10
10
|
|
|
11
|
-
## Why standalone (not under
|
|
11
|
+
## Why standalone (not under PAL Maker)
|
|
12
12
|
|
|
13
|
-
The
|
|
13
|
+
The PAL Maker project is the **human** builder — face-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
|
|
14
|
+
|
|
15
|
+
> The Tavus API exposes `/v2/pals` and `/v2/faces` as backwards-compatible
|
|
16
|
+
> vocabulary aliases over `/v2/personas` and `/v2/replicas`. This toolkit speaks
|
|
17
|
+
> the new pal/face vocabulary throughout.
|
|
14
18
|
|
|
15
19
|
## Out of scope (for now)
|
|
16
20
|
|
|
17
|
-
-
|
|
21
|
+
- Face/video preview surfaces (live in the PAL Maker)
|
|
18
22
|
- Marketplace / sharing UX
|
|
19
23
|
- Multi-tenant auth beyond the existing dev-portal token model
|
|
20
24
|
|
|
@@ -37,11 +41,11 @@ Examples:
|
|
|
37
41
|
|
|
38
42
|
```bash
|
|
39
43
|
# Production defaults; only the API key is required.
|
|
40
|
-
TAVUS_API_KEY=... uv run tavus
|
|
44
|
+
TAVUS_API_KEY=... uv run tavus pal list
|
|
41
45
|
|
|
42
46
|
# Test DB without URL overrides.
|
|
43
|
-
TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus
|
|
44
|
-
uv run tavus --env TEST
|
|
47
|
+
TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus pal list
|
|
48
|
+
uv run tavus --env TEST pal list
|
|
45
49
|
```
|
|
46
50
|
|
|
47
51
|
The login flow opens the dev-portal at `/dev/cli-authorize` with a loopback callback URL and an
|
|
@@ -67,9 +71,9 @@ Local development commands:
|
|
|
67
71
|
|
|
68
72
|
```bash
|
|
69
73
|
uv run tavus doctor
|
|
70
|
-
uv run tavus
|
|
71
|
-
uv run tavus
|
|
72
|
-
uv run tavus
|
|
74
|
+
uv run tavus pal list
|
|
75
|
+
uv run tavus pal options <pal_id>
|
|
76
|
+
uv run tavus pal patch <pal_id> --op replace --path /pal_name --value '"New Name"'
|
|
73
77
|
```
|
|
74
78
|
|
|
75
79
|
## MCP
|
|
@@ -164,8 +168,8 @@ OAuth routes yet.
|
|
|
164
168
|
|
|
165
169
|
## Codex Skill
|
|
166
170
|
|
|
167
|
-
A publishable Codex skill for this repo lives at `skills/tavus-agentic-
|
|
168
|
-
It documents the CLI and MCP workflows, safe
|
|
171
|
+
A publishable Codex skill for this repo lives at `skills/tavus-agentic-pals/`.
|
|
172
|
+
It documents the CLI and MCP workflows, safe PAL patching, environment setup,
|
|
169
173
|
and concrete examples for agents using this toolkit.
|
|
170
174
|
|
|
171
175
|
Install it by copying that folder into `${CODEX_HOME:-$HOME/.codex}/skills/`, or
|
|
@@ -86,14 +86,19 @@ after the connector passes Gemini Enterprise's review in `stg`.
|
|
|
86
86
|
|
|
87
87
|
## Scopes
|
|
88
88
|
|
|
89
|
+
> **Naming note.** Tools and API paths use the new **pal/face** vocabulary
|
|
90
|
+
> (`tavus_pal_*`, `/v2/pals`, `/v2/faces`). The OAuth **scope** strings remain
|
|
91
|
+
> `tavus.personas.*` / `tavus.resources.*` — they are an auth-server contract and
|
|
92
|
+
> are intentionally left unchanged until the auth team confirms pal-named scopes.
|
|
93
|
+
|
|
89
94
|
| Scope | Grants |
|
|
90
95
|
| --- | --- |
|
|
91
96
|
| `tavus` | All scopes below (umbrella; default when no scope requested) |
|
|
92
|
-
| `tavus.personas.read` | List, get, and describe
|
|
93
|
-
| `tavus.personas.write` | Create, patch, delete
|
|
97
|
+
| `tavus.personas.read` | List, get, and describe pals + attached resources |
|
|
98
|
+
| `tavus.personas.write` | Create, patch, delete pals; create from templates |
|
|
94
99
|
| `tavus.conversations.read` | (Reserved — read-only conversation tools land in a follow-up) |
|
|
95
100
|
| `tavus.conversations.write` | Create + end conversations; run `tavus_quickstart` |
|
|
96
|
-
| `tavus.resources.read` | List
|
|
101
|
+
| `tavus.resources.read` | List faces, voices, guardrails, objectives, documents, llm tools; scaffold embed code |
|
|
97
102
|
|
|
98
103
|
## Tools → scope → API
|
|
99
104
|
|
|
@@ -102,17 +107,17 @@ forwarded from the bearer token.
|
|
|
102
107
|
|
|
103
108
|
| Tool | Scope | Tavus API path |
|
|
104
109
|
| --- | --- | --- |
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
110
|
+
| `tavus_pal_list` | `tavus.personas.read` | `GET /v2/pals` |
|
|
111
|
+
| `tavus_pal_get` | `tavus.personas.read` | `GET /v2/pals/{id}` |
|
|
112
|
+
| `tavus_describe_pal_options` | `tavus.personas.read` | `GET /v2/pals/{id}` + `GET /v2/{faces,voices,guardrails,objectives,documents,tools}` |
|
|
113
|
+
| `tavus_pal_create` | `tavus.personas.write` | `POST /v2/pals` |
|
|
114
|
+
| `tavus_pal_from_template` | `tavus.personas.write` | `POST /v2/pals` |
|
|
115
|
+
| `tavus_pal_delete` | `tavus.personas.write` | `DELETE /v2/pals/{id}` |
|
|
116
|
+
| `tavus_patch_pal` | `tavus.personas.write` | `PATCH /v2/pals/{id}` |
|
|
112
117
|
| `tavus_conversation_create` | `tavus.conversations.write` | `POST /v2/conversations` |
|
|
113
118
|
| `tavus_conversation_end` | `tavus.conversations.write` | `POST /v2/conversations/{id}/end` |
|
|
114
|
-
| `tavus_quickstart` | `tavus.conversations.write` (+ implicit `tavus.personas.write`) | `POST /v2/
|
|
115
|
-
| `
|
|
119
|
+
| `tavus_quickstart` | `tavus.conversations.write` (+ implicit `tavus.personas.write`) | `POST /v2/pals` + `POST /v2/conversations` |
|
|
120
|
+
| `tavus_face_list` | `tavus.resources.read` | `GET /v2/faces` |
|
|
116
121
|
| `tavus_resource_list` | `tavus.resources.read` | `GET /v2/{guardrails,objectives,documents,voices,tools}` |
|
|
117
122
|
| `tavus_scaffold_embed` | `tavus.resources.read` | none (returns starter HTML/TSX locally) |
|
|
118
123
|
|
|
@@ -123,12 +128,12 @@ should rely on:
|
|
|
123
128
|
|
|
124
129
|
| Annotation | Tools |
|
|
125
130
|
| --- | --- |
|
|
126
|
-
| `readOnlyHint: true` | `
|
|
127
|
-
| `destructiveHint: true` | `
|
|
131
|
+
| `readOnlyHint: true` | `tavus_pal_list`, `tavus_pal_get`, `tavus_describe_pal_options`, `tavus_face_list`, `tavus_resource_list`, `tavus_scaffold_embed` |
|
|
132
|
+
| `destructiveHint: true` | `tavus_pal_delete`, `tavus_patch_pal`, `tavus_conversation_end` |
|
|
128
133
|
| `openWorldHint: false` | `tavus_scaffold_embed` (returns local code, no network) |
|
|
129
134
|
|
|
130
135
|
`idempotentHint: false` is set on every create-style tool that produces a new
|
|
131
|
-
|
|
136
|
+
pal or conversation ID.
|
|
132
137
|
|
|
133
138
|
## Adding the connector in Gemini Enterprise
|
|
134
139
|
|
|
@@ -160,7 +165,7 @@ persona or conversation ID.
|
|
|
160
165
|
| Production | `https://mcp.tavus.io/mcp` | `https://tavusapi.com/v2` | `https://platform.tavus.io` | provided privately |
|
|
161
166
|
|
|
162
167
|
Each env has a dedicated `gemini-enterprise-test@tavus.io` account pre-seeded
|
|
163
|
-
with eval
|
|
168
|
+
with eval pals, faces, and documents. Credentials and the golden query
|
|
164
169
|
set ship out-of-band to the Gemini Enterprise reviewer.
|
|
165
170
|
|
|
166
171
|
## Support
|
|
@@ -6,18 +6,18 @@ intake. Edit here; ship the final values to the Gemini Enterprise admin.
|
|
|
6
6
|
## Short description (≤ 140 chars)
|
|
7
7
|
|
|
8
8
|
> Create, configure, and run Tavus Conversational Video Interface (CVI)
|
|
9
|
-
>
|
|
9
|
+
> pals and conversations from inside Gemini Enterprise.
|
|
10
10
|
|
|
11
11
|
## Long description (1–2 paragraphs)
|
|
12
12
|
|
|
13
13
|
> Tavus is the Conversational Video Interface (CVI) platform powering real-time
|
|
14
|
-
> AI video agents —
|
|
15
|
-
> call. This connector lets a Gemini Enterprise agent author Tavus
|
|
16
|
-
> (prompt,
|
|
14
|
+
> AI video agents — face avatars that hear, see, and respond on a Daily WebRTC
|
|
15
|
+
> call. This connector lets a Gemini Enterprise agent author Tavus pals
|
|
16
|
+
> (prompt, face, voice, knowledge base, guardrails, objectives, perception
|
|
17
17
|
> layers) and spin up live conversations entirely through MCP.
|
|
18
18
|
>
|
|
19
|
-
> Typical agent tasks: "Create a tutor
|
|
20
|
-
> a conversation," "rename
|
|
19
|
+
> Typical agent tasks: "Create a tutor pal for our onboarding flow and start
|
|
20
|
+
> a conversation," "rename pal X and swap its face," "list all pals
|
|
21
21
|
> tagged as customer-support and end any active conversations on them," or
|
|
22
22
|
> "scaffold the React snippet I need to embed conversation Y in our portal."
|
|
23
23
|
> Every write tool declares a destructive hint, every read tool declares a
|
|
@@ -74,7 +74,7 @@ API keys.** Tavus will share them via Google's secure intake channel.
|
|
|
74
74
|
|
|
75
75
|
## Marketplace tags
|
|
76
76
|
|
|
77
|
-
`conversational-video`, `ai-agents`, `webrtc`, `avatars`, `cvi`, `
|
|
77
|
+
`conversational-video`, `ai-agents`, `webrtc`, `avatars`, `cvi`, `pals`,
|
|
78
78
|
`mcp`.
|
|
79
79
|
|
|
80
80
|
## Outstanding before submission
|
|
@@ -84,7 +84,7 @@ API keys.** Tavus will share them via Google's secure intake channel.
|
|
|
84
84
|
mirroring [README.md](./README.md).
|
|
85
85
|
- [ ] Stand up `mcp-connectors@tavus.io` distribution list.
|
|
86
86
|
- [ ] Mint the three `gemini-enterprise-test+<env>@tavus.io` accounts and
|
|
87
|
-
seed each with the
|
|
87
|
+
seed each with the pals/faces listed in
|
|
88
88
|
[test-queries.md](./test-queries.md).
|
|
89
89
|
- [ ] Reserve a final marketing-approved short + long description (the copy
|
|
90
90
|
above is a starting point, not a sign-off).
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Tavus MCP — Gemini Enterprise eval query set
|
|
2
|
+
|
|
3
|
+
This is the "golden" query set Gemini Enterprise's review team runs against
|
|
4
|
+
each test environment. Each query lists the natural-language prompt, the tool
|
|
5
|
+
the agent is expected to call, the expected response shape, and the pass/fail
|
|
6
|
+
criteria.
|
|
7
|
+
|
|
8
|
+
Each test-env Tavus account is pre-seeded with at least:
|
|
9
|
+
|
|
10
|
+
- 3 pals (`customer-support-demo`, `interviewer-demo`, `tutor-demo`)
|
|
11
|
+
- 5 system faces
|
|
12
|
+
- 2 documents
|
|
13
|
+
- 1 guardrail set
|
|
14
|
+
- 1 objective tree
|
|
15
|
+
|
|
16
|
+
Credentials and exact pal/face IDs are delivered out-of-band per
|
|
17
|
+
[README.md → Test environments](./README.md#test-environments).
|
|
18
|
+
|
|
19
|
+
## Tool coverage matrix
|
|
20
|
+
|
|
21
|
+
| # | Query intent | Tool exercised | Scope required |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| 1 | List pals | `tavus_pal_list` | `tavus.personas.read` |
|
|
24
|
+
| 2 | Get a pal | `tavus_pal_get` | `tavus.personas.read` |
|
|
25
|
+
| 3 | Describe pal options | `tavus_describe_pal_options` | `tavus.personas.read` |
|
|
26
|
+
| 4 | Create a pal | `tavus_pal_create` | `tavus.personas.write` |
|
|
27
|
+
| 5 | Create pal from template | `tavus_pal_from_template` | `tavus.personas.write` |
|
|
28
|
+
| 6 | Patch a pal | `tavus_patch_pal` | `tavus.personas.write` |
|
|
29
|
+
| 7 | Delete a pal | `tavus_pal_delete` | `tavus.personas.write` |
|
|
30
|
+
| 8 | List faces | `tavus_face_list` | `tavus.resources.read` |
|
|
31
|
+
| 9 | List voices | `tavus_resource_list` | `tavus.resources.read` |
|
|
32
|
+
| 10 | Scaffold embed code | `tavus_scaffold_embed` | `tavus.resources.read` |
|
|
33
|
+
| 11 | Quickstart end-to-end | `tavus_quickstart` | `tavus.personas.write` + `tavus.conversations.write` |
|
|
34
|
+
| 12 | Create + end a conversation | `tavus_conversation_create`, `tavus_conversation_end` | `tavus.conversations.write` |
|
|
35
|
+
|
|
36
|
+
## Queries
|
|
37
|
+
|
|
38
|
+
### 1 — List pals
|
|
39
|
+
|
|
40
|
+
> "Show me the first ten pals in my Tavus account."
|
|
41
|
+
|
|
42
|
+
- **Expected tool call:** `tavus_pal_list({ "limit": 10 })`
|
|
43
|
+
- **Expected response shape:**
|
|
44
|
+
```jsonc
|
|
45
|
+
{ "data": [ { "pal_id": "p…", "pal_name": "…", "created_at": "…" } ] }
|
|
46
|
+
```
|
|
47
|
+
- **Pass criteria:** `data.length >= 3`; every entry has a `pal_id` and a
|
|
48
|
+
`pal_name`.
|
|
49
|
+
|
|
50
|
+
### 2 — Get a pal
|
|
51
|
+
|
|
52
|
+
> "What's the system prompt on pal `customer-support-demo`?"
|
|
53
|
+
|
|
54
|
+
- **Expected tool call:** `tavus_pal_get({ "pal_id": "<id>", "include_settings": true })`
|
|
55
|
+
- **Pass criteria:** response includes `system_prompt` matching the seed value
|
|
56
|
+
`"You are a warm, concise customer support specialist…"`.
|
|
57
|
+
|
|
58
|
+
### 3 — Describe pal options
|
|
59
|
+
|
|
60
|
+
> "What faces, voices, and guardrails can I attach to pal `customer-support-demo`?"
|
|
61
|
+
|
|
62
|
+
- **Expected tool call:** `tavus_describe_pal_options({ "pal_id": "<id>" })`
|
|
63
|
+
- **Pass criteria:** response includes `available.faces`, `available.voices`,
|
|
64
|
+
`available.guardrails`, and `schemas.patchable_paths`.
|
|
65
|
+
|
|
66
|
+
### 4 — Create a pal
|
|
67
|
+
|
|
68
|
+
> "Create a new pal named `Gemini-eval-create` with the system prompt
|
|
69
|
+
> `You are a Gemini Enterprise eval bot. Answer questions briefly.`"
|
|
70
|
+
|
|
71
|
+
- **Expected tool call:** `tavus_pal_create({ "pal_name": "Gemini-eval-create", "system_prompt": "You are a Gemini Enterprise eval bot…" })`
|
|
72
|
+
- **Pass criteria:** response contains a `pal_id`; a follow-up
|
|
73
|
+
`tavus_pal_get` on that ID returns the same prompt.
|
|
74
|
+
- **Cleanup:** call `tavus_pal_delete` on the returned `pal_id`.
|
|
75
|
+
|
|
76
|
+
### 5 — Create pal from template
|
|
77
|
+
|
|
78
|
+
> "Spin up an interviewer pal biased for a senior backend role."
|
|
79
|
+
|
|
80
|
+
- **Expected tool call:** `tavus_pal_from_template({ "template": "interviewer", "business_context": "Senior backend interview." })`
|
|
81
|
+
- **Pass criteria:** `pal_id` returned; system prompt contains the literal
|
|
82
|
+
string `"Business context:"` followed by the supplied context.
|
|
83
|
+
- **Cleanup:** delete the created pal.
|
|
84
|
+
|
|
85
|
+
### 6 — Patch a pal
|
|
86
|
+
|
|
87
|
+
> "Rename pal `customer-support-demo` to `customer-support-demo-renamed`."
|
|
88
|
+
|
|
89
|
+
- **Expected tool call:** `tavus_patch_pal({ "pal_id": "<id>", "ops": [ { "op": "replace", "path": "/pal_name", "value": "customer-support-demo-renamed" } ] })`
|
|
90
|
+
- **Pass criteria:** subsequent `tavus_pal_get` returns the new name.
|
|
91
|
+
- **Cleanup:** patch the name back to `customer-support-demo`.
|
|
92
|
+
|
|
93
|
+
### 7 — Delete a pal
|
|
94
|
+
|
|
95
|
+
> "Delete pal `<temp-id>`." (use the pal created in query 4)
|
|
96
|
+
|
|
97
|
+
- **Expected tool call:** `tavus_pal_delete({ "pal_id": "<id>" })`
|
|
98
|
+
- **Pass criteria:** subsequent `tavus_pal_get` returns 404.
|
|
99
|
+
|
|
100
|
+
### 8 — List faces
|
|
101
|
+
|
|
102
|
+
> "What stock faces are available?"
|
|
103
|
+
|
|
104
|
+
- **Expected tool call:** `tavus_face_list({ "stock": true })`
|
|
105
|
+
- **Pass criteria:** `data.length >= 5`; each entry has a `face_id` and a
|
|
106
|
+
`face_name`.
|
|
107
|
+
|
|
108
|
+
### 9 — List voices
|
|
109
|
+
|
|
110
|
+
> "Show me 25 voices on the account."
|
|
111
|
+
|
|
112
|
+
- **Expected tool call:** `tavus_resource_list({ "resource": "voices", "limit": 25 })`
|
|
113
|
+
- **Pass criteria:** `data` is an array of objects with `voice_id` (or
|
|
114
|
+
equivalent ID field).
|
|
115
|
+
|
|
116
|
+
### 10 — Scaffold embed code
|
|
117
|
+
|
|
118
|
+
> "Give me the React iframe snippet for conversation
|
|
119
|
+
> `https://tavus.daily.co/example`."
|
|
120
|
+
|
|
121
|
+
- **Expected tool call:** `tavus_scaffold_embed({ "conversation_url": "https://tavus.daily.co/example", "target": "iframe" })`
|
|
122
|
+
- **Pass criteria:** response contains a `files[0].content` string with the
|
|
123
|
+
conversation URL embedded inside an `<iframe>` tag.
|
|
124
|
+
|
|
125
|
+
### 11 — Quickstart end-to-end
|
|
126
|
+
|
|
127
|
+
> "Make me a tutor pal that explains gradient descent and start a
|
|
128
|
+
> conversation with it."
|
|
129
|
+
|
|
130
|
+
- **Expected tool call:** `tavus_quickstart({ "system_prompt": "<tutor prompt>", "pal_name": "Gradient descent tutor" })`
|
|
131
|
+
- **Pass criteria:** response contains both `pal.pal_id` and
|
|
132
|
+
`conversation.conversation_id`, plus a `conversation_url` on the
|
|
133
|
+
conversation object.
|
|
134
|
+
- **Cleanup:** call `tavus_conversation_end` on the conversation, then
|
|
135
|
+
`tavus_pal_delete` on the pal.
|
|
136
|
+
|
|
137
|
+
### 12 — Create + end a conversation
|
|
138
|
+
|
|
139
|
+
> "Create a conversation with pal `customer-support-demo`."
|
|
140
|
+
|
|
141
|
+
- **Expected tool call:** `tavus_conversation_create({ "pal_id": "<id>" })`
|
|
142
|
+
- **Pass criteria:** response contains a `conversation_id` and a
|
|
143
|
+
`conversation_url`.
|
|
144
|
+
|
|
145
|
+
> "End that conversation."
|
|
146
|
+
|
|
147
|
+
- **Expected tool call:** `tavus_conversation_end({ "conversation_id": "<id>" })`
|
|
148
|
+
- **Pass criteria:** 2xx response; a subsequent `tavus_conversation_create`
|
|
149
|
+
against the same pal succeeds (i.e. the pal is not locked).
|
|
150
|
+
|
|
151
|
+
## Failure handling
|
|
152
|
+
|
|
153
|
+
For every query, Gemini Enterprise's tester should:
|
|
154
|
+
|
|
155
|
+
- Confirm the bearer token survives in `Authorization: Bearer …` on every
|
|
156
|
+
follow-up MCP call.
|
|
157
|
+
- Confirm the tool's `annotations.destructiveHint` matches the spec table in
|
|
158
|
+
the [README](./README.md#tool-annotations) — destructive tools should prompt
|
|
159
|
+
the user before invocation.
|
|
160
|
+
- Capture any non-2xx Tavus API response in the eval log; Tavus support will
|
|
161
|
+
triage based on the embedded `status` + `body` fields.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tavus-cli"
|
|
3
|
-
version = "0.
|
|
4
|
-
description = "Tavus CLI and MCP server for agentic
|
|
3
|
+
version = "0.2.0"
|
|
4
|
+
description = "Tavus CLI and MCP server for agentic PAL creation and editing."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tavus-agentic-pals
|
|
3
|
+
description: Use when Codex needs to create, inspect, edit, test, or embed Tavus pals with the tavus CLI or tavus-mcp MCP server. Covers local TEST/STG/PROD environment selection, dev-portal-style Firebase login, API-key storage, safe pal patching, account resource discovery, conversation creation, embed scaffolding, and CLI/MCP examples.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tavus Agentic PALs
|
|
7
|
+
|
|
8
|
+
## Operating Model
|
|
9
|
+
|
|
10
|
+
Use the `tavus` CLI when working in a local shell, debugging auth/env problems, validating patches, or producing reproducible commands for a human. Use the `tavus-mcp` MCP server when an agent host can call MCP tools directly and should create or edit Tavus resources through structured tool calls.
|
|
11
|
+
|
|
12
|
+
Do not invent Tavus IDs. Discover faces, voices, guardrails, objectives, documents, and tools before attaching them to a pal. Do not delete pals or end conversations unless the user explicitly asks for that destructive action.
|
|
13
|
+
|
|
14
|
+
For richer examples, read `references/examples.md`. For driving the new conversational pal builder (autocomplete, scoped LLM patches, publish), read `references/builder-workflow.md`. For driving a pal end-to-end through text (no daily.co/video — ideal for fast regression tests), read `references/chat-mode.md`. For the fully autonomous build-and-verify loop that chats with the builder *and* judges the result against CVI in one tool call, read `references/build-and-verify.md`.
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
|
|
18
|
+
From the `tavus-mcp` repo:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
uv sync --extra dev
|
|
22
|
+
cp .env.example .env
|
|
23
|
+
uv run tavus doctor --skip-network
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The default environment is `PROD`. To switch to the test DB, set `TAVUS_ENV=TEST`
|
|
27
|
+
in `.env` / the shell or pass `--env TEST` to the CLI. Explicit
|
|
28
|
+
`TAVUS_PUBLIC_API_BASE_URL` and `TAVUS_PORTAL_API_BASE_URL` always win.
|
|
29
|
+
|
|
30
|
+
Authentication options:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
uv run tavus auth login
|
|
34
|
+
uv run tavus auth status
|
|
35
|
+
uv run tavus auth logout
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`auth login` mirrors dev-portal login: Firebase popup sign-in, `/v3/users/me` developer validation, `/v3/users/update-metadata`, `/v2/api-key`, then env-scoped keyring storage. For noninteractive automation, set `TAVUS_API_KEY` or `TAVUS_<ENV>_API_KEY`.
|
|
39
|
+
|
|
40
|
+
## CLI Workflow
|
|
41
|
+
|
|
42
|
+
Start every live workflow with:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
uv run tavus doctor
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For greenfield work:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv run tavus face list --stock --limit 5
|
|
52
|
+
uv run tavus pal create \
|
|
53
|
+
--name "Support Concierge" \
|
|
54
|
+
--system-prompt "You are a concise support concierge..."
|
|
55
|
+
uv run tavus conversation create --pal-id p123 --face-id r456
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For existing pal edits:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
uv run tavus pal get p123 --include-settings
|
|
62
|
+
uv run tavus pal options p123
|
|
63
|
+
uv run tavus pal paths
|
|
64
|
+
uv run tavus pal patch p123 \
|
|
65
|
+
--path /pal_name \
|
|
66
|
+
--value '"Support Concierge v2"' \
|
|
67
|
+
--dry-run
|
|
68
|
+
uv run tavus pal patch p123 \
|
|
69
|
+
--path /pal_name \
|
|
70
|
+
--value '"Support Concierge v2"'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Use `--dry-run` before applying manual JSON Patch operations. For multi-operation patches, write a JSON array and pass `--patch-file patch.json`.
|
|
74
|
+
|
|
75
|
+
## MCP Setup
|
|
76
|
+
|
|
77
|
+
Configure the MCP host to run the server from the repo:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"mcpServers": {
|
|
82
|
+
"tavus": {
|
|
83
|
+
"command": "uv",
|
|
84
|
+
"args": ["run", "--directory", "/path/to/tavus-mcp", "tavus-mcp"]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The MCP server reads the same `.env` and keyring as the CLI.
|
|
91
|
+
|
|
92
|
+
## MCP Tool Map
|
|
93
|
+
|
|
94
|
+
PAL tools:
|
|
95
|
+
|
|
96
|
+
- `tavus_pal_list(limit, page, pal_type)`
|
|
97
|
+
- `tavus_pal_get(pal_id, include_settings)`
|
|
98
|
+
- `tavus_pal_create(system_prompt, pal_name, default_face_id)`
|
|
99
|
+
- `tavus_pal_delete(pal_id)`
|
|
100
|
+
- `tavus_patch_pal(pal_id, ops)`
|
|
101
|
+
- `tavus_describe_pal_options(pal_id)`
|
|
102
|
+
- `tavus_pal_from_template(template, pal_name, business_context, default_face_id, layers)`
|
|
103
|
+
|
|
104
|
+
Conversation and resource tools:
|
|
105
|
+
|
|
106
|
+
- `tavus_face_list(limit, stock)`
|
|
107
|
+
- `tavus_conversation_create(pal_id, face_id, conversation_name)`
|
|
108
|
+
- `tavus_conversation_end(conversation_id)`
|
|
109
|
+
- `tavus_quickstart(system_prompt, pal_name, face_id)`
|
|
110
|
+
- `tavus_resource_list(resource, limit)` for `guardrails`, `objectives`, `documents`, `voices`, or `tools`
|
|
111
|
+
- `tavus_scaffold_embed(conversation_url, target, component_name)`
|
|
112
|
+
|
|
113
|
+
`tavus_scaffold_embed` returns a file manifest. The MCP host agent writes files if the user wants files created.
|
|
114
|
+
|
|
115
|
+
Conversational builder tools (mirrors the dev-portal creator-studio UI):
|
|
116
|
+
|
|
117
|
+
- `tavus_builder_create(name, greeting?, pal_id?, model?)`
|
|
118
|
+
- `tavus_builder_list(limit?, page?, pal_id?, name?, status?)`
|
|
119
|
+
- `tavus_builder_get(builder_id)` / `tavus_builder_delete(builder_id)`
|
|
120
|
+
- `tavus_builder_chat(builder_id, message)` — returns `{text, suggestions, draft_ready, targets}`
|
|
121
|
+
- `tavus_builder_chat_history(builder_id, limit)`
|
|
122
|
+
- `tavus_builder_append_messages(builder_id, messages)`
|
|
123
|
+
- `tavus_builder_update_objectives|guardrails|greeting|personality(builder_id, message, ...)`
|
|
124
|
+
- `tavus_builder_publish(builder_id)`
|
|
125
|
+
|
|
126
|
+
Chat-mode (text-only pal testing) and preview:
|
|
127
|
+
|
|
128
|
+
- `tavus_chat_start(pal_id, custom_greeting?, conversation_name?)`
|
|
129
|
+
- `tavus_chat_turn(conversation_id, text, timeout_s?)` — one round-trip, returns `{text}`
|
|
130
|
+
- `tavus_chat_end(conversation_id)`
|
|
131
|
+
- `tavus_pal_preview(pal_id, face_id?, conversation_name?)` — returns `{conversation_id, conversation_url}` for handoff to a human
|
|
132
|
+
|
|
133
|
+
Autonomous build + verify (one call drives the full loop):
|
|
134
|
+
|
|
135
|
+
- `tavus_pal_build_and_verify(prompt, face_id?, max_rounds?, answers?)` — opens a builder session, converses with it through RQH's inner driver until `draft_ready` or `max_rounds`, publishes, asks RQH to select/attach a default face when `face_id` is omitted, runs a CVI text-mode smoke test, and returns a judge verdict over objectives/guardrails/knowledge base/tools. The builder driver, face selection, probe generator, and judge run on RQH — no client-side LLM key required.
|
|
136
|
+
|
|
137
|
+
## Safe PAL Editing
|
|
138
|
+
|
|
139
|
+
Before patching an existing pal, call `tavus_describe_pal_options` or `tavus pal options`. Use its `available` resources and `schemas.patchable_paths` output to choose valid IDs and patch paths.
|
|
140
|
+
|
|
141
|
+
Prefer focused patches over full rebuilds:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
[
|
|
145
|
+
{"op": "replace", "path": "/pal_name", "value": "Support Concierge v2"},
|
|
146
|
+
{"op": "replace", "path": "/layers/conversational_flow/active_listening", "value": true},
|
|
147
|
+
{"op": "replace", "path": "/guardrails_id", "value": "grd_123"}
|
|
148
|
+
]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Common patch targets include `/system_prompt`, `/greeting`, `/context`, `/pal_name`, `/default_face_id`, `/objectives_id`, `/guardrails_id`, `/document_ids`, `/document_tags`, and nested layer paths under `/layers/llm`, `/layers/tts`, `/layers/stt`, `/layers/perception`, `/layers/conversational_flow`, `/layers/capabilities`, and `/layers/knowledge_base`.
|
|
152
|
+
|
|
153
|
+
## Creation Patterns
|
|
154
|
+
|
|
155
|
+
Use `tavus_quickstart` or `uv run tavus quickstart` when the user wants a pal plus a conversation quickly. It uses the first stock face unless a face ID is provided.
|
|
156
|
+
|
|
157
|
+
Use `tavus_pal_from_template` when the user asks for a common archetype. Supported templates are `customer-support`, `interviewer`, `sales`, `tutor`, and `dev-rel`.
|
|
158
|
+
|
|
159
|
+
Use `tavus_pal_create` or `uv run tavus pal create` for precise custom prompts.
|
|
160
|
+
|
|
161
|
+
Use the **conversational builder** when the user wants to *iterate* on a pal — talk to the builder, accept autocomplete suggestions, let the builder LLM scope which sections to re-draft, then publish. See `references/builder-workflow.md` for the full loop. The tight iteration pattern looks like:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
uv run tavus builder create --name "Market Researcher" --model claude-sonnet-4-6
|
|
165
|
+
uv run tavus builder chat <bid> --message "B2B SaaS, mid-market, founder-led"
|
|
166
|
+
uv run tavus builder update personality <bid> --message "make the tone more direct" --system-prompt
|
|
167
|
+
uv run tavus builder publish <bid>
|
|
168
|
+
# A freshly built pal usually has no default_face_id. Attach one before testing.
|
|
169
|
+
uv run tavus face list --stock --limit 1 --json # grab a stock face_id
|
|
170
|
+
uv run tavus pal patch <pid> --path /default_face_id --value '"<face_id>"'
|
|
171
|
+
uv run tavus chat start --pal-id <pid>
|
|
172
|
+
uv run tavus chat turn <cid> --message "describe your research process"
|
|
173
|
+
uv run tavus pal preview <pid> # prints conversation_url to hand to the user
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
When the agent wants the **whole loop** (build → publish → test → judge) in one shot, use the autonomous tool — see `references/build-and-verify.md`:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
uv run tavus pal build \
|
|
180
|
+
--prompt "Friendly DevRel pal for a Postgres extension company" \
|
|
181
|
+
--max-rounds 4 --json
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Gotchas worth knowing:
|
|
185
|
+
|
|
186
|
+
- The `--model` flag takes the exact `BuilderLLM` enum string — currently `claude-sonnet-4-6` or `gpt-oss-120b`. Shorthand like `claude` / `openai` is rejected by RQH validation.
|
|
187
|
+
- Standalone `tavus builder publish` pals may land with `default_face_id=""`; attach one before manual `tavus_chat_start` / preview. The autonomous `tavus pal build` command asks RQH to select one automatically unless you pass `--face-id`.
|
|
188
|
+
|
|
189
|
+
The agent loop: edit → `tavus_chat_*` to test → patch via `tavus_builder_update_*` or `tavus_patch_pal` to refine → `tavus_pal_preview` when ready for visual confirmation.
|
|
190
|
+
|
|
191
|
+
## Validation
|
|
192
|
+
|
|
193
|
+
Use these checks after changing this repo or before claiming the tool is healthy:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
uv run ruff check .
|
|
197
|
+
uv run pytest -q
|
|
198
|
+
uv run python -m compileall -q src tests
|
|
199
|
+
uv build
|
|
200
|
+
uv run tavus doctor
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
For read-only live smoke, prefer:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
uv run tavus pal list --limit 1 --json
|
|
207
|
+
uv run tavus face list --stock --limit 1 --json
|
|
208
|
+
```
|