Repository navigation
Polyant v1.2.0
Polyant v1.2.0
Polyant v1.2.0 moves product behaviour to the scope that owns it: installation
policies are editable by platform admins, agent behaviour is configurable per
agent, and attachment storage uses each agent's bucket. It makes the core
runtime leaner by moving integration-heavy tool families into build-time
plugins, receives Telegram and Slack through webhooks, and runs on Node 24.
That cleanup is deliberately breaking: the environment variables that set
product behaviour are gone, extracted tools need their plugins installed and
take namespaced names, storing inbound attachments becomes a per-agent opt-in
with the agent's own access keys, and a new agent starts with its Web channel
off and requires its API key.
Read docs/UPGRADING.md before starting. Extracted
tools need their plugins, agents that should keep users' files need access
keys and Store attachments turned on, Telegram and Slack need a public
address, scripts that create agents must enable their Web channel, and
non-default values of the removed variables have to be entered in the panel.
Highlights
- A guided first access. A new user gets a guided setup (provider and key,
model, agent, a test chat in the Playground, channels and the agent key,
optional knowledge) and then an interface tour; the first visit to an agent's
page offers a tour of its sections. Each step can be skipped, the Help menu
reopens them, and the state is stored per user so it follows the person
across devices. Accounts that exist at the upgrade start with it dismissed. - Settings live at the right tier. Settings → General holds the
installation's operational policies: analytics retention, the engine's public
address, live-stream caps, rate limits, agent-to-agent and MCP timeouts, and
scheduler deadlines. Each agent can set its timezone, locale, memory
deduplication and message timing, and knowledge-document caps can vary by
organization. The shipped defaults are unchanged. - A smaller core, with build-time plugins. GitHub, Render, HubSpot and
Markdown-to-PDF tools moved to plugins, so the base image no longer carries
their optional binaries and libraries. A plugin can declare its Alpine, global
npm and environment requirements, and the Docker build installs their union.
fileUploadfollows them into the extra plugin. HubSpot lives in
polyant-hubspot-plugin
(v1.1.1), Markdown-to-PDF andfileUploadin
polyant-extra-plugin
(v1.1.0); no plugin is shipped for GitHub and Render. Manifests can also name the
plugin and describe the parameters its tools ask for, and the panel shows
them. - Telegram and Slack through webhooks. Both channels now arrive like
WhatsApp, on/webhooks/*, and the Telegram webhook survives rolling
deploys. A failed Telegram registration is retried instead of disabling the
channel, redelivered updates and events are dropped, and each bot's webhooks
are rate limited on their own. The CDK stack routes webhook and HTTP-channel
traffic to the engine without the panel's sign-in. - Web chat context.
chat/streamand/v1/chat/completionsaccept a
contextobject projected onto the conversation state through a per-agent
field mapping, so a web or voice front end can hand tools and hooks the
caller's identity. An agent that maps a context field requires its key on
every web turn. On both routes, a client that disconnects before the turn
produced anything aborts it, and a turn that has produced output runs to its
end and is saved. - A clearer agent page. Tools and hooks open in side sheets with the
parameters they declare, conversations can be followed live on any channel,
activity reads as a timeline and now includes tool calls, and the page says
what a capability still needs before it works. - Secure defaults for new agents. Web is a channel: an agent's public HTTP
endpoints answer only while its Web channel is on, and a new agent starts
with it off and requires its API key. Existing agents keep their endpoint and
their authentication setting. The panel's Playground has its own
session-based route and theagent.playground:usepermission, held by every
built-in role, so it works with Web off and needs no key. A fresh install no
longer seeds ademo-agentwithout authentication. - API keys from the panel. An organization Owner issues and revokes
management API keys under API keys, sopolyant-cliand scripts can call
the management API of an OSS deployment withX-Polyant-Key. A key holds the
Owner permission set, can expire, is shown once, and cannot issue or revoke
keys itself. - Updated models and gateway. OpenAI gpt-6, Claude Opus 5, Opus 5.5,
Sonnet 5.5, Haiku 5.5 and Fable 5.1, and new Nebius models are in the
catalog, with corrected prices. Claude Haiku 5.5, GPT-5.4, GPT-5.6 and GPT-6
are priced by prompt length, so a call with a long prompt is recorded at the
provider's higher rates. Providers and embedders can be registered at boot,
and switching thinking off now really switches it off. - Bedrock works without Anthropic approval. The default standard tier uses
Amazon Nova Pro and the heavy tier uses OpenAI gpt-oss 120B. Nova retains
system-prompt caching while avoiding unsupported cache markers on tool
messages. - One bucket per agent, and attachments kept only by choice. Attachment
persistence andextra:fileUploadshare one per-agent S3 configuration,
set on the agent's Advanced page and reached with the agent's own access
keys. Each agent decides whether to keep the files its users send, and
stored files are deleted with their conversation and with the agent.
Filenames with URL-significant characters round-trip correctly. - Scheduled work recovers. Runs left behind by a dead process are recovered
at startup; live runs that exceed their configured deadline are reaped
without touching a newer claim of the same task, and a scheduler health
endpoint exposes stuck-run and capacity counts. - Faster and cleaner on Node 24. Under load the platform's overhead per
turn drops sharply on Node 24, and the engine now finishes shutting down
while a panel holds an activity stream open, instead of waiting for the
platform to kill it and losing the last buffered audit rows. - Faster lists and dashboards. Conversations carry their own message
counters, so lists and analytics no longer count message history, and
analytics reads run on a separate, smaller connection pool. - Recorded spend matches what the providers bill. An audit against live
OpenAI, Anthropic and Bedrock calls found per-call tokens and prices exact
and four places where billed spend went missing or was mispriced: Amazon
Nova carried the US price instead of the eu-south-1 one, a turn preempted by
a follow-up message left no row, embedding calls were never logged, and
long-period totals lost precision in the sum. All four are fixed; Nova costs
more than 1.1.x reported.
Breaking changes
- The engine and the panel require Node 24. The published images carry it;
source deployments and custom images must move. - Extracted tools are namespaced, and
fileUploadis nowextra:fileUploadin
the extra plugin. Migrations0087_rename_extracted_toolsand
0089_rename_extracted_tools_file_uploadrename their rows in place, so
agents keep them enabled and skills keep their links; install the relevant
plugins before building (HubSpot frompolyant-hubspot-pluginv1.1.1,
Markdown-to-PDF andfileUploadfrompolyant-extra-pluginv1.1.0). GitHub
and Render tools are removed and no replacement is shipped.verifyDocumenthas no replacement and is removed
from agents at the first boot. - Telegram and Slack need a public HTTPS address with
/webhooks/*routed to
the engine. Each Slack app needs Socket Mode off and its Request URL set to
the agent's webhook; the Slack app token is no longer used. Each Telegram
channel gets its own random webhook secret, which the engine mints and
registers when it first starts on 1.2.0; Telegram's updates arrive once it
has. - A new agent starts with its Web channel off:
/v1/chat/completionsand
chat/streamanswer 404 until the channel is enabled, which needs the
agent's API key unless authentication is turned off. Migration
0091_web_channelswitches Web on for every existing agent, and bundles move
to format 1.3. - A new agent requires its API key: migration
0090_new_agents_require_auth
makesauth_enableddefault to true. Existing agents and imported bundles
keep their setting. - Migration
0091_web_channeldeletes the seededdemo-agentwhen it was never
used. Ademo-agentwith conversations, memories, knowledge, scheduled tasks,
secrets or edits stays. AUTH_MODE,DEFAULT_INSTANCE_ID, deployment-wideAWS_REGION,
PLATFORM_ADMIN_EMAIL,WORKSPACES_ROOT,DEBUG_LLM_PAYLOADand the unused
LANGSMITH_*variables are no longer product configuration.- The environment variables that set agent, organization or installation
behaviour are read by nothing; the panel holds those values now. Their
defaults are unchanged, and a deployment that set a different value must enter
it in the panel before removing the variable.THROTTLE_ENABLEDstays an
environment variable. - Attachment storage no longer reads the four
PLATFORM_S3_*variables. On
each agent that needs persisted attachments, set the bucket, region and the
agent's ownaws_access_key_idandaws_secret_access_keyon its Advanced
page, and turn on its Store attachments switch: migration0088adds it
off for every agent. Deleting stored files needss3:DeleteObjecton the
attachments/prefix. Files earlier versions stored in the platform bucket
stay there. - Unpinned OpenAI agents move from
gpt-4o-mini/gpt-4oto the gpt-6 tiers,
and unpinned Bedrock agents to Nova Pro and gpt-oss 120B. The Anthropic
fasttier moves from Claude Haiku 4.5 to Claude Haiku 5.5, so the background
jobs of every Anthropic agent, pinned or not, change model and price. - The images run as the unprivileged
nodeuser (uid 1000). A volume mounted
on the engine's/app/logsor/app/packages/engine/workspacesmust be
writable by that user.
Database migrations
The release migrations, 0078 to 0093, are:
0078_scheduler_crash_safety: a per-task run deadline and the index the
scheduler reaper scans.0079_org_knowledge_doc_cap: an organization's own cap on the knowledge
documents one agent may hold.0080_env_vars_to_productand0082_platform_settings_expand: per-agent
behaviour and installation policy columns that replace deployment variables;
an unset column keeps the shipped default.0081_drop_s3_endpoint_secret: removes a storage secret that only
pre-release builds of 1.2.0 wrote; a 1.1.x database has none.0083_agent_capability_defaults: new agents start with memory off and speech
transcription disabled until configured; existing agents keep their settings.0084_add_trace_cache_write_5m_tokens: records five-minute cache-write tokens
on traces, so Anthropic cache writes are priced by TTL.0085_add_web_context_field_mapping: the per-agent web context field mapping.0086_conversation_message_counters: per-conversation message counters,
backfilled from every conversation message.0087_rename_extracted_tools: renames the tools moved into plugins to their
namespaced names, keeping agent enablement and skill links.0088_attachment_storage_opt_in: the per-agent Store attachments switch,
off for every agent.0089_rename_extracted_tools_file_upload: renamesfileUploadto
extra:fileUpload, keeping agent enablement and skill links.0090_new_agents_require_auth:auth_enableddefaults to true for new
agents; existing rows keep their value.0091_web_channel: deletes the seededdemo-agentwhen it was never used,
and switches the Web channel on for every remaining agent.0092_playground_use: grantsagent.playground:useto every built-in role.0093_user_onboarding: the per-user onboarding state, set to dismissed for
accounts that already exist.
Operational notes
- Telegram and Slack redelivery checks are kept in memory in each process. With
several replicas, a retry that reaches another replica is answered again and
the contact can get two replies. Run one replica, or accept the occasional
duplicate.
Security
- Plugin artifacts are limited to 10 MB each, 10 minutes of lifetime, 20
handles or 25 MB per conversation, and 100 MB or 1,000 live handles per
engine process. A handle is bound to its agent as well as its conversation. - Tenant scope is required and branded across the affected stores, closing
cross-tenant keyword search and mutation paths and refusing unresolved request
tenancy rather than dropping a predicate. - Disabled skills no longer resolve retained credential placeholders. MCP OAuth
metadata uses the shared private-network denylist, rotating bearer strings no
longer evade throttling indefinitely, and provider response bodies are not
logged raw. - Management keys are verified against a SHA-256 digest instead of bcrypt,
which held the event loop for about 250 ms on every authenticated request. A
bcrypt key keeps working and is rewritten on first use, so a rollback to
1.1.x needs the keys used on 1.2.0 issued again. - Changing an MCP server's address to another host no longer reuses its stored
credential until the credential is entered again. - undici was updated to 8.11.2 and 7.30.0, and axios to 1.20.0, for their open
security advisories.
Upgrading
- Back up PostgreSQL; migration
0091deletes an unused seededdemo-agent,
and migration0086reads every conversation message, so schedule it for a
quiet moment or build its indexes beforehand as the upgrade guide shows. - Move to Node 24 if you run from source or build your own images, and make
any volume mounted on the engine's/app/logsor
/app/packages/engine/workspaceswritable by uid 1000. - Add the plugins of the extracted tools your agents use to the image:
polyant-hubspot-plugin
v1.1.1 for HubSpot and
polyant-extra-plugin
v1.1.0 forextra:markdownToPdfandextra:fileUpload. Each README gives
the install command. The GitHub and Render tools have no plugin. - On each agent that should keep files, set its bucket, region and its own
access keys on the Advanced page and turn on Store attachments. - Copy any non-default value of a removed variable into the panel, then remove
the obsolete environment variables listed in the upgrade guide. - Route
/webhooks/*to the engine, reconfigure Slack apps for webhooks, and
start the new engine promptly so Telegram's webhook is registered. - Review agents without a pinned model, and Anthropic agents' background jobs,
which now run on Claude Haiku 5.5. - Update scripts that create agents and then call them: save the agent's API
key and enable its Web channel. - Run
npm ci, apply migrations, build, restart, then smoke-test sign-in, one
affected plugin tool, attachment upload/read, a Telegram or Slack message if
you use them, and a scheduled task.
Compatible clients
These clients are released alongside Polyant v1.2.0:
- polyant-cli v0.9.0, the
command-line client. Install it with
npm install -g https://github.com/polyant-ai/polyant-cli/releases/download/v0.9.0/polyant-ai-cli-0.9.0.tgz.
It authenticates with a management key issued from the panel's API keys
page. - polyant-dev-kit v1.2.0.
- Plugin SDK v1.9.0, the version
this engine pins.
Links
- Changelog
- Upgrade guide
- Plugin guide
- Documentation
- Plugin SDK (v1.9.0)
- polyant-hubspot-plugin (v1.1.1)
- polyant-extra-plugin (v1.1.0)
- polyant-cli (v0.9.0)
- polyant-dev-kit (v1.2.0)
- GitHub repository
- Commit history