NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A native Dart client SDK for Google Antigravity, fully decoupled from the Flutter framework for server, CLI, and mobile compatibility.
Last release today
07 Oct 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 18 of 18 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
18 releases · first in 2026
One column per month.
InteractionsAgentConfig, InteractionsConnectionStrategy, and InteractionsConnection: the local harness over the GAOS Interactions JSON protocol, with
Syncs with Python SDK v0.1.21.
InteractionsAgentConfig, InteractionsConnectionStrategy, and
InteractionsConnection: the local harness over the GAOS Interactions JSON
protocol, with streamed step assembly, client tools, lifecycle hooks, question
elicitations, and usage tracking. Triggers, auto() and dynamic policies, and
subagent model overrides are rejected; root inlineSkills are ignored.InlineSkill and inlineSkills on all local configs. Paths and inline root
skills are mutually exclusive.SubagentSkillsConfig and its three mode types, accepted directly through the
sealed SubagentSkillsOption interface. Local inline overrides are rejected,
matching upstream.HookRunner(hooks: ...) and registerHooks, MCP forceAllToolsEager, and
numeric-zero identity for usage addition/subtraction.agent.beta.runWorkflow(scriptPath: ...), WorkflowResult,
WorkflowProgress, and BuiltinTools.runWorkflow. Workflows execute Python
script files in the harness; Dart closures are not transpiled.validateWorkflowSource and WorkflowException in
package:antigravity/beta.dart. runWorkflow now rejects imports, while
loops, private attributes, dunder names, and top-level return/yield before
contacting the model. The check is lexical; full syntax checking stays with
the harness.allowAll() disables harness workspace containment unless paired with
workspaceOnly(...).startSubagent or runWorkflow is active.
Explicit subagent capabilities now honor default tools and denylists.Tool has readable inspection output; tool runner batches accept iterables.runWorkflow expands ~ in script paths and only tries the first workspace
for relative paths.Default tools. list_directory, search_directory, and find_file are now deprecated and off unless you list them in enabledTools. They are no longer in…
Syncs with Python SDK v0.1.18.
list_directory, search_directory, and find_file are now deprecated and off unless you list them in enabledTools. They are no longer in defaultTools(), readOnly(), nondestructive(), or minimal(). minimal() is now run_command, view_file, create_file, and edit_file.schedule is on by default. The new BuiltinTools.schedule tool is part of defaultTools(), readOnly(), and nondestructive(). To turn it off, add it to disabledTools.manage_task follows run_command and schedule. The harness enables manage_task whenever either tool is active, for the main agent and for subagents.policies to the harness as policy_config. LocalConnection answers the harness's policy_decision_request for dynamic rules (rules with a when predicate or an askUser decision). Agent no longer registers the client-side enforce() hook for these configs, so each rule is evaluated, and each askUser handler prompts, once per tool call. enforce() still runs when the agent starts, so invalid policies fail early.run_command is denied by default. When policies is omitted, LocalAgentConfig, LocalOpenAIAgentConfig, and LiteRTAgentConfig now default to confirmRunCommand(), which denies run_command and allows everything else, as upstream does. Previously the default allowed every tool, including run_command. Pass policies: [allowAll()] to keep the old behavior. An explicit policies: [] stays empty, so the missing-safety-policy check applies again.workspace() rule for each workspace. That rule was a wildcard allow that never denied anything, and on the wire it cost a round trip to the SDK on every tool call. The harness already restricts file tools to the configured workspaces, as upstream does. workspace() is deprecated; use workspaces or workspaceOnly().ToolConfirmationHook and askUserHandler strip ANSI escape sequences and control characters from tool names, arguments, and reasons before printing them.eval() preset on LocalAgentConfig, LocalOpenAIAgentConfig, and LiteRTAgentConfig, for benchmark and evaluation runs. It:
generate_image and subagents;RunCommandConfig(enableDaemons: true));allowAll() if you set no policies, and RetryConfig.benchmark() if you set no retry config;LocalAgentConfig, sets text Gemini and Vertex targets to ThinkingLevel.high. Pass thinkingLevel: null to leave thinking levels unchanged.It raises AntigravityValidationException if a text target already sets thinkingLevel, or if a thinking level is requested on LiteRTAgentConfig or LocalOpenAIAgentConfig. Your own enabledTools or disabledTools list replaces the generate_image denylist. Dart can't tell an explicit enableSubagents: true from the default, so subagents are always disabled. The default confirmRunCommand() rules don't count as policies you set, so eval() replaces them.
Auto policy mode. auto({name, handler, model}) returns an AutoPolicy, sent to the harness as policy_config.auto_config. The harness's safety assessor checks risky tool calls. Without a handler, flagged calls are denied; with one, you're asked to confirm. Only one auto() rule is allowed. runInteractiveLoop gives an auto() rule without a handler the terminal askUserHandler.
Policy reasons. deny() and askUser() accept reason. It's sent as the rule's deny_reason, and it's the denial message and the reason passed to handlers.
Reasons for ask-user handlers. Handlers can take an optional reason, either positional ((tc, [String? reason])) or named ((tc, {String reason = ''})), to get the runtime's explanation, such as an auto-mode safety assessment. One-argument handlers still work. executeAskUser is exported for custom integrations.
SubagentConfig.model. A model name for one subagent, sent as custom_subagents[].model.name. Subagents still use the agent-level endpoint.
AgentConfig.evaluatesPoliciesInHarness. True for the local configs. Custom AgentConfig subclasses default to false and keep client-side enforce().
BuiltinTools.deprecated() returns the three directory tools.
safeDefaults() and the write-tool safety check treat the deprecated directory tools as read-only, as upstream does.HarnessDownloader.defaultVersion is 0.1.18.dart_mappable ^4.10.0, mcp_dart ^2.4.2, and meta ^1.19.0. Dev dependencies: test ^1.32.0, build_runner ^2.16.1, and dart_mappable_builder ^4.10.0.ToolRunner coercion changes, the removal of modified_arguments_json, and a service-tier ingestion fix. None of those files changed between v0.1.17 and v0.1.18. Dart already parses unknown service tiers as ServiceTier.standard.SpeechAnnotation, Environment.StorageQuota, the ExternalClientEvent rename, and the SystemInstructionTemplate restructure are proto-only and don't change SDK behavior.LiteRTAgentConfig applies the lightweight preset automatically, and has since v0.1.17. The Dart config doesn't; call lightweight() yourself.Simplified CompactionConfig to the validated tokenThreshold field, retaining the deprecated checkpointIntervalTokens getter for source compatibility.
CompactionConfig to the validated tokenThreshold field, retaining the deprecated checkpointIntervalTokens getter for source compatibility.ToolOutputTruncationConfig, SandboxStatus, UsageMetadata scalar multiplication, and BuiltinTools.defaultTools().Retained the deprecated compactionThreshold alias, which maps to checkpoint_interval_tokens on the wire and raises on conflicting values.
CompactionConfig):
CompactionConfig in types/compaction.dart, exposing checkpointIntervalTokens (tokens of history per compaction checkpoint) and maxContextTokens (hard context-window ceiling), with validation that both are positive and that checkpointIntervalTokens <= maxContextTokens.compactionThreshold alias, which maps to checkpoint_interval_tokens on the wire and raises on conflicting values.AgentConfig.compactionConfig and AgentConfig.effectiveCompactionConfig, which resolves the legacy CapabilitiesConfig.compactionThreshold when no CompactionConfig is set.compaction_config over the wire (alongside the legacy compaction_threshold) and deprecated CapabilitiesConfig.compactionThreshold, which now also rejects non-positive values (matching the upstream gt=0 constraint).lightweight()):
AgentConfig.lightweight(), implemented on LocalAgentConfig, LocalOpenAIAgentConfig, and LiteRTAgentConfig with covariant return types. It returns a copy restricted to BuiltinTools.minimal(), with AgentBehavior.minimal, subagents disabled, and a 64 Ki-token compaction checkpoint interval (AgentConfig.lightweightCheckpointIntervalTokens).enabledTools allowlist wins, a caller-provided disabledTools list is subtracted from BuiltinTools.minimal(), and runCommandConfig, finishToolSchemaJson, and compactionConfig are carried over. Resolution lives in the shared AgentConfig.lightweightCapabilities() and AgentConfig.lightweightCompactionConfig() helpers.agentBehavior and enableSubagents always take the preset, because Dart cannot distinguish an explicitly-set value from a default on a non-nullable field (Pydantic's model_fields_set has no equivalent). Subagent scoping (maxSubagentDepth, allowedSubagents) is intentionally dropped, since CapabilitiesConfig rejects both once subagents are disabled.BuiltinTools.minimal() (run_command, view_file, create_file, edit_file, list_directory, search_directory) and the AgentBehavior.minimal variant (AGENT_BEHAVIOR_MINIMAL on the wire).BudgetScope):
BudgetScope enum (LIFETIME, FORWARD_LOOKING) and BudgetConfig.scope (defaults to BudgetScope.lifetime), letting a resumed session budget only the calls and tokens made from that point onwards.budget_config is now emitted only when at least one limit is set, and always carries an explicit scope.enable_sandbox is now emitted in the harness_side_tools.run_command proto, so RunCommandConfig.enableSandbox reaches the harness.LiteRTAgentConfig.maxContextTokens in favour of compactionConfig.maxContextTokens, mirroring upstream's removal of the standalone field. LiteRTAgentConfig.effectiveCompactionConfig folds the legacy value into the shared compaction policy and effectiveMaxContextTokens exposes the resolved ceiling, so the LiteRT runner and the harness now read one source of truth. Dart keeps the field deprecated rather than removing it outright, matching how compactionThreshold is handled.effectiveCompactionConfig to their strategy, matching upstream; the strategy retains its own capability fallback for directly-constructed strategies.Conversation (and Conversation.create) now accept history to pre-seed steps and maxHistorySize as a constructor parameter; compaction indices and cumulative usage are computed over the combined history. (history already existed upstream in v0.1.15 and was only documented in v0.1.16; it was previously missing in Dart.)Step.usageMetadata in favour of ChatResponse.usageMetadata for per-turn usage and Conversation.cumulativeUsage for the session total. The field remains on the wire and is still read internally.defaultModel to gemini-3.8-flash.localharness binary download version in HarnessDownloader to 0.1.16.ToolRunner support for callable-class and dataclass tools relies on Python reflection (typing.get_type_hints over __call__); Dart tools are explicit Tool(name:, schema:, handler:) values with nothing to introspect.struct_converter and the dependent event_processor branch convert genai.Content and proto-message tool results into google.protobuf.Struct. Dart has no genai dependency and tool results are plain Dart values, so the existing media extraction path already covers this.vertex: true with apiKey) already shipped in Dart 0.10.0.example/getting_started/compaction.dart, example/getting_started/sandboxing.dart, and example/getting_started/vertex.dart (Express and Standard Vertex AI modes, configured via Platform.environment rather than an argument parser, matching existing Dart examples).BudgetScope.forwardLooking session-resume demo to example/getting_started/budget_limits.dart.example/getting_started/subagents.dart now relies on subagents being enabled by default and exposes example/resources/ as the workspace for all three demos, replacing the temporary directories and synthetic target_code.dart / design.md / perf_data.txt fixtures. The static reviewer audits the bundled mcp_server.dart, and the nested hierarchy fact-checks mcp_server.dart and sample_doc.txt.Stop Lifecycle Hook (`StopHook`):
StopHook):
StopHook, StopDecision, StopHookResult, and StopArgs for intercepting turn completion when the agent reaches idle.StopDecision.allowStop) or continue execution (StopDecision.continueTurn) with an injected feedback system prompt.HookRunner.dispatchStop and wired LIFECYCLE_HOOK_STOP through HookRouter, preserving turn context across continuation cycles.StopDecision.CONTINUE to StopDecision.continueTurn (since continue is a reserved control flow keyword in Dart) while maintaining exact wire compatibility (CONTINUE on the wire, supporting both prefixed and bare values).enableSandbox):
enableSandbox property to RunCommandConfig (defaults to false).enable_sandbox into localharness harness_side_tools.run_command configuration over the wire, allowing opt-in execution within OS-level sandboxing (exebox).normalizeSchema):
normalizeSchema in schema_utils.dart to canonicalize custom tool input schemas before wire transmission.STRING, OBJECT, etc.) to standard lowercase OpenAPI/JSON Schema strings (string, object), converts snake_case combiners and attributes (any_of, additional_properties, etc.) to camelCase (anyOf, additionalProperties), and preserves literal constraints (enum, const, default).serverName to ToolResult and preserved id, callId, stepId, and serverName across all ToolResult executions, error handlers, and internal SDK fallback responses.runInteractiveLoop in interactive.dart to ensure capabilities.agentBehavior is explicitly set to AgentBehavior.interactive.localharness binary download version in HarnessDownloader to 0.1.15.Release v0.9.2 - Fix RetryConfig proto serialization, subagent tool n…
Release v0.9.2 - Fix RetryConfig proto serialization, subagent tool n…
RetryConfig Serialization:
ModelAPIRetryConfig.toMap()/toJson() (and any RetryConfig containing one) threw MapperException: Unknown type Duration and emitted a spurious initial_sleep_duration key that localharness rejects. The initialSleepDuration Duration is a convenience argument, not a wire field, but was being generated as one.ModelAPIRetryConfig.raw() as the @MappableConstructor(), so only the integer initialSleepDurationMs is serialized. The unnamed constructor still accepts either initialSleepDurationMs or initialSleepDuration.harness_side_tools field names for subagents in LocalConnectionStrategy ("file_edit" and "write_to_file", matching localharness.proto), resolving unknown field "edit_file" errors when launching static subagents.stdin.hasTerminal) to example/getting_started/human_in_the_loop.dart to prevent test runs from blocking on headless standard input.Critical Bug Fixes for Local Harness Execution:
STATE_FULLY_IDLE (and FULLY_IDLE) in LocalConnection trajectory state updates, properly emitting the idle_sentinel step and preventing agent.chat() / response.text() from hanging at turn completion.LIFECYCLE_HOOK_PRE_TOOL / PRE_TOOL in HookRouter, returning valid pre_tool_result decisions (ALLOW / DENY) to the harness and resolving tool execution deadlocks.file:///, cns://) for tool call arguments in HookRouter to support path-based safety policies and canonical workspace containment.Release v0.9.0 - Sync Python SDK v0.1.11 features, budget limits, sub…
Release v0.9.0 - Sync Python SDK v0.1.11 features, budget limits, sub…
lib/src/models.dart to gemini-3.7-flash.BudgetConfig) & Stop Reasons (StopReason):
BudgetConfig to configure session-level caps: maxModelCalls, maxToolCalls, maxInputTokens, maxOutputTokens, maxTotalTokens.StopReason enum (unspecified, maxModelCallsExceeded, maxToolCallsExceeded, maxInputTokensExceeded, maxOutputTokensExceeded, maxTotalTokensExceeded, quotaExhausted).ChatResponse.stopReason, ChatResponse.usage, and Conversation.lastTurnStopReason.apiKey):
apiKey support to VertexEndpoint for Vertex AI Express Mode authentication.apiKey (Express Mode) and project/location (Standard Mode).AgentBehavior):
AgentMode enum to AgentBehavior (autonomous, interactive), mapping to AGENT_BEHAVIOR_AUTONOMOUS and AGENT_BEHAVIOR_INTERACTIVE protobuf values.typedef AgentMode = AgentBehavior and constructor/getter aliases for backward compatibility.maxSubagentDepth and allowedSubagents allowlist configuration on CapabilitiesConfig and SubagentCapabilities.BuiltinTools.startSubagent on custom subagents when configured in their capability toolsets.maxSubagentDepth and allowedSubagents cannot be set when subagents are disabled.BaseLocalAgentConfig ensuring all referenced subagent names exist in the configured subagents list.parentTrajectoryId and depth fields to Step and updated Step.fromMap parser.outputPath to GenerateImageResult and updated toString() to return outputPath when non-empty.handler optional in askUser policy builder for host platform delegation compatibility.example/getting_started/budget_limits.dart demonstrating all 5 budget limits and stop reason inspection.example/getting_started/subagents.dart showcasing dynamic self-delegation, static subagents, and nested subagent hierarchies.0.9.0 and MCP implementation version to 0.9.0.Sync with Python SDK v0.1.10 & Dart-Idiomatic Enhancements:
Conversation.lastTurnUsage signature updated to UsageMetadata? (matching Python SDK v0.1.10) to return null when no token usage was recorded during a turn.ServiceTier): Introduced ServiceTier enum (standard, priority, flex) and support in GeminiModelOptions and UsageMetadata to configure high-priority model execution with automated fallback.UsageUpdate event streaming over WebSockets, accumulating per-trajectory token usage live during execution. Added subtraction (-) operator support to UsageMetadata.AgentMode): Introduced AgentMode enum (autonomous, interactive) in CapabilitiesConfig and SubagentCapabilities with interactive tool validation warnings (BuiltinTools.askQuestion).formatStepSpinnerMessage) to display all active tool names during concurrent tool calls (e.g. Running tools 'tool_a', 'tool_b'...).callId correlation support across ToolCall, ToolResult, ToolExecutionException, and lifecycle hook payloads..stateless() factory constructors to FunctionInspectHook, FunctionDecideHook, and FunctionTransformHook to seamlessly support both (data) and (context, data) callback signatures.OnCompactionHook handlers.CustomSystemInstructions completely replaces built-in instructions.maxOutputTokens from 8192 to 16,384 tokens to prevent truncation during complex generation.Release v0.7.0 - Sync Python SDK v0.1.9 updates and Dart-idiomatic SD…
Release v0.7.0 - Sync Python SDK v0.1.9 updates and Dart-idiomatic SD…
RetryConfig, ModelAPIRetryConfig, and ModelOutputRetryConfig with RetryConfig.benchmark() preset for controlling exponential backoff and output retry behavior across LocalAgentConfig, LocalOpenAIAgentConfig, and LiteRTAgentConfig.Duration & Jitter Ratio Validation: Added Duration support (initialSleepDuration, serverTimeout) to ModelAPIRetryConfig and McpServerConfig. Validates jitterRange as a ratio between 0.0 and 1.0.package:logging: DebugConfig accepts strongly-typed Level objects (level: Level.WARNING) or string names, validating levels and applying process-safe logger updates on Agent.start().Uri & Uint8List Media Buffers: Added Uri getters (uri, baseUri) on McpStreamableHttpServer and ModelEndpoint, plus McpStreamableHttpServer.fromUri() factory constructor. Added Uint8List get bytes getter on MediaContent and File object support in fromFile().isUserTurn, isModelTurn, isFinished, isDone) on Step, StepSource, and StepStatus.maxContextTokens).audio/x-wav, audio/wave, audio/vnd.wave, audio/mp4, audio/webm, and additional audio formats.Conversation.chat() to reject null, empty string, whitespace-only, or empty content prompts with AntigravityValidationException.AntigravityValidationException implements both Exception and ArgumentError for backwards compatibility.0.7.0 aligned with Python SDK v0.1.9 release.Release v0.6.0: Sync Python SDK v0.1.8 updates
Release v0.6.0: Sync Python SDK v0.1.8 updates
lib/src/models.dart to gemini-3.6-flash.\x00) and dangerous control characters (DEL, BEL, C1) from incoming string prompts at the wire boundary.ToolExecutionException carrying message, toolName, and serverName metadata when tool execution fails, with updated hook routing in HookRouter.SubagentConfig system instructions to support CustomSystemInstructions and TemplatedSystemInstructions.Hierarchical Thread-Safe State Management: Introduced the StateStore class for hierarchical context state sharing and lock/reentrancy support. Retarge
StateStore class for hierarchical context state sharing and lock/reentrancy support. Retargeted HookContext and ToolContext to inherit from StateStore.SessionContinuationMode to specify continuation behavior (RESUME, CREATE_OR_RESUME, CREATE_ONLY, SESSION_CONTINUATION_MODE_UNSPECIFIED) with validation checks on AgentConfig.GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION environment variables when not explicitly passed, and enables Vertex mode automatically when GOOGLE_GENAI_USE_VERTEXAI or GOOGLE_GENAI_USE_ENTERPRISE is set.LocalConnectionStrategy to retry on both localhost and 127.0.0.1 to ensure reliable connections in containerized sandboxes.Spinner with pause and resume behaviors, and integrated them into user confirmation/question hooks to prevent prompt clobbering.custom_tool parsing support in Step.fromMap and filtered out tool calls from StepUpdate if they are local custom tools to prevent client duplicate events.+ addition operator on UsageMetadata for clean accumulation of token usage.'gemini-3.1-flash-lite-image'.ThinkingLevel.extraHigh ('extra_high') level support.chore: bump version to 0.4.1 and apply post-release bug fixes & docum…
chore: bump version to 0.4.1 and apply post-release bug fixes & docum…
BaseLocalAgentConfig to prevent silent sandboxing regressions.read_url_content tool field mapping in Step.fromMap parser.HttpClient socket/connection leak in LiteRT loopback server health checks.LocalOpenAIAgentConfig and LiteRTAgentConfig.feat: sync Python SDK 0.1.6 updates & add localharness auto-upgrades
feat: sync Python SDK 0.1.6 updates & add localharness auto-upgrades
LiteRTAgentConfig and LiteRTConnectionStrategy (which manages a python loopback HTTP server).LocalOpenAIAgentConfig and LocalOpenAIConnectionStrategy.supplemental_media in tool_response.mcp_ string prefix synthesis, utilizing explicit serverName attributes in tool evaluation.results/entries alias in ListDirectoryResult and output/combined_output alias in RunCommandResult.localharness binary is out of date.0.1.6).chore: bump version to 0.3.1 and update CHANGELOG.md
chore: bump version to 0.3.1 and update CHANGELOG.md
Fix Tool Error Hook Dispatching:
OnToolErrorHook was never dispatched for either client-side custom tool failures or harness-side built-in tool failures.local_connection.dart with support for recovery values.LIFECYCLE_HOOK_ON_TOOL_ERROR and ON_TOOL_ERROR hook requests in hook_router.dart and covered it with a unit test.Dart 3 Modernization:
Connection and ConnectionStrategy to use Dart 3 abstract interface class modifiers.MediaContent as a sealed class to restrict subclass hierarchy and support compiler-level exhaustiveness checks.registerHook, allow, deny, and askUser to leverage case type pattern matching inside switch statements._bucketIndex), file change triggers (onFileChange), shorthand model builder (_buildShorthandModels), and step state mappings (Step.fromMap) to use clean switch expressions and logical OR patterns.lib/src/types/content.dart to support running the package on the web.Synchronize updates from Python SDK (v0.1.5):
read_url_content builtin tool and its ReadUrlContentResult structured output.StepType.thinking to enum representation for telemetry tracking.HookRouter to process WebSocket-based CallHookRequest turn and tool lifecycle hooks delegated by the harness.PreStepHook and PostStepHook inside HookRunner and connection parser._StepTracker to prevent duplicate step hooks or non-linear state transitions.trajectory_state_update events.initialize_conversation_response, populating them immediately in Conversation on start.Reintroduce generated files in package
Model Configuration Overhaul: Replaced the monolithic GeminiConfig with a more flexible ModelTarget and polymorphic ModelEndpoint class hierarchy (Gem
GeminiConfig with a more flexible ModelTarget and polymorphic ModelEndpoint class hierarchy (GeminiAPIEndpoint, VertexEndpoint).SubagentConfig and SubagentCapabilities allowing definition and inclusion of subagents in the main agent's configuration.SearchWeb tool and related SearchWebResult structured output.env) in McpStdioServer. Removed imageModel from CapabilitiesConfig to favor the new generic model targeting features.GeminiConfig with a more flexible ModelTarget and polymorphic ModelEndpoint class hierarchy (GeminiAPIEndpoint, VertexEndpoint).SubagentConfig and SubagentCapabilities allowing definition and inclusion of subagents in the main agent's configuration.SearchWeb tool and related SearchWebResult structured output.env) in McpStdioServer. Removed imageModel from CapabilitiesConfig to favor the new generic model targeting features.GeminiConfig.McpBridge references.SlashCommand structure to input content primitives to support built-in planning flows.Spinner into runInteractiveLoop with step-by-step progress tracking via agent.conversation.receiveSteps().AntigravityCancelledException and AntigravityExecutionException for robust error handling.Your coding agent can read these notes before it upgrades. Set up the MCP server →