# MobileCLI Changelog
## v10.2.0-rc.29 — Drawer Button Audit + Product Fixes
- **Full drawer audit**: Traced all 55 buttons end-to-end — every button wired, every activity exists, zero dead ends
- **Fixed: Swarm button dead-end** — User could type a goal and hit Launch, but script just exited. Now shows toast immediately
- **Fixed: Heroku method typo** — `installHerokupCLI` → `installHerokuCLI`
## v10.2.0-rc.28 — Full System Audit
- **Added: voice_server.py** — Standalone Twilio voice call server (100 lines) was in runtime but never in source
- **Fixed: Runtime sync** — All 33 Python files synced from source to runtime (was stuck at rc.22)
- **Cleaned: Stale git branches** — Deleted merged branches with 0 commits ahead
## v10.2.0-rc.27 — Dev Tooling Infrastructure
- **Added: CONTRIBUTING.md** — Onboarding doc for new contributors
- **Added: scripts/benchmark.sh** — Performance regression tracker (build time, test count, APK size)
- **Added: Dependency audit** — pip audit integration in pre-push hook
- First release built with full hook system (no --no-verify)
## v10.2.0-rc.26 — Fix All Broken Docs, Templates & Bootstrap
- **Rewritten: ~/CLAUDE.md template** — Was stuck at "Version: 8.0.0" for 30+ releases. Now deploys current content with all features
- **Fixed: .gitconfig** — `ai@mobilecli.com` → `user@mobilecli.com` (broke Vercel deploys)
- **Fixed: BOOTSTRAP_VERSION** — Stuck at v9.1.0, now bumped to force re-deploy on existing installs
- **Fixed: .claude/ agents** — Corrected test counts (130→110), drawer counts (61→55), removed nonexistent categories
- **Added: Dev tooling** — Pre-commit hook, pre-push hook, consistency audit, version sync, postmortem system
## v10.2.0-rc.25 — OACLI Agent System + Screen Agent + Browser Agent + Vision
- **OACLI Agent System**: Full AI agent runtime — 9 engines (phone, system, memory, file, plugin, task, scheduler, automation, vision), 9 gateways (webhook, telegram, discord, SMS, voice, screen, notification, twilio, browser), SecurityEngine with T0-T3 classification, audit trail, rate limits, kill switch
- **14-screen web console** at localhost:8766/v2: Dashboard, Chat, Models, Channels, Skills, Tools (79+ buttons), Automations, Tasks, Files, Plugins, System Monitor, Scheduler, CRM, Knowledge Base
- **Screen Agent**: AI accessibility overlay — reads any Android screen via AccessibilityNodeInfo tree, executes actions (click, type, scroll, tap, swipe, back/home/recents), floating bubble with 4-button panel, voice I/O
- **Browser Agent**: Native WebView with auto-injected AI widget on every page via evaluateJavascript(). Bypasses Samsung Internet bookmarklet stripping and CSP restrictions
- **Vision**: Claude Vision API for screenshot analysis. Screen Agent takes screenshots via AccessibilityService.takeScreenshot(), sends to Claude for analysis
- **Always-on daemon**: Wake-lock, auto-start on app boot, health polling every 5s, auto-reconnect
- **Version-gated runtime deployment**: ScriptInstaller compares VERSION file to BuildConfig.VERSION_NAME instead of broken file-exists guard. Fixes 24-release deployment bug
- **Real CRM/KB/Councils**: Phone contacts as CRM data source, knowledge base search across .md/.txt/.json/.py/.sh files, AI advisory councils
- **79+ tool buttons** in /v2 console: 9 category tabs (Device, Camera/Media, Comms, Sensors, Location, System, AI, Files, Automation)
- **`oacli` CLI**: start, stop, restart, status, log, doctor, security, audit, allow, deny
- **9-tab native OACLI dashboard**: Overview, Console, Models, Channels, Skills, Automation, Memory, Security, Logs
- **110+ tests** (Python pytest suite), all passing
- **Claude Code infrastructure**: 13 custom skills, 6 subagents, 6 modular rules, hooks for enforcement
- 35 stale MD files archived to docs/archive/
## v10.1.x — API Bug Fixes + Phone Mesh + Self-Test
- **C1-C4 API script bugs fixed**: per-PID IPC files, exit codes on timeout, custom timeouts, unit separator delimiter
- **Phone Mesh drawer button** + auto-install from assets
- **mcli-selftest**: 9-check post-install verification gate
- **Zero-touch mesh pairing** with netcat key exchange
- All pushed, tagged, released on GitHub (v10.1.0 through v10.1.7)
## v10.0.0-rc.3 — Phone Mesh + Multi-Agent + Bootstrap Refactor
- **Phone Mesh v1.0.0**: `mcli-mesh` CLI (785 lines) — scan, pair, exec, shell, send, fetch, sync, hw (20+ hardware shortcuts), status, log, help. WiFi/SSH peer-to-peer communication between MobileCLI phones
- **Agent Bridge v2**: `mcli-bridge` CLI (1011 lines) — task management (create/list/claim/update/close), lock arbitration, consensus voting (2/3 majority). Filesystem-based coordination for Claude + Gemini + Codex
- **BootstrapInstaller refactor**: 5056-line god object split into 5 clean classes in `bootstrap/` package — PersistentMemoryInitializer (621 lines), ShellConfigManager (546 lines), BootstrapDownloader (235 lines), ScriptInstaller (3370 lines), BootstrapInstaller orchestrator (411 lines)
- **Agent knowledge parity**: Claude (.claude/commands/), Gemini (.gemini/skills/), Codex (.codex/skills/) all have equivalent knowledge assets in repo
- **GEMINI-CONTEXT.md**: 762-line comprehensive codebase knowledge base for Gemini
- **SYSTEM_ARCHITECTURE.md**: 720-line deep architecture reference
- **CODEX-MEMORY.md**: Codex working memory with project state, guardrails, priorities
- **AGENTS.md**: Agent role definitions and merge gates
- **RUNBOOK.md**: Recovery procedures and operational playbook
- **5 Claude Code skills**: /build, /ship, /mesh, /qa, /status
- **5 Gemini review skills**: audit, security-review, docs-consistency, mesh-review, release-gate
- **5 Codex planning skills**: build, ship, mesh, qa, bootstrap-refactor
- **Website updated**: Phone Mesh section, Agent Bridge section, v10.0.0-rc.3 download, updated stats (90+ commands)
## v9.9.5 — Documentation Update
- **Website homepage** updated to v9.9.4: hero label, download button, Agent Swarm section with 4 capability cards
- **Docs page** updated to v9.9.4: Agent Swarm commands/architecture, IDE Integration (VS Code + Cursor), Donation System, 24 Platform CLIs
- **AI briefing** updated to v9.9.4: Dual Brain architecture, Agent Swarm, IDE integration, custom commands, donation system
- **README.md** rewritten: full version history (v6.0.0 → v9.9.4), Agent Swarm, IDE integration, Supabase Edge Functions, tab spawning architecture
- **Integration count** 22 → 24 CLIs (VS Code code-server + Cursor Agent added)
- All version references updated across 6 files
## v9.9.4 — Donation Payments: PayPal + Stripe Integration
- **Payment method chooser** after feedback: "Pay with Card (Stripe)" or "Pay with PayPal"
- **Stripe one-time donations** via Supabase Edge Function (`create-donation-checkout`)
- Uses same Stripe infrastructure as subscriptions but `mode: payment` (one-time, not recurring)
- **PayPal donations** via PayPal donate link with user tracking
- Donations are completely separate from subscriptions — just additions
- Same authentication flow: requires login, uses JWT + Supabase client
- CustomTabsIntent for in-app payment experience (same as subscription flow)
- New Edge Function: `supabase/functions/create-donation-checkout/index.ts`
## v9.9.3 — Support Button: Feedback-Funded Feature Pipeline
- **"Support MobileCLI" button** in nav drawer with 3-field feedback form
- Fields: What do you love / What would you change / What do you want built
- Feedback saved locally to `~/.mobilecli/feedback/feedback-{timestamp}.md`
- Auto-creates GitHub issue tagged `community-request` for feature requests
- Opens donation page after submission
- Designed to feed directly into Agent Swarm for personalized feature delivery
## v9.9.2 — Agent Swarm: Multi-Tab Parallel AI Agents
- **Agent Swarm system**: `mcli-swarm start "goal"` decomposes tasks and spawns parallel AI agents in separate terminal tabs
- **Tab spawning API**: `mcli-new-tab "command"` — shell scripts can now programmatically create new terminal sessions via broadcast
- **App drawer button**: "Agent Swarm" with goal input dialog
- **Orchestrator monitor**: Tab 0 watches all agent status files, reports progress in real-time
- **Git branch coordination**: Each agent works on its own feature branch, `mcli-swarm merge` combines work
- **File-based IPC**: Agents communicate through `~/.mobilecli/swarm/session-{id}/agent-N/status.md`
- **Mixed-model support**: Agents can use Claude, Gemini, Codex, or Cursor — any AI CLI
- Architecture: each agent gets full 200K context window vs Claude Code's shared sub-agent context
## v9.9.1 — CLI Audit: 7 Script Fixes + Cursor Agent
- **Cursor Agent**: Added to app drawer, runs via proot-distro Ubuntu for glibc compatibility
- **CRITICAL FIX: mobilecli-rebuild**: Was hardcoded to MobileCLI-v8.0.0 — now points to v9.0.0
- **FIX: proot-distro ANSI bug**: `proot-distro list | grep ubuntu` fails due to ANSI escape codes in output. Fixed in vscode, cursor-agent, and godot4 scripts to check filesystem directly
- **FIX: codex CLI**: Missing ARM64 native module (`@openai/codex-linux-arm64`) — manually installed
- **FIX: install-dev-tools**: Stale v8.0.0 reference in help text
- **FIX: mobilecli-caps**: Removed references to non-existent `selfmod` and `extract-source` scripts
- **FIX: voice-ai**: Updated version header from v8.7.0 to v9.9.0
- **FIX: BootstrapInstaller**: Purged all remaining `MobileCLI-v8.0.0` references (6 locations)
- Full live testing of all 17 CLI scripts on disk
## v9.9.0 — Dual Brain: Fast Conversation + Background Workers
- **Two-tier AI architecture**: Haiku handles voice conversation (1-3s), Sonnet/Opus runs complex tasks in background
- **Worker dispatch**: New ```worker``` block lets AI delegate heavy tasks (games, code, analysis) to a more powerful model
- **Direct Anthropic API**: Conversationalist bypasses CLI for faster responses via brain.think_fast()
- **Multi-worker**: Multiple background workers can run concurrently per caller
- **Smart result delivery**: Worker results injected live during call, or via callback/SMS if caller hung up
- **Cross-channel**: Worker dispatch works on voice calls, SMS, and Telegram
- **New config**: `voice_conversation_model` (default: haiku), `voice_worker_model` (default: sonnet)
## v9.8.2 — Audit Fixes
- **Async SMS handler**: Returns empty TwiML immediately, processes in background, replies via Twilio REST API (prevents Twilio timeouts)
- **Twilio retry logic**: `_configure_twilio_webhook()` and `_call_back()` now retry up to 3x with exponential backoff
- **Telegram rate limiting**: Per-user sliding window (10 msgs/60s) prevents spam
- **Widget version**: `getVersion()` now returns `BuildConfig.VERSION_NAME` instead of hardcoded "1.0.0"
- **Error handling**: Voice call errors now distinguish timeout, network, and permanent failures with type context in logs
- **Docs version**: Fixed v9.8.0 → v9.8.2 on docs.html
## v9.8.1 — Security Hardening
- **WebView file access** locked down: `allowFileAccessFromFileURLs` and `allowUniversalAccessFromFileURLs` set to `false`
- **pushEvent JSON validation**: data re-parsed through `JSONObject()` before JS injection to prevent script injection
- Version bump: 9.8.0 → 9.8.1
## v9.8.0 — Widget Audit Fixes
- **VoiceOverlay**: `show()` for processing/speaking states
- **Markdown**: placeholder approach for `
` inside `
` blocks
- **Double-send prevention** in `Chat.sendMessage()`
- `@Volatile` on `lastVersionMtime` for thread safety
- Version string fixed (8.5.0 → 9.8.0)
- Dead code removed (`ImagePreview.ts`, duplicate CSS)
## v9.7.0 — AI Widget: Floating WebView Overlay
- **Floating AI Widget** with bubble → chat state machine
- **WebView overlay** with TypeScript UI (esbuild, 14KB bundle)
- **WidgetBridge**: 17 `@JavascriptInterface` methods (`window.MobileCLI`)
- **Camera + vision** in widget (base64 pipeline)
- **Voice input/output** (STT + TTS) with voice overlay UI
- **Hot-reload**: polls `version.json` every 5s during development
- **Markdown renderer** with XSS protection
- **Theme support** (dark/light) persisted in localStorage
- **Settings persistence** in localStorage
- Nav drawer "AI Widget" entry
- Security: JS escaping, `allowContentAccess=false`, external URL interception
## v9.6.0 — Agent Intelligence Upgrade
- **Action feedback loop** — AI executes commands then sees the results, can describe what happened
- **Camera vision on all channels** — Voice calls, Telegram, WhatsApp/SMS all get photo analysis
- **Photos appear in Gallery** — `termux-media-scan` auto-runs after every `termux-camera-photo`
- **Telegram photo analysis** — Send a photo to the bot, AI downloads it via Bot API and describes what it sees
- **Twilio media vision** — WhatsApp/SMS images downloaded and analyzed instead of just logging URLs
- **Voice call feedback** — "Take a photo" now results in AI describing what was captured to the caller
- **Command output feedback** — "What's my battery?" returns actual battery percentage from command output
- `handle_message_full()` router method — single entry point for action execution + feedback
- `_detect_camera_output()` — auto-reads captured photos for vision analysis
- `analyze_image_file()` — on-demand file vision for any gateway
- `_download_telegram_photo()` — fetches photos via Telegram getFile API
- `_download_media_base64()` — fetches Twilio MMS/WhatsApp media
- `_voice_think_followup()` — voice-optimized follow-up with action results
- Webhook and SMS gateways switched to `handle_message_full()` for action feedback
- System prompts updated across all channels with media-scan instructions and vision notes
## v9.5.0 — Vision Fix + Claude CLI Fallback
- **Claude CLI vision fallback** — works with OAuth/Claude Max (no API key needed)
- Saves image to temp file, Claude CLI reads it via its native Read tool
- `--allowedTools Read --dangerously-skip-permissions` flags for non-interactive image analysis
- Fixed: OAuth tokens (`sk-ant-oat...`) no longer sent to direct API (which rejects them)
- `_clean_env()` strips `CLAUDECODE` session vars from all subprocess calls
- Improved fallback chain: direct API (if real key) → CLI vision → text-only
- Native widget `runClaudeCliWithImage()` now uses proper CLI flags for image reading
- Web chat `_try_claude_cli()` updated with same CLI vision flags
- Added stderr logging to CLI vision for better debugging
- Cancel/timeout support in web chat: tap "Sending..." to abort, 120s auto-timeout for images
## v9.4.0 — Camera Multimodal Integration
- **Camera/Gallery button** in both native floating widget and web chat interfaces
- **AI vision pipeline** — send photos to AI for visual analysis via Anthropic API
- Native widget: tap camera icon, take photo, see thumbnail preview, send to AI
- Web chat: tap camera icon, take/select photo, client-side resize (max 1024px), preview bar, send
- **Webhook gateway** now handles large payloads (Content-Length-aware reading, 10MB cap)
- **Direct Anthropic API vision** via curl in brain.py (no new dependencies)
- API key discovery chain: `ANTHROPIC_API_KEY` env var, `~/.claude/.credentials.json`, agent config
- Fallback chain: primary model vision, fallback model vision, text-only with note
- Claude CLI fallback with temp file image reference
- 120s read timeout for vision requests (vs 60s for text)
- Empty text with image defaults to "What do you see in this image?"
- Image preview with thumbnail + remove button in both interfaces
## v9.3.0 — AI Web Chat Bundled + Persistent Voice Mode
- **AI Web Chat Integration** — full web-based chat with voice mode bundled into APK
- New "AI Web Chat" drawer entry (green) launches browser-based chat on port 8780
- Auto-extracts `ai-chat-widget.py` from assets with version checking
- **ChatBubbleService Persistent Voice Mode** — continuous listen-process-speak loop
- 4-state voice machine (IDLE, LISTENING, PROCESSING, SPEAKING) in native overlay
- Voice mode toggle button in floating chat title bar
- Voice controls row: state indicator, skip, pause/resume, stop
- `stripMarkdownForSpeech()` — 16 regex replacements for natural TTS output
- Long-press AI messages now reads cleaned text (no markdown symbols)
- Skip button kills TTS mid-speech, resumes listening
- Pause/Resume preserves voice mode state without exiting
- Clean shutdown of voice processes on service destroy
## v9.2.0 — Floating AI Chat Widget + Website Updates
- **Floating AI Chat Widget** — Messenger-style chat head overlay that persists across apps
- Draggable bubble (tap to expand, drag to reposition)
- Full chat window with message bubbles, text input, and voice input
- Dark/light theme toggle (persisted across sessions)
- Communicates via webhook gateway (primary) or Claude CLI (fallback)
- Long-press AI responses for text-to-speech
- Foreground service with notification (ID 1339)
- New "AI Chat" drawer entry between AI Agent and Dev Team
- Overlay permission check with guided setup
- Website updated with v9.0.0–v9.2.0 documentation
- Changelog, AI briefing, homepage, and MOTD refreshed
## v9.1.0 — Agent Deployment Pipeline + Gateway Config UI
- **Version-aware agent extraction** — only re-extracts when app version changes
- **Gateway configuration UI** — toggle Telegram, SMS, Discord, webhook gateways from AIAgentActivity
- **Config persistence** — gateway settings saved to config.json, applied on agent start
- Full agent integration: Start/Stop/Restart controls in native dashboard
- Real-time status, uptime, conversation count, and gateway indicators
## v9.0.0 — AI Agent System (MobileCLI Open)
- **Always-on AI agent** — background daemon with multi-gateway communication
- **7 gateways**: SMS polling, Twilio (voice + WhatsApp + SMS), Telegram Bot API, Discord REST, webhook listener, notification monitor, Voice AI (phone calls)
- **AI brain**: Claude Sonnet (primary) with Gemini and Codex fallback
- **7 skill modules**: SMS send, voice (STT + TTS), hardware control, media, Twilio actions, scheduler, system monitor
- **Channel-aware responses**: adjusts message length per platform (SMS 160, Discord 2000, WhatsApp 4096)
- **Native dashboard** (AIAgentActivity): programmatic UI, auto-refresh, full agent control
- **mcli-open CLI**: `mcli-open start/stop/status/config`
- Python agent with conversation logging and state management
## v8.9.0 — Voice AI System
- **Voice AI phone calls** — Twilio-powered two-way AI voice conversations
- `voice-ai start/stop/setup/status/test/log` commands
- HTTP server + SSH tunnel for Twilio webhook
- Speech-to-text transcription, AI processing, TwiML response
- AI can execute commands during calls (create files, control hardware)
## v8.3.0 — Voice AI Integration
- Voice AI toggle in drawer menu
- Twilio integration for incoming/outgoing AI calls
- Two-way voice control of phone hardware
- Background voice server with tunnel support
## v8.1.0 — Ubuntu + Stability
- One-tap Ubuntu environment from drawer menu
- `ubuntu` command for direct terminal access
- proot-distro integration (auto-install on first run)
- Various stability fixes and performance improvements
## v8.0.1 — Pinch-to-Zoom Crash Fix + Ubuntu Integration
- **Pinch-to-zoom crash fix** — setTextSize() deferred via post{} with pending flag, coalesces rapid changes to 1 call per frame (~16ms), removes redundant updateTerminalSize()
- One-tap Ubuntu drawer button launches full Ubuntu Linux environment
- `ubuntu` shell command auto-installs Ubuntu via proot-distro on first run (~500MB)
- AlertDialog preview explains first-run download and how to exit
- Follows existing Godot launcher pattern (createSession → delay → safeSessionWrite)
## v8.0.0 — Security & Correctness Audit
- DocumentsProvider path traversal fix (canonical path validation)
- TermuxApiReceiver permission guard re-added (file-based IPC since v6.0.0)
- Wake lock 4-hour timeout, BootReceiver startForegroundService
- RUN_COMMAND permission changed to signature level
- Battery temperature: reads actual temp instead of current_now
- 53 JSON catch blocks use safeErrorJson() helper (prevents injection)
- share() uses FileProvider content:// URI (Android 7+ compatibility)
- keystoreGenerate() supports AES and RSA algorithms
- telephonyCall() checks CALL_PHONE permission
- AccountActivity connection leak fixed (finally disconnect)
- termux-open broadcast target: com.mobilecli.app.TermuxOpenReceiver
- All version strings updated (4.1.0, 2.0.0, v6.0.0, MobileCLI-v2 → 8.0.0)
- Hardware count corrected: 80+ → 65+
- Website: OG tags, integration grid, terms renumber, URL fixes
## v7.9.2 — Legal Cleanup + Pinch-to-Zoom Refinement
- Removed liability-implying marketing language from website, capability docs, AI briefing
- Pinch-to-zoom: return 1.0f for relative deltas, integer-only setTextSize
- Version bump: versionCode 792, versionName 7.9.2
## v7.9.1 — Pinch-to-Zoom Crash Fix
- Fixed crash: `terminalView.post{}` defers setTextSize() from onScale() to next frame
- 50ms throttle on scale events prevents rapid-fire reflection calls
## v7.9.0 — Secure Live Updates
- `fetchAndPreview()` replaces 5 direct curl functions
- AlertDialog preview before executing any live content
- Settings toggle to enable/disable live updates
- First-use acknowledgment dialog
- Terms of Service §12 + Privacy Policy §1.5 updated
- Fixed .html → .md link references
## v7.8.0 — Live Update Buttons
- Added **What's New** drawer button (this page)
- Added **Message of the Day** drawer button
- Added **Scripts Library** drawer button
- All content served live from mobilecli.com
- Fixed existing Update button (was 404)
## v7.7.0 — Build Tools + AI Briefing
- Added make, pkg-config, binutils to optional packages
- Rewrote AI briefing and deployed to mobilecli.com/ai-briefing.md
## v7.6.0 — GitHub CLI + jq
- Added gh (GitHub CLI) and jq to important packages
- Fixed hardcoded optional package progress calculation
## v7.5.0 — Auto Git + Mirror Fix
- Auto-install git during setup
- Fixed Termux package mirror URL
## v7.4.0 — Package Rename
- Source-level rename com.termux to com.mobilecli
- applicationId stays com.termux (binary compatibility)
## v7.3.0 — Auth Security (Batch 3)
- Login rate limiting
- Email verification dialog
- EncryptedSharedPreferences for OAuth state
- Mandatory OAuth state validation
- Implicit flow removed (PKCE only)
- Server-side account deletion
## v7.2.0 — API Receiver Stability (Batch 2)
- Fixed companion object conflicts
- Fixed toast deadlock on main thread
- goAsync() for TTS receiver
- Clipboard exception handling
- Volume clamping to valid range
- SMS API 31+ compatibility
- Wallpaper OOM prevention
- Download null safety
- Extracted writeResultFile() utility
## v7.1.0 — Security Fixes (Batch 1)
- Argument quoting for shell commands
- Anon key made private
- Deep link token validation
- Error message escaping
- Debug logging cleanup
- Clock skew detection
## v6.0.0 — Stable Baseline
- 22 CLIs (Claude, Gemini, Codex, Vercel, Firebase, etc.)
- 65+ hardware commands
- Full Termux API integration
- Self-modification loop
- Android app building on-device