[4.0.2] - 2026-11-05
Added
- The chat widget lets the AI agent in a visitor's browser talk to your agent
over WebMCP (document.modelContext; in Chrome behind a flag today). On
every page it's on, the widget registers anask_agenttool described with
the agent's name. A call starts the widget's conversation if there is none
yet, as one an agent holds for the customer (customer_represented_by_an_agent),
sends the question through the chat, so it shows there with the reply, opens
the chat, and answers the browser agent once the turn has ended. Follow-up
calls continue the same conversation. The message carries
metadata.parlant_widget.asked_by = "customer_agent", so the chat and your
tools can tell the visitor's agent from the visitor. Nothing happens in a
browser without WebMCP;webmcp={false}turns it off.ParlantTransport's
sendMessagetakes an optional metadata argument andensureSessionan
option for the flag. Server(session_store=..., customer_store=...)accepts ans3://bucket
URL to keep sessions and customers in Amazon S3. Give Parlant a bucket of
its own. Credentials come from the AWS credential chain; add?region=or,
for S3-compatible storage,?endpoint=. The storage must support
conditional writes, which keep concurrent servers from overwriting each
other's updates. Empty collections survive restarts, and a failed migration
write leaves the original data in place. Any query other than a lookup by ID,
such as listing sessions, reads every object in the collection, so use
MongoDB if you need indexed queries at scale.- The chat widget (
parlant widget init) takes the agent's picture in one
avatarprop:{ type: "logo", src },{ type: "photo", src, live? }or
{ type: "video", src?, poster?, live?, launcher? }. A video avatar plays a
short muted loop under the header, scrolls away with the conversation once
it starts, and keeps its opened size when the chat is expanded. On the closed
launcher,launchercrops it onto the face. Leave outsrcto use the
widget's own video of an agent.liveadds the green dot, on the video's
corner too, red while the server can't be reached. Use an H.264 MP4 saved
with-movflags +faststart; iPhone Safari stalls on WebM.
Changed
- The chat widget's persistent suggestions stand out from its opening ones:
outlined and lettered in the theme's primary color on the chat's background,
instead of the grey fill. - On phones and tablets, the chat widget closes the on-screen keyboard once a
message is sent, whether typed or picked from the suggestions, so the reply
isn't hidden behind it. - With the LiteLLM provider, review routes now default to
gemini/gemini-3.8-flashinstead ofgemini/gemini-3.6-flash, the same
model the Gemini provider already uses for them. - The
lead-genscaffold's agent no longer guesses when a visitor asks about
the business, its products or their project and its product knowledge has no
answer. It says it's a great question but hard to answer properly in the
chat, offers to connect them with the team, asks for an email or phone
number, and passes the question on withrequest_team_follow_up. Unrelated
questions, existing customers' order questions and prices are handled as
before. To make that possible,record_leadnow accepts a lead with just a
goal and a contact:buying_forandroleare optional, and an unknown one
scores nothing. parlant dashboard project confirmfinishes a local or self-hosted project
even when its server already holds sessions, such as from trying the agent.
It imports them into the dashboard first, as the dashboard's Sync does, and
then completes the setup, so the project no longer stays at "Finish setup".
An import that takes longer than about 90 seconds stops with
SYNC_IN_PROGRESS; runconfirmagain to keep waiting for the same import.
A failed import stops withSYNC_FAILEDand its reason.parlant init --dashboard --jsonandparlant dashboard project create --json
for a local or self-hosted project now listnextSteps, ending with
project confirm. The scaffoldedAGENTS.mdtells coding agents to confirm
the project once its server is connected.- After creating a managed project whose setup check found how to run it,
parlant dashboard project createnow points to
parlant dashboard --project ID deploy: the first live deploy completes the
setup. The dashboard's setup page is optional for reviewing the settings.
Deprecated
- The chat widget's
avatarUrl,avatarStyleandliveIndicatorprops, in
favor ofavatar. They still work whenavatarisn't set.
Fixed
- Gemini Argon can replay saved tool calls with their original signed thought
blocks instead of unnecessarily falling back to result-only history. - Filtering sessions by labels now returns complete pages and working
continuation cursors, with consistent total counts in either sort order. - MongoDB cursor pagination now preserves
$orfilters on later pages, so
filtered listings no longer include records outside the requested set. - Canned responses now retain separate search vectors for their text and
every signal, so signals no longer collide in the relevance index.
Applies when responses are created or updated; existing indexes are not
rebuilt automatically. - On iPhone, focusing the chat widget's message box no longer zooms the page
in, which pushed the open chat off the right edge of the screen. The box
uses a 16px font on touch screens, the size below which iOS zooms. - Local and MCP tools now accept comma-separated list arguments without
brackets while preserving quoted commas and empty lists. - The chat widget's latest message no longer slips under the suggestions and
message box when something takes the transcript's space, such as the
"Connection interrupted" banner appearing just after a send. The transcript
stayed pinned to the bottom only as messages grew, not as its view shrank. - Invalid context-variable freshness schedules are rejected before saving,
so a failed schedule update leaves the variable's existing data intact. - A customer message that arrives while the agent is still working on the
previous one now replaces that turn, as intended, even when the engine was in
the middle of rejecting a step: a tool call or message turned down by a
review hook, by the reviewer, or by moderation. Before, the rejection restarted
the step and dropped the pending cancellation, so the agent finished replying
to the first message and then answered the second one in a separate turn.
Customers who send two messages in quick succession now get one reply that
takes both into account.
Security
- Raise the minimum
python-multipartversion to 0.0.30 for both uv
and pip installations, preventing installation of versions affected by
CVE-2026-53539.
[4.0.1] - 2026-11-02
Changed
parlant init --scaffold lead-gennow creates its agent with
preamble_config=p.PreambleConfiguration.encourage(). Before its first tool
call the agent says one short line, such as "Let me check that", so the
visitor isn't left waiting in silence. Without it, preambles were unmanaged:
whatever the model wrote before a tool call went straight through.- Every tool in the
lead-genandretail-storescaffolds now has a
narration, such as "Checking which days are free" or "Tracking your
shipment". The chat shows it while the tool runs, instead of the generic
"Running tools".
Fixed
- With the Anthropic provider, indexing no longer fails on Claude Opus 4.7 and
later or any Claude 5 model, including the default routes (Sonnet 5.5 and
Haiku 5.5). Parlant sent atemperature, which those models reject with
"temperatureis deprecated for this model."; it now sends one only to
Claude 3 models and Claude 4 models up to 4.6, which still accept it. - A reasoning effort on a Claude Fable model now uses adaptive thinking instead
of a thinking budget, which Fable rejects. - A reasoning effort on Claude Opus 4.5 no longer fails. Parlant sent it
adaptive thinking, which it rejects ("adaptive thinking is not supported on
this model"); it now gets a thinking budget, as Sonnet and Haiku 4.5 do.
[4.0.0] - 2026-11-02
Parlant 4 release.