Tale v0.2.85
v0.2.85 — Apps platform, the AI Workforce, and persistent sandbox agents
This is a large release. It introduces a config-driven Apps platform (installable packs that bundle app-scoped agents, workflows, and sandbox-agent steps), the AI Workforce (an agent company with an organigram, task operations, and Discussions), and persistent sandbox agent sessions that run Claude Code with docker-in-sandbox, browser human-takeover, BYO credentials, and rotating token sources. It also ships SSO/identity hardening (generic OIDC claim mapping + PKCE, passkey/2FA controls, server-side idle timeout), a zero-friction guided setup, and a knowledge-platform refactor that moves RAG into the Convex backend behind a dedicated knowledge-db container.
🔒 Security & Identity
- Generic OIDC claim mapping, role-mapping rules, and PKCE — map arbitrary identity-provider claims to Tale roles and use PKCE for the auth-code flow (#1857)
- Passkey admin revocation, configurable 2FA-wall enforcement options, and sign-in audit events (#1859)
- Server-side session idle-timeout enforcement (#1862)
- Knowledge entries are now written through an approval-gated
knowledge_writepath (#1866) - Audit-log retention and PII-scrub checkpoints are signed with a new
TALE_AUDIT_SIGNING_KEY(HMAC-SHA256), making the audit hash chain tamper-evident; the key supports rotation viaTALE_AUDIT_SIGNING_KEY_PREVIOUS(#1879) - Sensitive form fields are masked in the UI (#1912)
- Ratcheted the dependency CVE gates from CRITICAL down to HIGH (#1856)
💥 Breaking Changes (operator-facing)
- The
tale-crawlerandtale-ragcontainers are removed. RAG/knowledge processing now runs inside the Convex backend (node-actions), backed by a new dedicatedknowledge-dbcontainer (ParadeDB:pg_search+pgvector). A new optionalKNOWLEDGE_DATABASE_URL(orKNOWLEDGE_DB_NAME, defaulttale_knowledge) points at it; it defaults to the bundledknowledge-dbservice and is split out so it can be relocated for data residency (#1907) - RAG cross-encoder re-ranking is now API-only.
RAG_RERANKING_PROVIDER=localis no longer supported and fails fast — setRAG_RERANKING_PROVIDER=apipointing at an external Cohere/Jina-compatible/rerankendpoint (RAG_RERANKING_API_BASE_URL+RAG_RERANKING_API_KEY) (#1869) - Metrics endpoints consolidated.
/metrics/crawlerand/metrics/ragare removed; scrape/metrics/platforminstead. Update any Prometheus scrape config that targeted the old paths
🚀 Features
Apps platform
- Config-driven Apps platform: installable packs that bundle app-scoped agents, workflows, and sandbox-agent steps, isolated from the global catalog under a composite
<app>/<name>slug (#1911) - Install/readiness wizard with inline integration-connect, per-agent dependency readiness (managed ↔ BYO), multi-project installs (one app → many projects), and durable task runs (#1927)
The AI Workforce
- Workforce foundations: task operations, an org organigram, and per-agent logs (#1877)
- The AI Workforce — an agent company with Discussions and human controllability over what agents do (#1907)
- Task views split,
@-mention descriptions, and per-agent metrics (#1878)
Persistent sandbox agents
- Persistent agent sessions for Claude Code — a durable, resumable sandbox session per (org, user) (#1872)
- Sandbox agents can use any connected org integration, with credentials that never enter the container (#1880)
- Native docker/compose inside a session via configurable runtime tiers (runc/gVisor/sysbox/kata) (#1881)
- Read-only sandbox observability in chat: a live browser view and a workspace file explorer (#1890)
- External-agent BYO credentials plus per-user env vars and secrets (#1892)
- Agent-initiated browser human takeover — an agent can hand the browser to a person (e.g. to solve a CAPTCHA) and resume (#1895)
- Token sources: broker-fetched pools of rotating LLM credentials for BYO agents, with random pick and 401/429/529 failover (#1930)
External-agent chat
- External-agent interactive/autonomous modes with incremental answer streaming (#1900)
- Agent editor: switch an agent between internal/external types, with a folder breadcrumb (#1918)
Automations & workflows
- Step-by-step debug mode for automations (#1871)
- Per-step error feedback in the automation test panel (#1870)
Setup & operations
- Zero-friction setup: guided CLI install, an onboarding wizard, and guided create flows (#1879)
- Pre-migration volume snapshots and a new
tale backupcommand (#1863) - Adaptive chat reliability and blue-green deploy tiers (#1914)
- Cross-terminal clean-output rework for
taleandbun run dev(#1904)
UI & UX
- Settings full-width sweep, banner alerts, and login-UX refresh (#1910)
- Refined settings layouts and onboarding-wizard UX (#1903)
- Interactive PDF links and a branch-aware automation canvas (#1912)
- Settings migrated to a left-rail sidebar across all pages (#1839)
- Model capability details in an info popover (#1885)
- Clearer notifications with locale-safe actor names (#1876)
- Org deletion moved into the settings danger zone (#1891)
⚡ Performance
- Single-source chat timeline with reduced render churn (and a fix for the reaped-turn error) (#1906)
- Cut cross-component round-trips in
getOrganizationMember(#1898) - Provider request-body mapping and
max_completion_tokensfor reasoning models (#1905)
🐛 Fixes
- Per-project task dedup, stopped-run step settling, and sandbox stream-idle recovery (#1929)
- Surface the raw provider error and stop mislabeling provider param rejections as user errors in chat (#1894)
- Knowledge-db local-dev wiring and pdfjs extraction in the Convex node runtime (#1902)
- Stop a long document name from overflowing adjacent columns (#1901)
- Derive the dev builtin-config catalog from
TALE_CONFIG_DIR(#1893) - Recover stuck websocket auth on cold start and fix skeleton-mask sizing (#1873)
- Gate RAG queueing on a shared indexability allowlist (#1853)
- Route all pdfjs consumers through a shared loader, fixing a DOMMatrix indexing failure during PDF extraction (#1933)
📝 Other
- Switched raw
<table>usage to the sharedTablecomponent (#1882) - Added a Playwright E2E suite with a mock LLM and CI workflow (#1860)
- E2E/test tooling, the Opengrep SAST gate, and package cleanup (#1883)
- Weekly model-catalog sync (#1884)
- Rewrote the subprocessor tables for EU/EEA AI processing (#1874)
- Added the
/releaseskill and a Claude Code chat-agent config (#1928) - Pruned the remaining standalone crawler/rag service references across compose, docs, README, and CI; the sandbox LLM gateway ships as a first-class
llm-gatewayservice (#1931) - Added a regression test verifying the web client passes the Mozilla Observatory security-headers check (#1932)
Upgrade
Run tale upgrade to update the CLI, then tale deploy to apply the new version.
This release contains a multi-step governance data migration and a container topology change — review before deploying:
- Governance policies move from the database to per-org JSON files (3 migration steps). Steps 1–2 are non-destructive (export to files + split staged DSAR changes into a dedicated table). Step 3 drops the legacy
governancePoliciesrows and is gated behind explicit operator confirmation duringtale deploy; it is reversible (each row is snapshotted before deletion). Run it only after verifying the exported governance files look correct. - Knowledge/RAG topology change. The
tale-crawlerandtale-ragcontainers are gone; a newknowledge-dbcontainer holds the corpus. See the updated container-architecture and data-residency docs before upgrading a deployment with an existing indexed corpus. - New audit signing secret.
TALE_AUDIT_SIGNING_KEYis auto-generated and written to.envduring deploy if missing (the deploy preflight verifies it). Back it up with your other secrets and keep it stable across deploys. - If you used local RAG re-ranking, switch
RAG_RERANKING_PROVIDERtoapi(see Breaking Changes). - If you scrape metrics, update any scrape config pointing at
/metrics/crawleror/metrics/ragto/metrics/platform. - The sandbox LLM gateway is now a first-class
llm-gatewaycompose service. Its management-API password (LLM_GATEWAY_ADMIN_PASSWORD) is auto-generated on deploy if missing; setLLM_GATEWAY_ADMIN_USERNAME/LLM_GATEWAY_ADMIN_PASSWORDonly to pin your own values.
Contributors
@larryro, @yannickmonney, @AdeolaAdekoya, @Israeltheminer
Full Changelog: v0.2.84...v0.2.85