I have lost conversation history in the with early update app

[Solution] Recovering truncated/missing conversations — the verbosity: 2 parameter

I lost access to recent conversations in Antigravity and spent hours trying to recover them. The conversations existed as .pb files on disk, but the UI wouldn’t show them and the LanguageServer API (GetCascadeTrajectorySteps) was capping responses at ~819 steps for conversations that had 1,695+ steps. The startIndex and endIndex parameters were completely ignored — the API always returned the same first 819 steps.

The breakthrough came from reverse-engineering the Antigravity binary. Running strings on the Go binary revealed a component called CascadeClientStepTruncator that uses a verbosity parameter to control how many steps are returned. The default (0) aggressively truncates. Level 1 is moderate. Level 2 disables truncation entirely.

The fix is one parameter:

from antigravity_history.api import call_api

result = call_api(port, csrf, "GetCascadeTrajectorySteps", {
    "cascadeId": "<your-cascade-id>",
    "verbosity": 2
})

steps = result.get("steps", [])
# Now returns ALL steps, not just the first 819

For my 1,695-step conversation, this returned every single step. The aghistory export tool (pip install antigravity-history) doesn’t use this parameter, which is why its exports are also truncated for long conversations.

Other findings from the binary analysis:

  • The LanguageServer exposes 158+ gRPC methods across 18 services, including ConvertTrajectoryToMarkdown (which I haven’t tested yet)

  • The full service path is exa.language_server_pb.LanguageServerService

  • There are streaming endpoints (StreamCascadeReactiveUpdates, StreamCascadePanelReactiveUpdates) that might be useful for live monitoring

For the separate indexing bug (conversations exist as .pb files but don’t appear in the sidebar): this is a known issue where the LanguageServer loads conversations into memory on startup but doesn’t persist them to the SQLite store. The aghistory recover tool helps with re-indexing, but has its own bugs (a ValueError: too many values to unpack on line 409 of cli.py — fix by changing indexed, _ to indexed, _, _ on lines 332, 409, and 470).

Full credit to two Claude instances (Claude.ai and Claude Code CLI) that did the actual detective work — probing the API, disassembling the binary, and finding the verbosity parameter. I just kept pasting terminal output back and forth.

Hope this saves someone else the hours we spent on it.