diff --git a/docs/ls-binary-analysis.md b/docs/ls-binary-analysis.md
new file mode 100644
index 0000000..2e0a682
--- /dev/null
+++ b/docs/ls-binary-analysis.md
@@ -0,0 +1,834 @@
+# LS Binary Analysis — Reverse Engineering Notes
+
+Source: `strings` analysis of `/usr/share/antigravity/resources/app/extensions/antigravity/bin/language_server_linux_x64`
+
+---
+
+## Model IDs (All Known)
+
+### Placeholder Models (M0–M50)
+
+51 placeholder model slots (`MODEL_PLACEHOLDER_M0` through `MODEL_PLACEHOLDER_M50`).
+
+**Known mappings** (confirmed via traffic analysis):
+
+| Placeholder | Model |
+| ----------------------- | ------------------- |
+| `MODEL_PLACEHOLDER_M7` | Gemini 3 Pro (Low) |
+| `MODEL_PLACEHOLDER_M8` | Gemini 3 Pro (High) |
+| `MODEL_PLACEHOLDER_M12` | Claude Opus 4.5 |
+| `MODEL_PLACEHOLDER_M18` | Gemini 3 Flash |
+| `MODEL_PLACEHOLDER_M26` | Claude Opus 4.6 |
+
+Remaining placeholders (M0–M6, M9–M11, M13–M17, M19–M25, M27–M50) are unmapped — likely reserved for future models or A/B test variants.
+
+### Claude Models
+
+| Model ID | Notes |
+| --------------------------------------------------- | ------------------ |
+| `MODEL_CLAUDE_3_HAIKU_20240307` | Legacy |
+| `MODEL_CLAUDE_3_SONNET_20240229` | Legacy |
+| `MODEL_CLAUDE_3_OPUS_20240229` | Legacy |
+| `MODEL_CLAUDE_3_5_HAIKU_20241022` | |
+| `MODEL_CLAUDE_3_5_SONNET_20240620` | |
+| `MODEL_CLAUDE_3_5_SONNET_20241022` | |
+| `MODEL_CLAUDE_3_5_SONNET_BYOK` | Bring Your Own Key |
+| `MODEL_CLAUDE_3_7_SONNET_20250219` | |
+| `MODEL_CLAUDE_3_7_SONNET_20250219_THINKING` | Extended thinking |
+| `MODEL_CLAUDE_3_7_SONNET_BYOK` | BYOK |
+| `MODEL_CLAUDE_3_7_SONNET_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
+| `MODEL_CLAUDE_3_7_SONNET_THINKING_BYOK` | BYOK + thinking |
+| `MODEL_CLAUDE_3_7_SONNET_THINKING_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
+| `MODEL_CLAUDE_4_SONNET` | Claude 4 Sonnet |
+| `MODEL_CLAUDE_4_SONNET_THINKING` | + thinking |
+| `MODEL_CLAUDE_4_SONNET_BYOK` | BYOK |
+| `MODEL_CLAUDE_4_SONNET_DATABRICKS` | Databricks hosted |
+| `MODEL_CLAUDE_4_SONNET_THINKING_DATABRICKS` | Databricks + think |
+| `MODEL_CLAUDE_4_SONNET_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
+| `MODEL_CLAUDE_4_SONNET_THINKING_OPEN_ROUTER_BYOK` | OpenRouter BYOK |
+| `MODEL_CLAUDE_4_SONNET_THINKING_BYOK` | BYOK + thinking |
+| `MODEL_CLAUDE_4_OPUS` | Claude 4 Opus |
+| `MODEL_CLAUDE_4_OPUS_THINKING` | + thinking |
+| `MODEL_CLAUDE_4_OPUS_BYOK` | BYOK |
+| `MODEL_CLAUDE_4_OPUS_THINKING_BYOK` | BYOK + thinking |
+| `MODEL_CLAUDE_4_5_SONNET` | Claude 4.5 Sonnet |
+| `MODEL_CLAUDE_4_5_SONNET_THINKING` | + thinking |
+| `MODEL_CLAUDE_4_5_HAIKU` | Claude 4.5 Haiku |
+| `MODEL_CLAUDE_4_5_HAIKU_THINKING` | + thinking |
+
+### Google Models
+
+| Model ID | Notes |
+| ------------------------------------------------------ | ----------------------- |
+| `MODEL_GOOGLE_GEMINI_1_0_PRO` | Legacy |
+| `MODEL_GOOGLE_GEMINI_1_5_PRO` | Legacy |
+| `MODEL_GOOGLE_GEMINI_2_0_FLASH` | |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH` | |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE` | |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING` | |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING_TOOLS` | With tool use |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_IMAGE_PREVIEW` | Image input |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_04_17` | April preview |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_05_20` | May preview |
+| `MODEL_GOOGLE_GEMINI_2_5_FLASH_PREVIEW_05_20_THINKING` | May preview + thinking |
+| `MODEL_GOOGLE_GEMINI_2_5_PRO` | |
+| `MODEL_GOOGLE_GEMINI_2_5_PRO_EVAL` | Evaluation variant |
+| `MODEL_GOOGLE_GEMINI_COMPUTER_USE_EXPERIMENTAL` | Browser/computer use |
+| `MODEL_GOOGLE_GEMINI_EXP_1206` | December experiment |
+| `MODEL_GOOGLE_GEMINI_FOR_GOOGLE_2_5_PRO` | Google-internal 2.5 Pro |
+| `MODEL_GOOGLE_GEMINI_INTERNAL_BYOM` | Bring Your Own Model |
+| `MODEL_GOOGLE_GEMINI_INTERNAL_TAB_FLASH_LITE` | Tab completion model |
+| `MODEL_GOOGLE_GEMINI_INTERNAL_TAB_JUMP_FLASH_LITE` | Tab-jump completion |
+| `MODEL_GOOGLE_GEMINI_TRAINING_POLICY` | RLHF/training policy |
+| `MODEL_GOOGLE_TRAINING_CHECKPOINT` | Training checkpoint |
+| `MODEL_GOOGLE_TRAINING_JUDGE` | Evaluation judge |
+| **Codename models** (likely Gemini 3.x variants): | |
+| `MODEL_GOOGLE_GEMINI_RIFTRUNNER` | Codename |
+| `MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_HIGH` | High compute |
+| `MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_LOW` | Low compute |
+| `MODEL_GOOGLE_GEMINI_HORIZONDAWN` | Codename |
+| `MODEL_GOOGLE_GEMINI_COSMICFORGE` | Codename |
+| `MODEL_GOOGLE_GEMINI_INFINITYJET` | Codename |
+| `MODEL_GOOGLE_GEMINI_INFINITYBLOOM` | Codename |
+| `MODEL_GOOGLE_GEMINI_NEMOSREEF` | Codename |
+| `MODEL_GOOGLE_GEMINI_PUREPRISM` | Codename |
+| `MODEL_GOOGLE_GEMINI_ORIONFIRE` | Codename |
+| `MODEL_GOOGLE_GEMINI_RAINSONG` | Codename |
+| `MODEL_GOOGLE_GEMINI_GENTLEISLAND` | Codename |
+| `MODEL_GOOGLE_JARVIS_PROXY` | Jarvis proxy endpoint |
+| `MODEL_GOOGLE_JARVIS_V4S` | Jarvis v4s model |
+
+### OpenAI Models
+
+| Model ID | Notes |
+| ---------------------------------- | ---------------- |
+| `MODEL_OPENAI_COMPATIBLE` | Generic compat |
+| `MODEL_OPENAI_GPT_OSS_120B_MEDIUM` | Open-source 120B |
+
+---
+
+## gRPC Services
+
+### LanguageServerService (137+ methods)
+
+The main service running locally on the user's machine. Communicates with both
+the extension and the API server.
+
+
+Full method list (click to expand)
+
+```
+AcceptTermsOfService
+AcknowledgeCascadeCodeEdit
+AcknowledgeCodeActionStep
+AddToBrowserWhitelist
+AddTrackedWorkspace
+BrowserValidateCascadeOrCancelOverlayGenerate
+CancelCascadeInvocation
+CancelCascadeSteps
+CaptureConsoleLogs
+CaptureScreenshot
+ConvertTrajectoryToMarkdown
+CopyBuiltinWorkflowToWorkspace
+CopyTrajectory
+CreateCustomizationFile
+CreateReplayWorkspace
+CreateTrajectoryShare
+CreateWorktree
+DeleteCascadeMemory
+DeleteCascadeTrajectory
+DeleteMediaArtifact
+DeleteQueuedUserInputStep
+DumpFlightRecorder
+DumpPprof
+Exit
+FocusUserPage
+ForceBackgroundResearchRefresh
+GenerateCommitMessage
+GetAgentScripts
+GetAllBrowserWhitelistedUrls
+GetAllCascadeTrajectories
+GetAllCustomAgentConfigs
+GetAllRules
+GetAllSkills
+GetAllWorkflows
+GetArtifactSnapshots
+GetAvailableCascadePlugins
+GetBrowserOpenConversation
+GetBrowserWhitelistFilePath
+GetCascadeMemories
+GetCascadeModelConfigData
+GetCascadeModelConfigs
+GetCascadeNuxes
+GetCascadePluginById
+GetCascadeTrajectory
+GetCascadeTrajectoryGeneratorMetadata
+GetCascadeTrajectorySteps
+GetChangelog
+GetCodeValidationStates
+GetCommandModelConfigs
+GetDebugDiagnostics
+GetMatchingContextScopeItems
+GetMcpServerStates
+GetMcpServerTemplates
+GetModelResponse
+GetModelStatuses
+GetPatchAndCodeChange
+GetProfileData
+GetRepoInfos
+GetRevertPreview
+GetRevisionArtifact
+GetStaticExperimentStatus
+GetStatus
+GetTeamOrganizationalControls
+GetTermsOfService
+GetTranscription
+GetUnleashData
+GetUserAnalyticsSummary
+GetUserMemories
+GetUserSettings
+GetUserStatus
+GetUserTrajectory
+GetUserTrajectoryDebug
+GetUserTrajectoryDescriptions
+GetWebDocsOptions
+GetWorkingDirectories
+GetWorkspaceEditState
+GetWorkspaceInfos
+HandleCascadeUserInteraction
+HandleScreenRecording
+HandleStreamingCommand
+Heartbeat
+ImportFromCursor
+InitializeCascadePanelState
+InstallCascadePlugin
+ListMcpResources
+ListPages
+LoadReplayConversation
+LoadTrajectory
+MigrateApiKey
+OpenUrl
+ProvideCompletionFeedback
+RecordAnalyticsEvent
+RecordChatFeedback
+RecordChatPanelSession
+RecordCommitMessageSave
+RecordEvent
+RecordInteractiveCascadeFeedback
+RecordLints
+RecordSearchDocOpen
+RecordSearchResultsView
+RecordUserGrep
+RecordUserStepSnapshot
+RefreshContextForIdeAction
+RefreshMcpServers
+RegisterGdmUser
+RemoveTrackedWorkspace
+ReplayGroundTruthTrajectory
+ResetOnboarding
+ResolveOutstandingSteps
+RevertToCascadeStep
+SaveMediaAsArtifact
+SaveScreenRecording
+SendActionToChatPanel
+SendAllQueuedMessages
+SendUserCascadeMessage
+SetBaseExperiments
+SetBrowserOpenConversation
+SetUserSettings
+SetWorkingDirectories
+SetupUniversitySandbox
+ShouldEnableUnleash
+SignalExecutableIdle
+SimulateSegFault
+SkipOnboarding
+SmartFocusConversation
+SmartOpenBrowser
+StartCascade
+StartScreenRecording
+StatUri
+StreamCascadePanelReactiveUpdates
+StreamCascadeReactiveUpdates
+StreamCascadeSummariesReactiveUpdates
+StreamTerminalShellCommand
+StreamUserTrajectoryReactiveUpdates
+UpdateCascadeMemory
+UpdateConversationAnnotations
+UpdateDevExperiments
+UpdateEnterpriseExperimentsFromUrl
+UpdatePRForWorktree
+WellSupportedLanguages
+```
+
+
+
+**Notable new findings:**
+
+- `StreamCascadeReactiveUpdates` — server-sent streaming RPC for real-time cascade updates (alternative to our current polling approach)
+- `GetUnleashData` — direct access to feature flag data
+- `GetUserMemories` — persistent memory system
+- `DumpFlightRecorder` / `DumpPprof` — debug/profiling endpoints
+- `SimulateSegFault` — intentional crash trigger (testing?)
+- `ImportFromCursor` — competitive migration tool
+- `GetAllRules` / `GetAllWorkflows` / `GetAllSkills` — customization system
+- `StreamTerminalShellCommand` — streaming terminal execution
+- `HandleScreenRecording` / `CaptureScreenshot` — browser automation
+- `CreateWorktree` / `UpdatePRForWorktree` — git worktree integration
+- `ListMcpResources` / `RefreshMcpServers` — MCP tool integration
+
+### ApiServerService (87+ methods)
+
+Cloud-hosted API server. LS communicates with this for analytics, model config,
+and remote operations.
+
+
+Full method list (click to expand)
+
+```
+ApplyTrajectoryHeuristics
+BatchRecordChatRequestRecords
+BatchRecordCompletions
+BatchRecordPrompts
+BatchRecordUserLastUpdateTimes
+CheckHybridDeploymentStatus
+ContactForm
+CreateHybridDeploymentInternal
+CreateTrajectoryShare
+DeleteAllowlist
+DeleteOidcProvider
+DeleteTeamOrganizationalControls
+DeleteTrajectoryShare
+ExchangeOidcCode
+FetchTrajectoryShare
+FetchTrajectoryShareByUser
+GenerateSyntheticRule
+GetAllOidcProviders
+GetAllowlist
+GetCascadeModelConfigs
+GetCascadeNuxes
+GetChatMessage
+GetCommandModelConfigs
+GetCompletionExamples
+GetDefaultWorkflowTemplates
+GetDeploymentConfig
+GetEmbeddings
+GetExtensionStats
+GetHybridDeploymentsInternal
+GetImageGeneration
+GetMQuery
+GetMcpServerTemplates
+GetModelInfos
+GetModelStatuses
+GetOidcAuthorizationUrl
+GetStatus
+GetStreamingExternalChatCompletions
+GetStreamingModelAPITextCompletion
+GetTeamOidcProviders
+GetTeamOrganizationalControls
+GetTeamOrganizationalControlsForSite
+GetTranscription
+GetUnleashContextFields
+GetUserAllowlist
+GetWebDocsOptions
+GetWebSearchRedirect
+GetWebSearchResults
+InsertAllowlist
+IsConversationSharingBlocked
+JoinWaitlist
+LogChatHybrid
+LogCompletionsHybrid
+LogFeedbackHybrid
+PingGemini
+ProvideFeedback
+RecordAsyncTelemetry
+RecordCascadeUsage
+RecordChatFeedback
+RecordChatModelNodeRun
+RecordChatPanelSession
+RecordChatSuccessfully
+RecordCodeTrackerUpdates
+RecordCommandUsage
+RecordCommitMessageGeneration
+RecordCommitMessageSave
+RecordCompletionExample
+RecordCompletions
+RecordContextRefresh
+RecordContextToPrompt
+RecordCortexCodingPlan
+RecordCortexCodingStep
+RecordCortexCodingStepFeedback
+RecordCortexError
+RecordCortexExecutionMetadata
+RecordCortexFeedback
+RecordCortexGeneratorMetadata
+RecordCortexStep
+RecordCortexTrajectory
+RecordCortexTrajectoryStep
+RecordDebounce
+RecordEvent
+RecordFullTrajectoryAnalytics
+RecordGitTelemetry
+RecordMQuery
+RecordNewCortexPlan
+RecordOpportunities
+RecordPinnedContext
+RecordProfilingData
+RecordReadUrlContent
+RecordSearch
+RecordSearchDocOpen
+RecordSearchResults
+RecordSearchResultsView
+RecordStateInitializationData
+RecordTrajectorySegmentAnalytics
+RecordTrajectorySegmentEvents
+RefreshOidcToken
+RegisterHybridDeployment
+RegisterOidcProvider
+RemoveHybridDeploymentInternal
+RunCodeAlignment
+SendReferralEmail
+StreamingTest
+Subscribe
+SubscribeToBlog
+SupportsRemoteIndexing
+UnsubscribeFromEmails
+UploadErrorTraces
+UpsertDeploymentConfig
+UpsertTeamOrganizationalControls
+UpsertTeamOrganizationalControlsForSite
+ValidateEmail
+ValidateRegistrationCode
+WhoAmI
+```
+
+
+
+**Notable:**
+
+- `GetStreamingExternalChatCompletions` — streaming chat API
+- `GetStreamingModelAPITextCompletion` — streaming text completion
+- `GetImageGeneration` — image generation capability
+- `GetMQuery` / `RecordMQuery` — unknown "MQuery" system
+- `GetEmbeddings` — embedding generation
+- `PingGemini` — health check for Gemini
+- `RecordCascadeUsage` — usage reporting (our MITM target!)
+- `RunCodeAlignment` — code alignment/formatting service
+- `GetWebSearchResults` — web search integration
+
+### ExtensionServerService (53+ methods)
+
+Extension-side service that the LS calls back into for IDE operations.
+
+
+Full method list (click to expand)
+
+```
+AddAnnotation
+BroadcastConversationDeletion
+CheckTerminalShellSupport
+EndAudioRecording
+ExecuteCommand
+FetchMCPAuthToken
+FindAllReferences
+FocusIDEWindow
+GetBrowserOnboardingPort
+GetChromeDevtoolsMcpUrl
+GetCurrentAudioRecording
+GetDefinition
+GetLintErrors
+GetSecretValue
+HandleAsyncPostMessage
+HandleProposeCodeExtensionVerification
+InsertCodeAtCursor
+IsAgentManagerEnabled
+LanguageServerStarted
+LaunchBrowser
+LogEvent
+OpenAntigravityRulesFile
+OpenConfigurePluginsPage
+OpenConversationWorkspaceQuickPick
+OpenDiffZones
+OpenExternalUrl
+OpenFilePointer
+OpenPluginConfigModal
+OpenPluginPage
+OpenSetting
+OpenTerminal
+OpenVirtualFile
+PlaySound
+PushUnifiedStateSyncUpdate
+ReadTerminal
+RecordErrorDelta
+RemoveAnnotation
+RestartUserStatusUpdater
+RunExtensionCode
+SaveDocument
+SendTerminalInput
+ShowAnnotation
+ShowConversationPicker
+ShowTerminal
+SmartFocusConversation
+StartAudioRecording
+StoreSecretValue
+SubscribeToUnifiedStateSyncTopic
+TerminalResearchResult
+TerminateCommand
+UpdateCascadeTrajectorySummaries
+UpdateDetailedViewWithCascadeInputPath
+WriteCascadeEdit
+```
+
+
+
+**Notable:**
+
+- `FetchMCPAuthToken` — the extension handles MCP auth token fetching
+- `GetChromeDevtoolsMcpUrl` — Chrome DevTools MCP integration
+- `RunExtensionCode` — the LS can execute arbitrary extension code
+- `StartAudioRecording` / `EndAudioRecording` — audio input support
+- `PlaySound` — audio output
+- `LaunchBrowser` — browser automation trigger
+- `StoreSecretValue` / `GetSecretValue` — secret management
+
+### SeatManagementService (97+ methods)
+
+Team/organization management. Handles licensing, seats, credits.
+
+**Notable methods:**
+
+- `AddExtraFlexCreditsInternal` — credit topup
+- `GetCascadeAnalytics` — usage analytics
+- `GetPlanStatus` — subscription status
+- `GetTeamCreditEntries` — credit ledger
+- `GetTeamSettings` / `UpdateTeamConfig` — team configuration
+- `GetWrapped` — Spotify-wrapped style usage summary
+- `UpdateCascadeWebSearchEnabled` — toggle web search
+- `SetUserApiProviderKey` — BYOK key management
+
+### ModelManagementService (8 methods)
+
+Self-hosted model management for hybrid deployments.
+
+```
+AddModel
+DeleteModel
+ListInferenceServers
+ListModels
+PollInferenceServerMemory
+StartInferenceServer
+StopInferenceServer
+UpdateInferenceServerMemory
+```
+
+### PredictionService (~15 methods)
+
+Google AI Platform prediction service (the upstream LLM API).
+
+```
+AsyncGenerateContent
+CompleteCode
+CountTokens
+DirectPredict
+DirectRawPredict
+EmbedContent
+Explain
+FetchAvailableModels
+FetchPredictOperation
+GenerateContent
+Predict
+PredictLongRunning
+RawPredictLongRunning
+RawPredict
+RetrieveUserQuota ← quota retrieval!
+TestGrpcPredict
+```
+
+### CloudCode Service (22 methods)
+
+Google internal CloudCode REST-like API at `daily-cloudcode-pa.googleapis.com`.
+
+```
+CompleteCode
+FetchAdminControls
+FetchCodeCustomizationState
+GenerateChat
+GenerateCode
+GetCodeAssistGlobalUserSetting
+InternalAtomicAgenticChat ← agentic chat endpoint!
+ListAgents
+ListCloudAICompanionProjects
+ListExperiments
+ListModelConfigs
+ListRemoteRepositories
+LoadCodeAssist
+MigrateDatabaseCode
+OnboardUser
+OnboardUserBackgroundTasks
+RecordClientEvent
+RecordCodeAssistMetrics
+RecordSmartchoicesFeedback
+SearchSnippets
+SetCodeAssistGlobalUserSetting
+TransformCode
+```
+
+---
+
+## REST Endpoints (v1internal)
+
+Discovered REST endpoints on `daily-cloudcode-pa.googleapis.com`:
+
+```
+v1internal:checkUrlDenylist
+v1internal:completeCode
+v1internal:countTokens
+v1internal:fetchAdminControls
+v1internal:fetchAvailableModels
+v1internal:fetchCodeCustomizationState
+v1internal:fetchUserInfo
+v1internal:generateChat
+v1internal:generateCode
+v1internal:generateContent
+v1internal:getCodeAssistGlobalUserSetting
+v1internal:internalAtomicAgenticChat
+v1internal:listAgents
+v1internal:listCloudAICompanionProjects
+v1internal:listExperiments
+v1internal:listModelConfigs
+v1internal:listRemoteRepositories
+v1internal:loadCodeAssist
+v1internal:logClientError
+v1internal:migrateDatabaseCode
+v1internal:onboardUser
+v1internal:onboardUserBackgroundTasks
+v1internal:recordClientEvent
+v1internal:recordCodeAssistMetrics
+v1internal:recordSmartchoicesFeedback
+v1internal:recordTrajectoryAnalytics
+v1internal:retrieveUserQuota
+v1internal:rewriteUri
+v1internal:searchSnippets
+v1internal:setCodeAssistGlobalUserSetting
+v1internal:setUserSettings
+v1internal:streamGenerateChat
+v1internal:streamGenerateContent ← main LLM API
+v1internal:tabChat
+v1internal:transformCode
+```
+
+**Key endpoints:**
+
+- `streamGenerateContent` — the main LLM streaming endpoint (confirmed via MITM)
+- `internalAtomicAgenticChat` — agentic chat (full tool-use loop in one call?)
+- `retrieveUserQuota` — quota/credits check
+- `listModelConfigs` — available models and configuration
+- `fetchAvailableModels` — model discovery
+- `countTokens` — tokenization
+- `streamGenerateChat` — streaming chat variant
+- `tabChat` — tab completion chat
+- `fetchUserInfo` — user information
+- `listExperiments` — A/B test experiments
+
+---
+
+## Proto Packages (v1internal)
+
+Internal proto packages discovered in the binary:
+
+```
+google/internal/cloud/code/v1internal/cloudcode
+google/internal/cloud/code/v1internal/credits
+google/internal/cloud/code/v1internal/jetski
+google/internal/cloud/code/v1internal/metrics
+google/internal/cloud/code/v1internal/model
+google/internal/cloud/code/v1internal/onboarding
+google/internal/cloud/code/v1internal/prediction
+google/internal/cloud/code/v1internal/remote
+```
+
+**Notable:**
+
+- `credits` — credit/quota system proto definitions
+- `jetski` — internal codename for the cascade/agent system
+- `prediction` — AI model prediction layer
+- `metrics` — telemetry/analytics
+
+---
+
+## Feature Flags & Configuration
+
+### Proxy Detection
+
+```
+DETECT_AND_USE_PROXY_UNSPECIFIED (0, default — ignores proxy)
+DETECT_AND_USE_PROXY_ENABLED (1, honors HTTPS_PROXY)
+DETECT_AND_USE_PROXY_DISABLED (2, explicitly ignores proxy)
+```
+
+### Cascade Config Keys
+
+```
+CASCADE_ENFORCE_QUOTA ← quota enforcement toggle
+CASCADE_BASE_MODEL_ID ← default model selection
+CASCADE_ENABLE_MCP_TOOLS ← MCP tool use
+CASCADE_ANTIGRAVITY_BROWSER_TOOLS_ENABLED
+CASCADE_AUTO_FIX_LINTS
+CASCADE_WEB_SEARCH_TOOL_ENABLED/DISABLED
+CASCADE_BACKGROUND_RESEARCH_CONFIG_OVERRIDE
+CASCADE_GLOBAL_CONFIG_OVERRIDE
+CASCADE_MEMORY_CONFIG_OVERRIDE
+CASCADE_DEFAULT_MODEL_OVERRIDE
+CASCADE_PLAN_BASED_CONFIG_OVERRIDE
+CASCADE_ENABLE_AUTOMATED_MEMORIES
+```
+
+### Model Status
+
+```
+MODEL_STATUS_UNSPECIFIED
+MODEL_STATUS_INFO
+MODEL_STATUS_WARNING
+```
+
+### Cortex Step Types
+
+These are the internal names for the agent's tool-use steps:
+
+```
+CORTEX_STEP_TYPE_CODE_ACTION
+CORTEX_STEP_TYPE_COMMAND_STATUS
+CORTEX_STEP_TYPE_COMPILE_TOOL_PYLINT
+CORTEX_STEP_TYPE_GREP_SEARCH
+CORTEX_STEP_TYPE_RUN_COMMAND
+CORTEX_STEP_TYPE_VIEW_CODE_ITEM
+```
+
+### Cortex Generation Types
+
+```
+CORTEX_GENERATION_TYPE_CCI_RESEARCH
+CORTEX_GENERATION_TYPE_DYNAMIC_TRAJECTORY
+CORTEX_GENERATION_TYPE_FILE_RESEARCH
+CORTEX_GENERATION_TYPE_GRAPH
+CORTEX_GENERATION_TYPE_GROUNDTRUTH
+CORTEX_GENERATION_TYPE_INFORM
+CORTEX_GENERATION_TYPE_MASKED_GROUND_TRUTH_TRAJECTORY
+CORTEX_GENERATION_TYPE_REAPPLY_GROUND_TRUTH
+CORTEX_GENERATION_TYPE_STATIC_TRAJECTORY
+CORTEX_GENERATION_TYPE_VERIFY
+```
+
+---
+
+## Hardcoded URLs
+
+```
+https://play.googleapis.com/log ← Clearcut telemetry
+https://oauth2.googleapis.com/token ← Token refresh
+https://oauth2.googleapis.com/device/code ← Device auth flow
+https://www.googleapis.com/oauth2/v2/userinfo
+https://docs.googleapis.com/v1/documents/ ← Google Docs integration
+https://iamcredentials.googleapis.com/v1/ ← Service account impersonation
+```
+
+---
+
+## Miscellaneous Findings
+
+- **Unleash config**: Auth key `*:production.e44558998bfc35ea9584dc65858e4485fdaa5d7ef46903e0c67712d1`, domain `antigravity-unleash.goog`
+- **Sentry**: Has a sample rate config (`ANTIGRAVITY_SENTRY_SAMPLE_RATE`)
+- **Flight recorder**: Internal debug recording system (`DumpFlightRecorder`)
+- **Browser extension IDs**: Several Chrome extension IDs visible (`pebbhcjfokadbgbnlmogdkkaahmamnap`, etc.)
+- **Cortex memory**: `CORTEX_MEMORY_SOURCE_AUTO_CASCADE` — auto-generates memories from cascades
+- **RLHF/Training**: `MODEL_GOOGLE_TRAINING_JUDGE`, `MODEL_GOOGLE_TRAINING_CHECKPOINT`, `MODEL_GOOGLE_GEMINI_TRAINING_POLICY` — suggests the LS participates in model training/evaluation
+- **Hybrid deployment**: Multiple methods for on-prem/hybrid deployments (`CheckHybridDeploymentStatus`, `CreateHybridDeploymentInternal`, etc.)
+- **BYOK support**: Claude and OpenAI models have BYOK variants; also open-router and databricks hosting options
+- **Jetski**: Internal codename for the cascade/agent system. Google-internal health check: `http://jetski-server.corp.goog/healthz`
+- **XboxInferenceToolRequest**: Proto message `exa.chat_pb.XboxInferenceToolRequest` — "Xbox" is a codename for their inference tool system
+
+---
+
+## Protobuf Enum Numbers (from extension.js)
+
+Extracted from the compiled protobuf enum definitions in `extension.js`.
+These are the wire values sent in proto field 1 (model) of usage messages.
+
+### Placeholder Models
+
+| Enum `no` | Proto Name |
+| --------- | ------------------------- |
+| 1000 | MODEL_PLACEHOLDER_M0 |
+| 1001 | MODEL_PLACEHOLDER_M1 |
+| 1002 | MODEL_PLACEHOLDER_M2 |
+| 1003 | MODEL_PLACEHOLDER_M3 |
+| 1004 | MODEL_PLACEHOLDER_M4 |
+| 1005 | MODEL_PLACEHOLDER_M5 |
+| 1006 | MODEL_PLACEHOLDER_M6 |
+| 1007 | MODEL_PLACEHOLDER_M7 |
+| 1008 | MODEL_PLACEHOLDER_M8 |
+| 1009 | MODEL_PLACEHOLDER_M9 |
+| 1010 | MODEL_PLACEHOLDER_M10 |
+| 1011 | MODEL_PLACEHOLDER_M11 |
+| 1012 | MODEL_PLACEHOLDER_M12 |
+| 1013–1050 | MODEL_PLACEHOLDER_M13–M50 |
+
+### Claude Models
+
+| Enum `no` | Proto Name |
+| --------- | -------------------------------- |
+| 281 | MODEL_CLAUDE_4_SONNET |
+| 282 | MODEL_CLAUDE_4_SONNET_THINKING |
+| 290 | MODEL_CLAUDE_4_OPUS |
+| 291 | MODEL_CLAUDE_4_OPUS_THINKING |
+| 333 | MODEL_CLAUDE_4_5_SONNET |
+| 334 | MODEL_CLAUDE_4_5_SONNET_THINKING |
+| 340 | MODEL_CLAUDE_4_5_HAIKU |
+| 341 | MODEL_CLAUDE_4_5_HAIKU_THINKING |
+
+### Google Models
+
+| Enum `no` | Proto Name |
+| --------- | ------------------------------------------------ |
+| 246 | MODEL_GOOGLE_GEMINI_2_5_PRO |
+| 312 | MODEL_GOOGLE_GEMINI_2_5_FLASH |
+| 313 | MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING |
+| 323 | MODEL_GOOGLE_GEMINI_TRAINING_POLICY |
+| 326 | MODEL_GOOGLE_GEMINI_INTERNAL_BYOM |
+| 327 | MODEL_GOOGLE_GEMINI_FOR_GOOGLE_2_5_PRO |
+| 328 | MODEL_GOOGLE_GEMINI_NEMOSREEF |
+| 329 | MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING_TOOLS |
+| 330 | MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE |
+| 331 | MODEL_GOOGLE_GEMINI_2_5_PRO_EVAL |
+| 332 | MODEL_GOOGLE_GEMINI_2_5_FLASH_IMAGE_PREVIEW |
+| 335 | MODEL_GOOGLE_GEMINI_COMPUTER_USE_EXPERIMENTAL |
+| 336 | MODEL_GOOGLE_GEMINI_HORIZONDAWN |
+| 337 | MODEL_GOOGLE_GEMINI_PUREPRISM |
+| 338 | MODEL_GOOGLE_GEMINI_GENTLEISLAND |
+| 339 | MODEL_GOOGLE_GEMINI_RAINSONG |
+| 343 | MODEL_GOOGLE_GEMINI_ORIONFIRE |
+| 344 | MODEL_GOOGLE_GEMINI_INTERNAL_TAB_FLASH_LITE |
+| 345 | MODEL_GOOGLE_GEMINI_INTERNAL_TAB_JUMP_FLASH_LITE |
+| 346 | MODEL_GOOGLE_JARVIS_PROXY |
+| 347 | MODEL_GOOGLE_GEMINI_COSMICFORGE |
+| 348 | MODEL_GOOGLE_GEMINI_RIFTRUNNER |
+| 349 | MODEL_GOOGLE_JARVIS_V4S |
+| 350 | MODEL_GOOGLE_GEMINI_INFINITYJET |
+| 351 | MODEL_GOOGLE_GEMINI_INFINITYBLOOM |
+| 352 | MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_LOW |
+| 353 | MODEL_GOOGLE_GEMINI_RIFTRUNNER_THINKING_HIGH |
+
+### OpenAI Models
+
+| Enum `no` | Proto Name |
+| --------- | -------------------------------- |
+| 342 | MODEL_OPENAI_GPT_OSS_120B_MEDIUM |
+
+### Key Mapping Summary (for proxy constants.rs)
+
+| Our Name | Placeholder | Proto Enum |
+| ------------------- | ----------- | ---------- |
+| Gemini 3 Pro (Low) | M7 | 1007 |
+| Gemini 3 Pro (High) | M8 | 1008 |
+| Claude Opus 4.5 | M12 | 1012 |
+| Gemini 3 Flash | M18 | 1018 |
+| Claude Opus 4.6 | M26 | 1026 |
diff --git a/docs/mitm-interception-status.md b/docs/mitm-interception-status.md
index ce68b07..79b72cc 100644
--- a/docs/mitm-interception-status.md
+++ b/docs/mitm-interception-status.md
@@ -240,3 +240,36 @@ sudo update-ca-certificates
## Next Steps
→ See `docs/standalone-ls-todo.md` for standalone LS isolation work
+→ See `docs/ls-binary-analysis.md` for comprehensive binary reverse engineering
+
+## New Findings (from binary analysis)
+
+### Alternative to Polling: `StreamCascadeReactiveUpdates`
+
+The LS has a streaming gRPC method `StreamCascadeReactiveUpdates` that pushes
+cascade state changes in real-time via server-sent streaming. The extension uses
+this instead of polling `GetCascadeTrajectorySteps`.
+
+**Potential improvement:** If we switch from polling to this streaming RPC, we'd
+get lower latency and less backend traffic. However, our current polling approach
+works reliably and doesn't require maintaining a long-lived gRPC stream.
+
+### Quota Endpoint: `retrieveUserQuota`
+
+The `PredictionService/RetrieveUserQuota` gRPC method and
+`v1internal:retrieveUserQuota` REST endpoint provide quota/credit information.
+This could be used to implement a proper `/v1/quota` endpoint instead of
+scraping the LS's own quota tracking.
+
+### `internalAtomicAgenticChat`
+
+A REST endpoint that appears to handle the entire agentic chat loop atomically
+(tool calls + responses in one request?). Investigation needed to understand
+the request/response format.
+
+### Credits System
+
+The `google/internal/cloud/code/v1internal/credits` proto package exists with
+`Credits_CreditType` enum. The `CASCADE_ENFORCE_QUOTA` config key controls
+whether quotas are enforced. Related methods: `AddExtraFlexCreditsInternal`,
+`GetTeamCreditEntries`, `GetPlanStatus`.
diff --git a/docs/standalone-ls-todo.md b/docs/standalone-ls-todo.md
index a3b55d4..18063d9 100644
--- a/docs/standalone-ls-todo.md
+++ b/docs/standalone-ls-todo.md
@@ -72,3 +72,16 @@ curl -sk "https://127.0.0.1:42200/.../StartCascade" ...
- Model IDs: M18=Flash, M8=Pro-High, M7=Pro-Low, M26=Opus4.6, M12=Opus4.5
- LS binary: `/usr/share/antigravity/resources/app/extensions/antigravity/bin/language_server_linux_x64`
- API endpoint: `daily-cloudcode-pa.googleapis.com/v1internal:streamGenerateContent?alt=sse`
+
+## New Leads (from binary analysis)
+
+- **`GetUnleashData`** — LS method to fetch Unleash flags directly. Could compare
+ main vs standalone to check if flags differ.
+- **`GetStaticExperimentStatus`** / `SetBaseExperiments` / `UpdateDevExperiments` —
+ experiment management. Standalone might be missing experiment overrides.
+- **`FetchAdminControls`** — admin-level controls that might gate cascade execution.
+- **`LoadCodeAssist`** — initialization step that might be required before cascades work.
+- **`GetUserStatus` vs `GetUserMemories`** — check if standalone has auth context
+ by calling both.
+
+→ See `docs/ls-binary-analysis.md` for full RPC method catalog.