Files

1 line
45 KiB
JSON

{"repo": "ahllx/ancli-android", "files": {"ARCHITECTURE.md": {"4b257a2fd707f42587865a3787ea64358a205a1b": {"t": 1785596421.410157, "n": 4821, "h": "b195011d7932e218", "c": "# AnCLI Technical Architecture & Deep Dive\n\nThis document outlines the internal design, lifecycle, security model, and execution flows of **AnCLI v1.0.0**.\n\n---\n\n## 1. Unified Container Architecture\n\nAnCLI uses a single, unified execution backend based on **PRoot** to run Linux command-line tools.\n\n```\nHost Shell\n → Wrapper (/data/adb/ksu/bin/<tool>)\n → proot v5.3.0 (user-space chroot)\n → Ubuntu 24.04 glibc rootfs (/data/local/tmp/ancli/rootfs/)\n → Standalone Python/Go/JS Native Binary\n```\n\n### 1.1 Why PRoot / Ubuntu Base?\n\nAndroid's Linux kernel is paired with the Bionic C library instead of the standard GNU glibc. This creates compatibility issues for standard Linux tools built for glibc. \n\n- `customize.sh` downloads the official `ubuntu-base-arm64` tarball (~30 MB) and extracts it to `/data/local/tmp/ancli/rootfs/`.\n- PRoot bind-mounts `/dev`, `/proc`, `/sys`, `/sdcard`, and `/data/local/tmp/ancli` so the container has access to host resources.\n- Glibc binaries run inside this isolated sandbox natively.\n\n### 1.2 Resolving Node.js Incompatibility via Standalone Binaries\n\nIn older configurations, running Node.js (`npm`) inside PRoot on Android 15 failed due to a `libuv` thread-interception ptrace bug (asynchronous `mkdir` returned `ENOENT` during npm initialization).\n\nInstead of running npm or trying to bind to a Termux host Node.js runtime (which fails due to SELinux blocking `exec` calls across application domains), **AnCLI v1.0.0 installs Node.js/JS-based tools directly as precompiled native Linux-arm64 binaries**.\n\n1. Tools like **Claude Code**, **OpenCode**, and **MiMo Code** publish native standalone executables to their GitHub Releases.\n2. AnCLI downloads these standalone `.tar.gz` packages directly inside the container using `curl` or native Python bypass downloads and extracts the executable to `/usr/local/bin`.\n3. The generated wrapper calls this native binary directly via PRoot, completely bypassing `npm` and Node.js compilation.\n\n### 1.3 Eliminating Nested PRoot Conflicts\n\nOlder wrapper models executed sub-installers inside another nested `proot` context, which caused ptrace collisions on modern Linux kernels and led to shell execution freezes (e.g. `/system/bin/sh: bash: inaccessible or not found`).\n\nAnCLI v1.0.0 completely decouples inner script runners. All container commands are called directly inside the primary PRoot context using the guest container's `/bin/bash` with `set -o pipefail`.\n\n---\n\n## 2. Module Lifecycle\n\nAnCLI is packaged as a standard Magisk/KernelSU/APatch module.\n\n| Hook | When | Description |\n| :--- | :--- | :--- |\n| **`customize.sh`** | Flashed in manager | Bootstraps PRoot and Ubuntu rootfs, installs APT dependencies. |\n| **`service.sh`** | Late start boot hook | Restores container DNS (`resolv.conf`) and permissions. |\n| **`uninstall.sh`** | Module uninstalled | Cleans rootfs directories, kills PRoot processes, removes dynamic wrappers. |\n\n---\n\n## 3. Dynamic Registry System\n\nThe registry schema defines the metadata and installation scripts for supported tools.\n\n```json\n\"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L ...\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\"OPENAI_API_KEY\"],\n \"executable\": \"opencode\"\n}\n```\n\n---\n\n## 4. The \"Dual-Injection\" Systemless Wrapper Trick\n\nTo expose a newly installed tool globally to the user's `$PATH` without modifying the read-only `/system` partition, AnCLI writes wrappers to two locations:\n\n1. **`/data/adb/modules/ancli/system/bin/<tool>`** — Active after device reboot (Magisk/KSU module overlay).\n2. **`/data/adb/ksu/bin/<tool>` (or `/data/adb/ap/bin/<tool>`)** — Active immediately without reboot.\n\n### Wrapper Template\n\n```sh\n#!/system/bin/sh\nexport OPENAI_API_KEY='sk-...'\nexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin\nexport HOME=/root\nexec /data/local/tmp/ancli/bin/proot \\\n -r /data/local/tmp/ancli/rootfs \\\n -b /dev -b /proc -b /sys -b /data/local/tmp/ancli -b /sdcard \\\n -w /root /usr/bin/env opencode \"$@\"\n```\n\n---\n\n## 5. Security & Ownership Hardening\n\n- **Command Whitelist**: Restricts execution inside the container to trusted prefixes (`pip`, `npm`, `apt-get`, `apt`, `curl`, `rm`, `agy`, `bash`, `sh`).\n- **File Overwrite Protection**: Inodes and database paths like `installed.json` are forcefully deleted before recreating, preventing local permission lock errors (`[Errno 13] Permission denied`) from conflicting host users.\n"}}, "src/registry.json": {"4b257a2fd707f42587865a3787ea64358a205a1b": {"t": 1785745272.5641067, "n": 4738, "h": "10cb534c976b6917", "c": "{\n \"version\": \"1.2.2\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI\",\n \"description\": \"Google's powerful terminal agent\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_method\": \"pipe_script\",\n \"installer_url\": \"https://antigravity.google/cli/install.sh\",\n \"installer_args\": \"--dir /usr/local/bin\",\n \"installer_script_env\": {},\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash -s -- --dir /usr/local/bin\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n },\n \"grok\": {\n \"name\": \"Grok CLI\",\n \"description\": \"xAI's official terminal coding agent\",\n \"author\": \"xAI\",\n \"install_mode\": \"proot\",\n \"install_method\": \"pipe_script\",\n \"installer_url\": \"https://x.ai/cli/install.sh\",\n \"installer_args\": \"\",\n \"installer_script_env\": {\"GROK_BIN_DIR\": \"/usr/local/bin\"},\n \"install_cmd\": \"curl -fsSL https://x.ai/cli/install.sh | bash\",\n \"update_cmd\": \"curl -fsSL https://x.ai/cli/install.sh | bash\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/grok /usr/local/bin/agent && rm -rf /root/.grok\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GROK_DEPLOYMENT_KEY\",\n \"GROK_CHANNEL\",\n \"GROK_PROXY_URL\"\n ],\n \"executable\": \"grok\"\n }\n }\n}"}, "8f1121d018edef9db7fe547e8b746b28c6e77c43": {"t": 1785749572.0830476, "n": 4738, "h": "10cb534c976b6917", "c": "{\n \"version\": \"1.2.2\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI\",\n \"description\": \"Google's powerful terminal agent\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_method\": \"pipe_script\",\n \"installer_url\": \"https://antigravity.google/cli/install.sh\",\n \"installer_args\": \"--dir /usr/local/bin\",\n \"installer_script_env\": {},\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash -s -- --dir /usr/local/bin\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n },\n \"grok\": {\n \"name\": \"Grok CLI\",\n \"description\": \"xAI's official terminal coding agent\",\n \"author\": \"xAI\",\n \"install_mode\": \"proot\",\n \"install_method\": \"pipe_script\",\n \"installer_url\": \"https://x.ai/cli/install.sh\",\n \"installer_args\": \"\",\n \"installer_script_env\": {\"GROK_BIN_DIR\": \"/usr/local/bin\"},\n \"install_cmd\": \"curl -fsSL https://x.ai/cli/install.sh | bash\",\n \"update_cmd\": \"curl -fsSL https://x.ai/cli/install.sh | bash\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/grok /usr/local/bin/agent && rm -rf /root/.grok\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GROK_DEPLOYMENT_KEY\",\n \"GROK_CHANNEL\",\n \"GROK_PROXY_URL\"\n ],\n \"executable\": \"grok\"\n }\n }\n}"}, "3a60af6b4a7548e8a6f27373c74722edf2da9801": {"t": 1785749573.3577223, "n": 3824, "h": "dd4339f6f9d3608b", "c": "{\n \"version\": \"1.0.0\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash -s -- --dir /usr/local/bin\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "ae53b7cf0a4dba9cf25391f12eb0557962d972b9": {"t": 1785749574.5981019, "n": 3758, "h": "b3e10ec47ce80ef5", "c": "{\n \"version\": \"1.0.0\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash -s -- --dir /usr/local/bin\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "e2cf468f39ecd61e468c9e054ede2b19691bacb7": {"t": 1785749575.8155656, "n": 3758, "h": "d5013b0984054178", "c": "{\n \"version\": \"1.2.1\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash -s -- --dir /usr/local/bin\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "f29aacb5d77c3e1e165a26ff59590ce0f49d5331": {"t": 1785749576.9094658, "n": 3731, "h": "fe940858494d9438", "c": "{\n \"version\": \"1.2.1\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/XiaomiMiMo/MiMo-Code/releases/latest/download/mimocode-linux-arm64.tar.gz -o /tmp/mimo.tar.gz && tar -xzf /tmp/mimo.tar.gz -C /usr/local/bin && rm /tmp/mimo.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/mimo\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anthropics/claude-code/releases/latest/download/claude-linux-arm64.tar.gz -o /tmp/claude.tar.gz && tar -xzf /tmp/claude.tar.gz -C /usr/local/bin && rm /tmp/claude.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/claude\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"update_cmd\": \"curl -L https://github.com/anomalyco/opencode/releases/latest/download/opencode-linux-arm64.tar.gz -o /tmp/opencode.tar.gz && tar -xzf /tmp/opencode.tar.gz -C /usr/local/bin && rm /tmp/opencode.tar.gz\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/opencode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "1f2a3025fa7f212b6deb2eb8966c598acc84b02c": {"t": 1785749577.9860198, "n": 3381, "h": "1cb6e00934cbe8ec", "c": "{\n \"version\": \"1.2.1\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages mimocode\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages mimocode\",\n \"uninstall_cmd\": \"pip uninstall -y mimocode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"npm install -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global --cache /var/cache/ancli-npm --unsafe-perm\",\n \"update_cmd\": \"npm update -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global --cache /var/cache/ancli-npm --unsafe-perm\",\n \"uninstall_cmd\": \"npm uninstall -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global\",\n \"runtime_env\": [\n \"HOME=/data/local/tmp/ancli/npm-home\"\n ],\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"npm install -g opencode-ai --prefix /data/local/tmp/ancli/npm-global --cache /var/cache/ancli-npm --unsafe-perm\",\n \"update_cmd\": \"npm update -g opencode-ai --prefix /data/local/tmp/ancli/npm-global --cache /var/cache/ancli-npm --unsafe-perm\",\n \"uninstall_cmd\": \"npm uninstall -g opencode-ai --prefix /data/local/tmp/ancli/npm-global\",\n \"runtime_env\": [\n \"HOME=/data/local/tmp/ancli/npm-home\"\n ],\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "cc7a04b9868a6f3807a44c8fb1f6b3715938297d": {"t": 1785749579.0630274, "n": 3425, "h": "0d7b47c84a6d86da", "c": "{\n \"version\": \"1.2.1\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"pip install --break-system-packages mimocode\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages mimocode\",\n \"uninstall_cmd\": \"pip uninstall -y mimocode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"npm install -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global --cache /data/local/tmp/ancli/npm-cache --unsafe-perm\",\n \"update_cmd\": \"npm update -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global --cache /data/local/tmp/ancli/npm-cache --unsafe-perm\",\n \"uninstall_cmd\": \"npm uninstall -g @anthropic-ai/claude-code --prefix /data/local/tmp/ancli/npm-global\",\n \"runtime_env\": [\n \"HOME=/data/local/tmp/ancli/npm-home\"\n ],\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Sst Labs\",\n \"install_mode\": \"proot\",\n \"install_cmd\": \"npm install -g opencode-ai --prefix /data/local/tmp/ancli/npm-global --cache /data/local/tmp/ancli/npm-cache --unsafe-perm\",\n \"update_cmd\": \"npm update -g opencode-ai --prefix /data/local/tmp/ancli/npm-global --cache /data/local/tmp/ancli/npm-cache --unsafe-perm\",\n \"uninstall_cmd\": \"npm uninstall -g opencode-ai --prefix /data/local/tmp/ancli/npm-global\",\n \"runtime_env\": [\n \"HOME=/data/local/tmp/ancli/npm-home\"\n ],\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n }\n }\n}"}, "c3abfd342d31f7799f6dfa9b8477c84a8dcef269": {"t": 1785749580.1555057, "n": 2646, "h": "fc172e8c5f48e08c", "c": "{\n \"version\": \"1.0.0\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_cmd\": \"pip install --break-system-packages aider-chat\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_cmd\": \"npm install -g @anthropic-ai/claude-code\",\n \"update_cmd\": \"npm update -g @anthropic-ai/claude-code\",\n \"uninstall_cmd\": \"npm uninstall -g @anthropic-ai/claude-code\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Paralect\",\n \"install_cmd\": \"npm install -g opencode-ai\",\n \"update_cmd\": \"npm update -g opencode-ai\",\n \"uninstall_cmd\": \"npm uninstall -g opencode-ai\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_cmd\": \"pip install --break-system-packages mimocode\",\n \"update_cmd\": \"pip install --upgrade --break-system-packages mimocode\",\n \"uninstall_cmd\": \"pip uninstall -y mimocode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_cmd\": \"curl -sL https://antigravity.google/cli/install.sh | bash\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy /root/.local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n }\n }\n}"}, "a96aadff53b259f871b7036ca3bc5061c75c6870": {"t": 1785749581.2270024, "n": 2556, "h": "ac2dc8832612ba23", "c": "{\n \"version\": \"1.0.0\",\n \"apps\": {\n \"aider\": {\n \"name\": \"Aider\",\n \"description\": \"AI pair programming in your terminal\",\n \"author\": \"Paul Gauthier\",\n \"install_cmd\": \"pip install aider-chat\",\n \"update_cmd\": \"pip install --upgrade aider-chat\",\n \"uninstall_cmd\": \"pip uninstall -y aider-chat\",\n \"env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"ANTHROPIC_BASE_URL\",\n \"DEEPSEEK_API_KEY\",\n \"AIDER_MODEL\"\n ],\n \"executable\": \"aider\"\n },\n \"claude-code\": {\n \"name\": \"Claude Code\",\n \"description\": \"Anthropic's official terminal coding agent\",\n \"author\": \"Anthropic\",\n \"install_cmd\": \"npm install -g @anthropic-ai/claude-code\",\n \"update_cmd\": \"npm update -g @anthropic-ai/claude-code\",\n \"uninstall_cmd\": \"npm uninstall -g @anthropic-ai/claude-code\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\",\n \"ANTHROPIC_MODEL\"\n ],\n \"executable\": \"claude\"\n },\n \"opencode\": {\n \"name\": \"OpenCode\",\n \"description\": \"Open-source terminal-based AI coding agent\",\n \"author\": \"Paralect\",\n \"install_cmd\": \"npm install -g opencode-ai\",\n \"update_cmd\": \"npm update -g opencode-ai\",\n \"uninstall_cmd\": \"npm uninstall -g opencode-ai\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\"\n ],\n \"executable\": \"opencode\"\n },\n \"mimo\": {\n \"name\": \"MiMo Code\",\n \"description\": \"Terminal AI agent tailored for Android/Proot\",\n \"author\": \"XiaomiMiMo\",\n \"install_cmd\": \"pip install mimocode\",\n \"update_cmd\": \"pip install --upgrade mimocode\",\n \"uninstall_cmd\": \"pip uninstall -y mimocode\",\n \"env_vars\": [\n \"OPENAI_API_KEY\"\n ],\n \"optional_env_vars\": [\n \"OPENAI_API_BASE\",\n \"DEEPSEEK_API_KEY\",\n \"MIMO_MODEL\"\n ],\n \"executable\": \"mimo\"\n },\n \"agy\": {\n \"name\": \"Antigravity CLI (agy)\",\n \"description\": \"Google's powerful terminal agent (Native Go Binary)\",\n \"author\": \"Google\",\n \"install_cmd\": \"curl -sL https://raw.githubusercontent.com/google/antigravity/main/install.sh | bash\",\n \"update_cmd\": \"agy update\",\n \"uninstall_cmd\": \"rm -f /usr/local/bin/agy\",\n \"env_vars\": [],\n \"optional_env_vars\": [\n \"GEMINI_API_KEY\",\n \"ANTIGRAVITY_API_KEY\"\n ],\n \"executable\": \"agy\"\n }\n }\n}"}}}}