Dosu LogoDosu Logo
Ask
Join our Discord
Organization avatar
Dosu DecantPublic
Dosu
DocumentsDosu Decant
Antigravity Plan Mode Ingest Gap
Antigravity Plan Mode Ingest Gap
Type
Topic
Status
Published
Created
Sep 5, 2026
Updated
Sep 30, 2026
Updated by
Dosu Bot

Antigravity Plan Mode Ingest Gap#

When Antigravity CLI 1.1.22 is invoked with --mode=plan, the agent reads files, runs tests, and writes a plan artifact — then enters agent_state: reviewing while awaiting human approval or rejection. Decant's sidecar-based capture mechanism is gated on the agent returning to idle, so no accounting sidecar is written during the review window and the session is absent from ingest until the review completes.

Two downstream effects follow from this gap:

  1. Missing session data during review. The in-flight transcript already contains the conversation ID, canonical transcript path, model, and cumulative token totals, but Decant never sees it until idle is reached.
  2. Title corruption after approval. The synthetic [Approved] <artifact> user event injected by the CLI can become the session's display title instead of the original /plan prompt.

How the Sidecar Gate Works#

Decant ingests Claude-compatible sessions by reading a .meta.json companion file alongside each .jsonl transcript. This sidecar is written by the Antigravity/Claude CLI only when the conversation reaches idle. The reader is readClaudeSidecarMeta() in src/ingest.ts, which looks for <session>.meta.json next to the .jsonl path; if the file is absent, ingest treats the session as incomplete and skips it.

The Claude session parser receives sidecar content via ClaudeParseOptions.sidecarMeta. Operational journal keys that encode runtime agent state — including "mode" — are explicitly discarded in IGNORED_JOURNAL_META. This means even if reviewing appeared in the transcript journal, Decant would not act on it; the gate is at the sidecar-write level, which is external to Decant.


Plan Mode Lifecycle and the Ingest Window#

/plan prompt
    │
    ▼
agent reads files, runs tests, writes plan artifact
    │
    ▼
agent_state: "reviewing" ◄── Decant cannot see session here (no sidecar)
    │
    ├── Approve → implementation begins → eventually idle → sidecar written → ingestible
    │
    └── Reject → edit discarded → returns to idle → sidecar written → ingestible

The ingest gap spans the entire review window. The payload at this stage already carries everything Decant needs (conversation ID, transcript path, model, cumulative input/output totals), but is unreachable until idle is signalled.


Title Corruption: The [Approved] <artifact> Event#

After the user approves a plan, the Antigravity CLI appends a synthetic user event with the text [Approved] <artifact> to the conversation transcript. Decant's Claude parser derives the session title with a three-tier precedence:

  1. customTitle — from custom-title journal records when the user renames a session (highest priority)
  2. promptTitle — from the first user message with a text block (middle priority)
  3. metadataTitle — from ai-title or summary journal records (lowest priority)

The final title is customTitle ?? promptTitle ?? metadataTitle. If a user has renamed their Claude session (via custom-title records), that name always wins, even if the approval event or AI-generated title exists. When multiple renames occur, the latest custom-title record takes precedence.

When no user-provided custom title exists, the approval event can interfere with title resolution. If the original /plan prompt is part of the same JSONL file, promptTitle will be set correctly from it and the [Approved] event has no effect on the title. However, if the plan run and the approval land in separate transcript segments — or if the parser encounters the synthetic event before the original prompt due to ordering — the [Approved] <artifact> string wins as promptTitle, becoming the display title for the session in Decant's UI and ls output.

The fallback path is metadataTitle, sourced from ai-title or summary journal records . Neither is guaranteed to be present in plan-mode sessions before idle.


Current State and Workarounds#

Decant has no Antigravity-specific parser; plan-mode sessions are processed through the existing Claude session parser (src/sources/claude.ts). As of 2026-09-05, there are no open issues or PRs targeting this behavior — the gap is structural and tied to when the CLI writes its sidecar.

Immediate workarounds:

  • Run decant sync manually after a plan review completes (approve or reject) to capture the session once the sidecar exists.
  • If the title is wrong, use decant show <id> to inspect the full transcript and identify the actual originating prompt.

The gap affects cost accounting, full-text search, and session listing for any plan run currently under review. Sessions are not lost — the JSONL transcript is preserved on disk — they are simply not yet visible to Decant until the sidecar materializes at idle.

Documents
Antigravity Model Canonicalization and Cost Fallback
Antigravity Plan Mode Ingest Gap
Antigravity Two-File Source Identity
Antigravity Usage and Cost Capture
Badge Backdrop-Filter Checkerboarding
Bun Standalone Compilation
Claude API Cost Tracking
AGENTS
pricing
Codex MCP Call Rendering
Database Info Query Performance
Decant Runtime Architecture
AGENTS
README
README
routes
Deleted Session Tombstone Semantics
routes
SECURITY
Documentation Architecture
AGENTS
CONTRIBUTING
Decision log and roadmap context (through 2026-08-03)
History: the Rust/Elixir/Swift to TypeScript cutover (2026-07)
Gemini and Antigravity Source Replay Semantics
Gemini CLI Chat Record Parsing
Ingest-Time Cost Semantics
Decision log and roadmap context (through 2026-08-03)
History: the Rust/Elixir/Swift to TypeScript cutover (2026-07)
pricing
README
Local API and Report Routes
README
README
routes
MCP Server Integration
Recommendation Scoring
Release Automation
distribution
Session Analytics and Statistics
AGENTS
routes
Session Lifecycle Management
AGENTS
README
routes
Session List UI Constraints
README
Sidechain Subagent Session Modeling
Tool Call ID Attribution
UI Restyle Contract Tests
Archive schema: incident history behind the migration rules
CODE_OF_CONDUCT
PULL_REQUEST_TEMPLATE
README
README
README
README
README
Source-Serif-OFL
logging