tavus-cli 0.1.0__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.
Files changed (79) hide show
  1. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/PKG-INFO +20 -16
  2. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/README.md +18 -14
  3. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/docs/gemini-enterprise/README.md +21 -16
  4. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/docs/gemini-enterprise/listing.md +8 -8
  5. tavus_cli-0.2.0/docs/gemini-enterprise/test-queries.md +161 -0
  6. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/pyproject.toml +2 -2
  7. tavus_cli-0.2.0/skills/tavus-agentic-pals/SKILL.md +208 -0
  8. tavus_cli-0.2.0/skills/tavus-agentic-pals/agents/openai.yaml +4 -0
  9. {tavus_cli-0.1.0/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/build-and-verify.md +27 -27
  10. {tavus_cli-0.1.0/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/builder-workflow.md +37 -37
  11. {tavus_cli-0.1.0/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/chat-mode.md +19 -19
  12. {tavus_cli-0.1.0/skills/tavus-agentic-personas → tavus_cli-0.2.0/skills/tavus-agentic-pals}/references/examples.md +23 -23
  13. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/__init__.py +1 -1
  14. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/cli/main.py +115 -112
  15. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/client/http.py +14 -14
  16. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/patch.py +3 -3
  17. tavus_cli-0.2.0/src/tavus_mcp/sdk/recipes/__init__.py +6 -0
  18. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/build_and_verify.py +83 -71
  19. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/options.py +13 -13
  20. tavus_cli-0.2.0/src/tavus_mcp/sdk/recipes/quickstart.py +50 -0
  21. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/templates.py +9 -9
  22. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/tool_reuse.py +4 -4
  23. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/__init__.py +5 -5
  24. tavus_cli-0.1.0/src/tavus_mcp/sdk/schemas/persona.py → tavus_cli-0.2.0/src/tavus_mcp/sdk/schemas/pal.py +8 -8
  25. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/server.py +101 -96
  26. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/integration/test_cli.py +6 -6
  27. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/integration/test_client.py +32 -32
  28. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/integration/test_mcp_server.py +3 -3
  29. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_build_and_verify.py +57 -49
  30. tavus_cli-0.1.0/tests/unit/test_persona_schema.py → tavus_cli-0.2.0/tests/unit/test_pal_schema.py +14 -14
  31. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_patch.py +5 -5
  32. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_tool_reuse.py +2 -2
  33. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/uv.lock +688 -686
  34. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/src/tavus.ts +101 -98
  35. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/test/tavus.test.ts +8 -8
  36. tavus_cli-0.1.0/docs/gemini-enterprise/test-queries.md +0 -161
  37. tavus_cli-0.1.0/skills/tavus-agentic-personas/SKILL.md +0 -208
  38. tavus_cli-0.1.0/skills/tavus-agentic-personas/agents/openai.yaml +0 -4
  39. tavus_cli-0.1.0/src/tavus_mcp/sdk/recipes/__init__.py +0 -6
  40. tavus_cli-0.1.0/src/tavus_mcp/sdk/recipes/quickstart.py +0 -48
  41. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.env.example +0 -0
  42. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.github/workflows/ci.yml +0 -0
  43. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.github/workflows/deploy-cloudflare-worker.yml +0 -0
  44. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.github/workflows/pr-reviews.yml +0 -0
  45. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.github/workflows/pypi-cli.yml +0 -0
  46. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/.gitignore +0 -0
  47. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/cli/__init__.py +0 -0
  48. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/__init__.py +0 -0
  49. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
  50. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
  51. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
  52. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/auth/session.py +0 -0
  53. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/client/__init__.py +0 -0
  54. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/env.py +0 -0
  55. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/errors.py +0 -0
  56. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
  57. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
  58. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
  59. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
  60. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
  61. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
  62. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/conftest.py +0 -0
  63. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/integration/test_oauth.py +0 -0
  64. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_auth.py +0 -0
  65. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_builder.py +0 -0
  66. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_conversation_chat.py +0 -0
  67. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_env.py +0 -0
  68. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_guardrail_schema.py +0 -0
  69. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_objective_schema.py +0 -0
  70. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_pronunciation_schema.py +0 -0
  71. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_scaffold_embed.py +0 -0
  72. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/tests/unit/test_tool_schema.py +0 -0
  73. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/.dev.vars.example +0 -0
  74. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/package-lock.json +0 -0
  75. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/package.json +0 -0
  76. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/src/index.ts +0 -0
  77. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/src/oauth.ts +0 -0
  78. {tavus_cli-0.1.0 → tavus_cli-0.2.0}/workers/tavus-mcp/tsconfig.json +0 -0
  79. {tavus_cli-0.1.0 → 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.1.0
4
- Summary: Tavus CLI and MCP server for agentic persona creation and editing.
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 persona creation end-to-end — separate from the human-facing Conversational Persona Builder.
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.** Persona 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 persona authoring + publish. `tavus persona list / options / patch`, JSON round-tripping, OS-keychain auth.
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 Conversational Persona Builder)
31
+ ## Why standalone (not under PAL Maker)
32
32
 
33
- The CPB project is the **human** builder — replica-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.
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
- - Replica/video preview surfaces (lives in CPB)
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 persona list
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 persona list
64
- uv run tavus --env TEST persona list
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 persona list
91
- uv run tavus persona options <persona_id>
92
- uv run tavus persona patch <persona_id> --op replace --path /persona_name --value '"New Name"'
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-personas/`.
188
- It documents the CLI and MCP workflows, safe persona patching, environment setup,
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 persona creation end-to-end — separate from the human-facing Conversational Persona Builder.
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.** Persona 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 persona authoring + publish. `tavus persona list / options / patch`, JSON round-tripping, OS-keychain auth.
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 Conversational Persona Builder)
11
+ ## Why standalone (not under PAL Maker)
12
12
 
13
- The CPB project is the **human** builder — replica-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.
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
- - Replica/video preview surfaces (lives in CPB)
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 persona list
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 persona list
44
- uv run tavus --env TEST persona list
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 persona list
71
- uv run tavus persona options <persona_id>
72
- uv run tavus persona patch <persona_id> --op replace --path /persona_name --value '"New Name"'
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-personas/`.
168
- It documents the CLI and MCP workflows, safe persona patching, environment setup,
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 personas + attached resources |
93
- | `tavus.personas.write` | Create, patch, delete personas; create from templates |
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 replicas, voices, guardrails, objectives, documents, llm tools; scaffold embed code |
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
- | `tavus_persona_list` | `tavus.personas.read` | `GET /v2/personas` |
106
- | `tavus_persona_get` | `tavus.personas.read` | `GET /v2/personas/{id}` |
107
- | `tavus_describe_persona_options` | `tavus.personas.read` | `GET /v2/personas/{id}` + `GET /v2/{replicas,voices,guardrails,objectives,documents,tools}` |
108
- | `tavus_persona_create` | `tavus.personas.write` | `POST /v2/personas` |
109
- | `tavus_persona_from_template` | `tavus.personas.write` | `POST /v2/personas` |
110
- | `tavus_persona_delete` | `tavus.personas.write` | `DELETE /v2/personas/{id}` |
111
- | `tavus_patch_persona` | `tavus.personas.write` | `PATCH /v2/personas/{id}` |
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/personas` + `POST /v2/conversations` |
115
- | `tavus_replica_list` | `tavus.resources.read` | `GET /v2/replicas` |
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` | `tavus_persona_list`, `tavus_persona_get`, `tavus_describe_persona_options`, `tavus_replica_list`, `tavus_resource_list`, `tavus_scaffold_embed` |
127
- | `destructiveHint: true` | `tavus_persona_delete`, `tavus_patch_persona`, `tavus_conversation_end` |
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
- persona or conversation ID.
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 personas, replicas, and documents. Credentials and the golden query
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
- > personas and conversations from inside Gemini Enterprise.
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 — replica avatars that hear, see, and respond on a Daily WebRTC
15
- > call. This connector lets a Gemini Enterprise agent author Tavus personas
16
- > (prompt, replica, voice, knowledge base, guardrails, objectives, perception
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 persona for our onboarding flow and start
20
- > a conversation," "rename persona X and swap its replica," "list all personas
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`, `personas`,
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 personas/replicas listed in
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.1.0"
4
- description = "Tavus CLI and MCP server for agentic persona creation and editing."
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
+ ```
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Tavus Agentic PALs"
3
+ short_description: "Build Tavus pals with the tavus CLI and MCP server."
4
+ default_prompt: "Use the Tavus Agentic PALs skill to create or edit a Tavus pal through the tavus CLI or tavus-mcp MCP server."