v0.20.0
Highlights
A feature-focused minor release on top of v0.19.0. The two headline additions are Kitaru projects and Modal stacks. Kitaru projects land across the SDK, CLI, and MCP so you can organize work into separate project workspaces and switch between them. Modal stacks let you run flows on Modal with remote artifact storage and a remote image registry, including cloud credential support for private S3/ECR, GCS/GAR/GCR, and Azure resources. This release also adds Python 3.14 support and a batch of replay correctness fixes. Note one Breaking change in replay planning: input overrides against older recordings that lack replay input-slot metadata now fail loudly instead of silently doing nothing.
Added
- Kitaru projects across SDK, CLI, and MCP:
KitaruClient.projects,KitaruClient.for_project_management(),kitaru project list/current/show/create/use/delete, and MCP read/switch toolskitaru_projects_list,kitaru_projects_current,kitaru_projects_show, andkitaru_projects_use.kitaru login --project ...now reportsProject: ...in text output. kitaru stack create --type modaland MCPmanage_stack(..., stack_type="modal")support for Modal-backed stacks with remote artifact storage, remote image registry, optionalsandbox="modal", and Modal-specific component overrides.- Modal stack cloud credential support for private S3/ECR, GCS/GAR/GCR, and Azure Blob/ADLS/ACR resources by linking provider service connectors to the artifact-store and container-registry components.
- Explicit adapter checkpoint metadata in SDK/API inspection output: checkpoint calls now expose
checkpoint_origin,adapter,adapter_checkpoint_kind,replay_input_slots, andreplay_output_slots, so clients can distinguish adapter-generated checkpoints from hand-written checkpoints with the same display type. - Python 3.14 as a supported and tested runtime.
- Opt-in remote-stack release smoke covering an operator-provided Kubernetes stack and a local-runner stack with remote artifact storage, with sanitized structured evidence and deterministic contract tests.
Changed
- PydanticAI tool-checkpoint replay input overrides now rerun the tool body with edited
tool_args. Users still pass the publicinputoverride field; shorthand tool arguments and explicit{"tool_args": ...}input-slot overrides are both supported. - Breaking: Replay planning now uses recorded replay input slots and real step inputs before falling back to older type-based guesses, so a hand-written
type="tool_call"checkpoint is no longer treated as a PydanticAI tool checkpoint unless it actually exposes replayable tool arguments. Input overrides against older recordings without replay input-slot metadata now fail loudly instead of silently doing nothing. - Bumped the minimum ZenML dependency, server image tag, and Helm subchart version to
0.96.1.
Fixed
- Modal stack creation now reuses matching server-side service connectors for artifact stores and container registries when explicit cloud credentials are not provided, avoiding remote-server failures caused by local-only credential inputs such as AWS SSO profiles.
- Replay now preserves recorded flow parameters when submitting a replay, so overriding one flow argument no longer lets defaulted arguments such as
model=Nonesilently replace recorded values. FlowHandle.wait()now distinguishes paused executions with pending wait input from paused executions that needkitaru executions resume, andkitaru executions resumeaccepts--exec-idwhile preserving clearer wait-condition resume diagnostics.- PydanticAI edited tool-argument replay now reruns the tool's own argument validator, so JSON override values are coerced back into richer Python types such as
datebefore the tool body runs. - Checkpoint metadata now keeps Kitaru's reserved
boundary,type, andflow_result_candidatekeys authoritative when user metadata contains the same names. - Plain user checkpoint input overrides can again mix recorded artifact input names with literal parameter overrides, while adapter-declared replay input slots still reject unknown keys.
FlowHandle.wait()/.get()now preserve explicitNoneflow returns instead of falling back to discarded terminal checkpoint outputs.- Flow result extraction now resolves a single eligible terminal checkpoint instead of raising ambiguity when replay or adapter runs record several terminal checkpoints, and honors the
flow_result_candidatemarker and saved flow-return artifacts before terminal-step heuristics. - Execution deep links and compare links now resolve to the correct Kitaru UI route when connected to a Pro workspace, instead of landing on the workspace projects page via a stale
/flows/...URL. - Fixed replay LLM usage accounting so replay executions write terminal usage rollups, preserve incurred/executed records for live replay-tail calls, and classify explicitly skipped replay checkpoints as reused.
- Fixed
kitaru stack useandkitaru statuswhenZENML_ACTIVE_STACK_IDpoints to an unresolvable stack: stack activation no longer fails while re-reading the active stack after activation, and diagnostics now tell users to unset, update, or remove the environment variable. - Fixed flow submissions with an explicit stack so a successful run is not reported as failed only because Kitaru could not restore a stale previous active stack ID afterward.
Full Changelog: v0.19.0...v0.20.0