Установка Google Antigravity на Debian 13, 12 и 11

💡 Что такое Google Antigravity и зачем он вам — это платформа для работы с агентами от Google. Она доступна в трёх вариантах: десктоп-приложение (для проектов и визуальной оркестрации), IDE (полноценный редактор с агентом) и CLI (терминальный интерфейс с командой agy). Мы рассмотрим установку всех трёх вариантов на Debian.

⚠️ Важное предупреждение: Antigravity — это новый продукт от Google, и его установка на Debian отличается от Ubuntu. Не используйте Ubuntu-специфичные обходные пути для AppArmor, если не видите явных логов блокировки. На Debian работает иначе.

Оглавление

Предварительные требования

Прежде чем начать, убедитесь, что ваша система готова:

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает:

  • sudo — выполняет команду от имени суперпользователя
  • whoami — показывает имя текущего пользователя

Зачем: Проверяет, может ли ваш пользователь выполнять команды с правами root.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

Дополнительные требования:

  • Графическая среда (GNOME, KDE, XFCE) — для десктоп-приложения и IDE
  • Архитектура: amd64 или arm64
  • Интернет-соединение для скачивания (~200 МБ для десктоп-версии)
  • Для CLI: доступ в интернет, браузер для авторизации

Выбор версии Antigravity

ПродуктЧто этоКоманда запускаКак обновлятьДля чего нужен
Antigravity 2.0
(десктоп)
Платформа для
проектов,
артефактов
и визуальной
оркестрации
antigravitysudo update-antigravityУправление
проектами и
агентами
в отдельном окне
Antigravity IDEРедактор кода с
встроенным агентом
antigravity-idesudo update-antigravity-ideРазработка с ИИ-
помощником в
редакторе
Antigravity CLIТерминальный
интерфейс с
командой agy
agyagy update
или скрипт
Работа через
терминал, SSH,
скрипты
Legacy APT-пакетСтарая версия 1.x
(не рекомендуется)
antigravity (но конфликтует)apt updateТолько если нужна
именно 1.x

⚠️ Важно: Не устанавливайте десктоп-приложение Antigravity 2.0 и legacy APT-пакет одновременно. Они оба создают команду antigravity и файл .desktop, что вызовет конфликт.

Часть 1: Установка Antigravity 2.0 (десктоп-приложение)

Это современная версия Antigravity — платформа для работы с проектами, артефактами и агентами.

Установка зависимостей

sudo apt update
sudo apt install -y ca-certificates curl tar desktop-file-utils python3

Что делает:

  • ca-certificates — сертификаты для HTTPS
  • curl — загрузка файлов
  • tar — распаковка архивов
  • desktop-file-utils — для работы с .desktop-файлами
  • python3 — нужен для скрипта установки

Создание скрипта обновления

sudo tee /usr/local/bin/update-antigravity > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

if [ "$(id -u)" -ne 0 ]; then
    echo "Run with sudo: sudo update-antigravity" >&2
    exit 1
fi

download_page="https://antigravity.google/download"
install_root="/opt/antigravity"
command_link="/usr/local/bin/antigravity"
desktop_file="/usr/share/applications/antigravity.desktop"
icon_file="/usr/share/icons/hicolor/512x512/apps/antigravity.png"
old_icon_file="/usr/share/icons/hicolor/scalable/apps/antigravity.svg"

case "$(uname -m)" in
x86_64 | amd64) platform="linux-x64" ;;
aarch64 | arm64) platform="linux-arm" ;;
*)
    echo "Unsupported architecture: $(uname -m)" >&2
    exit 1
    ;;
esac

for required_command in curl tar python3; do
    if ! command -v "$required_command" >/dev/null 2>&1; then
        echo "$required_command is required to install Antigravity." >&2
        exit 1
    fi
done

if [ -L "$command_link" ]; then
    command_target=$(readlink -f "$command_link" || true)
    case "$command_target" in
    "$install_root"/*) ;;
    *)
        echo "$command_link points to $command_target. Move it before rerunning this helper." >&2
        exit 1
        ;;
    esac
elif [ -e "$command_link" ]; then
    echo "$command_link exists and is not a symlink. Move it before rerunning this helper." >&2
    exit 1
fi

tmp_parent="${TMPDIR:-/var/tmp}"
mkdir -p "$tmp_parent"
tmpdir=$(mktemp -d "$tmp_parent/antigravity.XXXXXX")
trap 'rm -rf "$tmpdir"' EXIT
download_html="$tmpdir/download.html"
download_js="$tmpdir/download.js"
archive="$tmpdir/Antigravity.tar.gz"
archive_list="$tmpdir/archive-list.txt"
icon_staged="$tmpdir/antigravity.png"

curl -fsSL --compressed --retry 3 -o "$download_html" "$download_page"
main_js_url=$(
    python3 - "$download_html" "$download_page" <<'PY'
import re
import sys
from pathlib import Path
from urllib.parse import urljoin

html = Path(sys.argv[1]).read_text()
page_url = sys.argv[2]
matches = re.findall(r'(?:src|href)="([^"]*main-[^"]+\.js)"', html)
if not matches:
    raise SystemExit("Could not find the Antigravity download bundle")
print(urljoin(page_url, matches[-1]))
PY
)

curl -fsSL --compressed --retry 3 -o "$download_js" "$main_js_url"
download_fields=$(
    python3 - "$download_js" "$platform" <<'PY'
import re
import sys
from pathlib import Path

bundle = Path(sys.argv[1]).read_text(errors="replace")
platform = sys.argv[2]
start = bundle.find('id:"antigravity-2"')
end = bundle.find('},{name:"command",id:"antigravity-cli"', start)
if start == -1 or end == -1:
    raise SystemExit("Could not find Antigravity 2.0 downloads")

section = bundle[start:end]
match = re.search(r'href:"([^"]+/' + re.escape(platform) + r'/Antigravity\.tar\.gz)"', section)
if not match:
    raise SystemExit(f"Could not find a download for {platform}")

url = match.group(1)
version_match = re.search(r'/antigravity-hub/([^/]+)/', url)
if not version_match:
    raise SystemExit("Could not parse Antigravity version from download URL")

print(version_match.group(1).split("-", 1)[0], url)
PY
)
read -r version download_url <<<"$download_fields"

if [ -z "$version" ] || [ -z "$download_url" ]; then
    echo "Could not parse the Antigravity download page." >&2
    exit 1
fi

case "$platform" in
linux-x64) expected_top_dir="Antigravity-x64" ;;
linux-arm) expected_top_dir="Antigravity-arm64" ;;
esac

expected_target="$install_root/$expected_top_dir/antigravity"
sandbox_path="$install_root/$expected_top_dir/chrome-sandbox"
installed_version=$(cat "$install_root/.unishell-version" 2>/dev/null || true)
desktop_matches=no
if [ -f "$desktop_file" ] &&
    grep -q '^Icon=antigravity$' "$desktop_file" &&
    grep -q '^StartupWMClass=Antigravity$' "$desktop_file"; then
    desktop_matches=yes
fi
if [ "$installed_version" = "$version" ] &&
    [ -x "$expected_target" ] &&
    [ -L "$command_link" ] &&
    [ "$(readlink -f "$command_link")" = "$expected_target" ] &&
    [ "$desktop_matches" = yes ] &&
    [ -f "$icon_file" ]; then
    if [ ! -e "$sandbox_path" ] || [ "$(stat -c '%U:%G:%a' "$sandbox_path")" = "root:root:4755" ]; then
        printf 'Antigravity %s is already installed at %s\n' "$version" "$install_root/$expected_top_dir"
        exit 0
    fi
fi

printf 'Downloading Antigravity %s for %s...\n' "$version" "$platform"
curl -fsSL --retry 3 -o "$archive" "$download_url"
tar -tzf "$archive" >"$archive_list"
top_dir=$(sed -n '1{s#/.*##;p;q}' "$archive_list")
case "$top_dir" in
Antigravity-*) ;;
*)
    echo "Unexpected archive layout: $top_dir" >&2
    exit 1
    ;;
esac
if [ "$top_dir" != "$expected_top_dir" ]; then
    echo "Unexpected archive directory: $top_dir" >&2
    exit 1
fi

tar -xzf "$archive" -C "$tmpdir"
if [ ! -x "$tmpdir/$top_dir/antigravity" ]; then
    echo "The Antigravity launcher was not found in the archive." >&2
    exit 1
fi

python3 - "$tmpdir/$top_dir/resources/app.asar" "$icon_staged" <<'PY'
import json
import struct
import sys
from pathlib import Path

asar = Path(sys.argv[1])
output = Path(sys.argv[2])
with asar.open("rb") as archive:
    archive.read(4)
    header_size = struct.unpack("<I", archive.read(4))[0]
    archive.read(4)
    json_size = struct.unpack("<I", archive.read(4))[0]
    header = json.loads(archive.read(json_size).decode())

icon = header["files"]["icon.png"]
with asar.open("rb") as archive:
    archive.seek(8 + header_size + int(icon["offset"]))
    output.write_bytes(archive.read(int(icon["size"])))
PY

staging_root=$(mktemp -d "$(dirname "$install_root")/.antigravity-install.XXXXXX")
chmod 0755 "$staging_root"
promoted=no
cleanup_staging() {
    if [ "$promoted" != yes ]; then
        rm -rf "$staging_root"
    fi
}
trap 'rm -rf "$tmpdir"; cleanup_staging' EXIT

cp -a "$tmpdir/$top_dir" "$staging_root/"
printf '%s\n' "$version" >"$staging_root/.unishell-version"
if [ -f "$staging_root/$top_dir/chrome-sandbox" ]; then
    chown root:root "$staging_root/$top_dir/chrome-sandbox"
    chmod 4755 "$staging_root/$top_dir/chrome-sandbox"
fi
if [ -d "$install_root" ]; then
    rm -rf "${install_root}.previous"
    mv "$install_root" "${install_root}.previous"
fi
mv "$staging_root" "$install_root"
promoted=yes
ln -sfn "$install_root/$top_dir/antigravity" "$command_link"

mkdir -p "$(dirname "$icon_file")"
install -m 0644 "$icon_staged" "$icon_file"
rm -f "$old_icon_file"

tee "$desktop_file" >/dev/null <<DESKTOP
[Desktop Entry]
Name=Antigravity
Comment=Google Antigravity 2.0 agent platform
Exec=$command_link %U
Icon=antigravity
Terminal=false
Type=Application
Categories=Development;IDE;
StartupNotify=true
StartupWMClass=Antigravity
DESKTOP

if command -v update-desktop-database >/dev/null 2>&1; then
    update-desktop-database /usr/share/applications >/dev/null 2>&1 || true
fi

if command -v gtk-update-icon-cache >/dev/null 2>&1; then
    gtk-update-icon-cache -q /usr/share/icons/hicolor 2>/dev/null || true
fi

printf 'Installed Antigravity %s at %s\n' "$version" "$install_root/$top_dir"
EOF

Что делает скрипт (обзорно):

  • Определяет архитектуру (x64 или ARM)
  • Скачивает страницу загрузки Google и находит актуальную версию
  • Скачивает tarball и проверяет его структуру
  • Распаковывает в /opt/antigravity
  • Устанавливает SUID-бит на chrome-sandbox (необходимо для запуска)
  • Создаёт команду /usr/local/bin/antigravity
  • Создаёт иконку и .desktop-файл
sudo chmod +x /usr/local/bin/update-antigravity

Что делает: Делает скрипт исполняемым.

Запуск установки Antigravity 2.0

sudo update-antigravity

Ожидаемый вывод:

Downloading Antigravity 2.0.6 for linux-x64...
Installed Antigravity 2.0.6 at /opt/antigravity/Antigravity-x64

Проверка установки Antigravity 2.0

readlink -f /usr/local/bin/antigravity
test -x "$(readlink -f /usr/local/bin/antigravity)" && echo "Antigravity установлен"

Ожидаемый вывод: /opt/antigravity/Antigravity-x64/antigravity и Antigravity установлен.

grep -E '^(Name|Exec|Icon)' /usr/share/applications/antigravity.desktop

Ожидаемый вывод:

Name=Antigravity
Exec=/usr/local/bin/antigravity %U
Icon=antigravity
stat -c '%U %G %a %n' /opt/antigravity/Antigravity-*/chrome-sandbox

Ожидаемый вывод: root root 4755 /opt/antigravity/Antigravity-x64/chrome-sandbox

Проверка AppArmor на Debian (важно!)

Debian 13, 12 и 11 работают с AppArmor иначе, чем Ubuntu. Не паникуйте, если увидите MISSING.

cat /sys/module/apparmor/parameters/enabled 2>/dev/null || echo "AppArmor не включён"
systemctl is-active apparmor 2>/dev/null || echo "AppArmor не активен"
sysctl -n kernel.apparmor_restrict_unprivileged_userns 2>/dev/null || echo "MISSING (нормально для Debian)"

Что означают эти проверки:

  • enabled: Y или active — AppArmor работает (это хорошо)
  • MISSING для kernel.apparmor_restrict_unprivileged_usernsнормально для Debian, это Ubuntu-специфичный параметр

Не создавайте кастомный профиль AppArmor для Antigravity, если нет явных логов блокировки.

Часть 2: Установка Antigravity IDE

Это редактор кода (похож на VS Code) со встроенным агентом Antigravity.

Создание скрипта обновления IDE

sudo tee /usr/local/bin/update-antigravity-ide > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

if [ "$(id -u)" -ne 0 ]; then
    echo "Run with sudo: sudo update-antigravity-ide" >&2
    exit 1
fi

download_page="https://antigravity.google/download"
install_root="/opt/antigravity-ide"
command_link="/usr/local/bin/antigravity-ide"
desktop_file="/usr/share/applications/antigravity-ide.desktop"
icon_file="/usr/share/icons/hicolor/512x512/apps/antigravity-ide.png"

case "$(uname -m)" in
x86_64 | amd64) platform="linux-x64" ;;
aarch64 | arm64) platform="linux-arm" ;;
*)
    echo "Unsupported architecture: $(uname -m)" >&2
    exit 1
    ;;
esac

for required_command in curl tar python3; do
    if ! command -v "$required_command" >/dev/null 2>&1; then
        echo "$required_command is required to install Antigravity IDE." >&2
        exit 1
    fi
done

if [ -L "$command_link" ]; then
    command_target=$(readlink -f "$command_link" || true)
    case "$command_target" in
    "$install_root"/*) ;;
    *)
        echo "$command_link points to $command_target. Move it before rerunning this helper." >&2
        exit 1
        ;;
    esac
elif [ -e "$command_link" ]; then
    echo "$command_link exists and is not a symlink. Move it before rerunning this helper." >&2
    exit 1
fi

tmp_parent="${TMPDIR:-/var/tmp}"
mkdir -p "$tmp_parent"
tmpdir=$(mktemp -d "$tmp_parent/antigravity-ide.XXXXXX")
trap 'rm -rf "$tmpdir"' EXIT
download_html="$tmpdir/download.html"
download_js="$tmpdir/download.js"
archive="$tmpdir/Antigravity-IDE.tar.gz"
archive_list="$tmpdir/archive-list.txt"

curl -fsSL --compressed --retry 3 -o "$download_html" "$download_page"
main_js_url=$(
    python3 - "$download_html" "$download_page" <<'PY'
import re
import sys
from pathlib import Path
from urllib.parse import urljoin

html = Path(sys.argv[1]).read_text()
page_url = sys.argv[2]
matches = re.findall(r'(?:src|href)="([^"]*main-[^"]+\.js)"', html)
if not matches:
    raise SystemExit("Could not find the Antigravity download bundle")
print(urljoin(page_url, matches[-1]))
PY
)

curl -fsSL --compressed --retry 3 -o "$download_js" "$main_js_url"
download_fields=$(
    python3 - "$download_js" "$platform" <<'PY'
import re
import sys
from pathlib import Path

bundle = Path(sys.argv[1]).read_text(errors="replace")
platform = sys.argv[2]
start = bundle.find('id:"antigravity-ide"')
end = bundle.find('},{name:"download",id:"antigravity-sdk"', start)
if start == -1 or end == -1:
    raise SystemExit("Could not find Antigravity IDE downloads")

section = bundle[start:end]
match = re.search(r'href:"([^"]+/' + re.escape(platform) + r'/Antigravity%20IDE\.tar\.gz)"', section)
if not match:
    raise SystemExit(f"Could not find an IDE download for {platform}")

url = match.group(1)
version_match = re.search(r'/stable/([^/]+)/', url)
if not version_match:
    raise SystemExit("Could not parse Antigravity IDE version from download URL")

print(version_match.group(1).split("-", 1)[0], url)
PY
)
read -r version download_url <<<"$download_fields"

if [ -z "$version" ] || [ -z "$download_url" ]; then
    echo "Could not parse the Antigravity IDE download page." >&2
    exit 1
fi

archive_top_dir="Antigravity IDE"
install_top_dir="Antigravity-IDE"
expected_target="$install_root/$install_top_dir/antigravity-ide"
sandbox_path="$install_root/$install_top_dir/chrome-sandbox"
installed_version=$(cat "$install_root/.unishell-version" 2>/dev/null || true)
desktop_matches=no
if [ -f "$desktop_file" ] &&
    grep -q '^Icon=antigravity-ide$' "$desktop_file" &&
    grep -q '^StartupWMClass=antigravity-ide$' "$desktop_file"; then
    desktop_matches=yes
fi
if [ "$installed_version" = "$version" ] &&
    [ -x "$expected_target" ] &&
    [ -L "$command_link" ] &&
    [ "$(readlink -f "$command_link")" = "$expected_target" ] &&
    [ "$desktop_matches" = yes ] &&
    [ -f "$icon_file" ]; then
    if [ ! -e "$sandbox_path" ] || [ "$(stat -c '%U:%G:%a' "$sandbox_path")" = "root:root:4755" ]; then
        printf 'Antigravity IDE %s is already installed at %s\n' "$version" "$install_root/$install_top_dir"
        exit 0
    fi
fi

printf 'Downloading Antigravity IDE %s for %s...\n' "$version" "$platform"
curl -fsSL --retry 3 -o "$archive" "$download_url"
tar -tzf "$archive" >"$archive_list"
top_dir=$(sed -n '1{s#/.*##;p;q}' "$archive_list")
if [ "$top_dir" != "$archive_top_dir" ]; then
    echo "Unexpected archive directory: $top_dir" >&2
    exit 1
fi

tar -xzf "$archive" -C "$tmpdir"
if [ ! -x "$tmpdir/$top_dir/antigravity-ide" ]; then
    echo "The Antigravity IDE launcher was not found in the archive." >&2
    exit 1
fi

icon_source="$tmpdir/$top_dir/resources/app/resources/linux/code.png"
if [ ! -f "$icon_source" ]; then
    echo "The Antigravity IDE icon was not found in the archive." >&2
    exit 1
fi

staging_root=$(mktemp -d "$(dirname "$install_root")/.antigravity-ide-install.XXXXXX")
chmod 0755 "$staging_root"
promoted=no
cleanup_staging() {
    if [ "$promoted" != yes ]; then
        rm -rf "$staging_root"
    fi
}
trap 'rm -rf "$tmpdir"; cleanup_staging' EXIT

cp -a "$tmpdir/$top_dir" "$staging_root/$install_top_dir"
printf '%s\n' "$version" >"$staging_root/.unishell-version"
if [ -f "$staging_root/$install_top_dir/chrome-sandbox" ]; then
    chown root:root "$staging_root/$install_top_dir/chrome-sandbox"
    chmod 4755 "$staging_root/$install_top_dir/chrome-sandbox"
fi
if [ -d "$install_root" ]; then
    rm -rf "${install_root}.previous"
    mv "$install_root" "${install_root}.previous"
fi
mv "$staging_root" "$install_root"
promoted=yes
ln -sfn "$install_root/$install_top_dir/antigravity-ide" "$command_link"

mkdir -p "$(dirname "$icon_file")"
install -m 0644 "$icon_source" "$icon_file"

tee "$desktop_file" >/dev/null <<DESKTOP
[Desktop Entry]
Name=Antigravity IDE
Comment=Google Antigravity IDE
Exec=$command_link %U
Icon=antigravity-ide
Terminal=false
Type=Application
Categories=Development;IDE;
MimeType=x-scheme-handler/antigravity-ide;application/x-antigravity-workspace;
StartupNotify=true
StartupWMClass=antigravity-ide
DESKTOP

if command -v update-desktop-database >/dev/null 2>&1; then
    update-desktop-database /usr/share/applications >/dev/null 2>&1 || true
fi

if command -v gtk-update-icon-cache >/dev/null 2>&1; then
    gtk-update-icon-cache -q /usr/share/icons/hicolor 2>/dev/null || true
fi

printf 'Installed Antigravity IDE %s at %s\n' "$version" "$install_root/$install_top_dir"
EOF
sudo chmod +x /usr/local/bin/update-antigravity-ide

Запуск установки Antigravity IDE

sudo update-antigravity-ide

Ожидаемый вывод:

Downloading Antigravity IDE 2.0.3 for linux-x64...
Installed Antigravity IDE 2.0.3 at /opt/antigravity-ide/Antigravity-IDE

Проверка установки IDE

readlink -f /usr/local/bin/antigravity-ide
test -x "$(readlink -f /usr/local/bin/antigravity-ide)" && echo "IDE установлен"

Часть 3: Установка Antigravity CLI (agy)

CLI-версия устанавливается в домашнюю директорию пользователя и не требует sudo.

Установка зависимостей

sudo apt install -y ca-certificates curl

Запуск официального установщика

curl -fsSL https://antigravity.google/cli/install.sh | bash

Что делает: Скачивает и запускает официальный скрипт установки CLI.

Куда устанавливается: ~/.local/bin/agy

Добавление ~/.local/bin в PATH

export PATH="$HOME/.local/bin:$PATH"

Зачем: Команда agy не будет найдена без этого.

Чтобы добавить навсегда (для Bash):

grep -qxF 'export PATH="$HOME/.local/bin:$PATH"' "$HOME/.bashrc" 2>/dev/null || printf '\nexport PATH="$HOME/.local/bin:$PATH"\n' >>"$HOME/.bashrc"

Проверка установки CLI

command -v agy
agy --version

Ожидаемый вывод: /home/username/.local/bin/agy и версия (например, 1.0.2).

(Опционально) Скрипт обновления CLI

mkdir -p "$HOME/.local/bin"

tee "$HOME/.local/bin/update-antigravity-cli" > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

export PATH="$HOME/.local/bin:$PATH"

if [ ! -x "$HOME/.local/bin/agy" ]; then
    curl -fsSL https://antigravity.google/cli/install.sh | bash
else
    "$HOME/.local/bin/agy" update
fi

"$HOME/.local/bin/agy" --version
EOF

chmod +x "$HOME/.local/bin/update-antigravity-cli"

Часть 4: Установка legacy APT-пакета (только для версии 1.x)

⚠️ Не рекомендуется для новых установок. Этот метод устанавливает старую версию 1.23.2, а не современный Antigravity 2.0.

sudo apt update
sudo apt install -y ca-certificates curl gpg
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSLo antigravity-repo-key.asc https://us-central1-apt.pkg.dev/doc/repo-signing-key.gpg
gpg --dearmor --yes -o antigravity-repo-key.gpg antigravity-repo-key.asc
sudo install -m 0644 antigravity-repo-key.gpg /etc/apt/keyrings/antigravity-repo-key.gpg
rm -f antigravity-repo-key.asc antigravity-repo-key.gpg
sudo tee /etc/apt/sources.list.d/google-antigravity.sources > /dev/null <<'EOF'
Types: deb
URIs: https://us-central1-apt.pkg.dev/projects/antigravity-auto-updater-dev/
Suites: antigravity-debian
Components: main
Signed-By: /etc/apt/keyrings/antigravity-repo-key.gpg
EOF
sudo apt update
apt-cache policy antigravity

Ожидаемый вывод (версия будет 1.x, НЕ 2.0):

antigravity:
  Installed: (none)
  Candidate: 1.23.2-1776332190
sudo apt install antigravity

Запуск Antigravity

Запуск десктоп-приложения

Из меню приложений: Найдите Antigravity в меню GNOME/KDE/XFCE.

Из терминала:

antigravity

Запуск IDE

Из меню приложений: Найдите Antigravity IDE.

Из терминала:

antigravity-ide

Запуск CLI

agy

Первая авторизация: CLI откроет браузер для входа в Google. Если вы по SSH, скопируйте URL из терминала, откройте в локальном браузере, авторизуйтесь и вставьте код.

Управление Antigravity

Обновление десктоп-приложения

sudo update-antigravity

Обновление IDE

sudo update-antigravity-ide

Обновление CLI

agy update

или

update-antigravity-cli

Решение типичных проблем

8.1 Ошибка: update-antigravity сообщает об уже установленной версии 2.0.1 (хотя есть новее)

Симптом: Скрипт говорит, что установлена 2.0.1, но вы знаете, что есть более новая версия.

Причина: Установлен старый скрипт, который использует устаревший endpoint Google.

Решение: Перезапишите скрипт текущей версией из раздела установки (шаг создания скрипта) и запустите sudo update-antigravity снова.

8.2 Ошибка: Desktop helper fails with download error

Симптом: Ошибка 404 или Could not find the Antigravity download bundle.

Причина: Google изменил структуру страницы загрузки.

Решение: Проверьте, что страница загрузки доступна:

curl -fsSL --compressed https://antigravity.google/download | grep -o 'main-[^"]*\.js'

Если выводит имя файла — проблема в чём-то другом. Обновите скрипт из статьи.

8.3 Ошибка: Chrome sandbox не работает (AppArmor)

Симптом: Antigravity не запускается, ошибки в терминале про sandbox.

Решение: Проверьте права на chrome-sandbox:

stat -c '%U %G %a %n' /opt/antigravity/Antigravity-*/chrome-sandbox

Должно быть: root root 4755. Если нет — переустановите:

sudo update-antigravity

Проверьте логи AppArmor:

sudo journalctl -k --since "10 minutes ago" --no-pager | grep -iE 'apparmor.*antigravity'

Если есть явные denial (только тогда создавайте профиль). В 99% случаев достаточно правильных прав на chrome-sandbox.

8.4 Ошибка: Чёрный экран или не запускается GPU

Симптом: Antigravity запускается, но окно чёрное или падает с GPU-ошибками.

Причина: Проблемы с 3D-ускорением (часто в виртуальных машинах).

Временное решение (только для диагностики):

antigravity --disable-gpu
antigravity-ide --disable-gpu
ELECTRON_OZONE_PLATFORM_HINT=x11 antigravity --disable-gpu

8.5 Ошибка: agy command not found

Симптом: agy не найдена после установки.

Решение: Добавьте ~/.local/bin в PATH:

export PATH="$HOME/.local/bin:$PATH"

И добавьте строку в ~/.bashrc для постоянного эффекта.

8.6 Ошибка: Sign-in открывается в неправильном приложении

Симптом: Авторизация открывается в текстовом редакторе или другом приложении, а не в браузере.

Решение: Установите браузер по умолчанию:

xdg-settings set default-web-browser firefox-esr.desktop

(замените на свой браузер, если используете не Firefox).

Удаление Antigravity

Удаление десктоп-приложения

# Удаление команды
if [ -L /usr/local/bin/antigravity ] && readlink /usr/local/bin/antigravity | grep -q '^/opt/antigravity/'; then
  sudo rm -f /usr/local/bin/antigravity
fi

# Удаление .desktop-файла
if [ -f /usr/share/applications/antigravity.desktop ] && grep -q '^Exec=/usr/local/bin/antigravity ' /usr/share/applications/antigravity.desktop; then
  sudo rm -f /usr/share/applications/antigravity.desktop
fi

# Удаление файлов
sudo rm -rf /opt/antigravity /opt/antigravity.previous
sudo rm -f /usr/local/bin/update-antigravity
sudo rm -f /usr/share/icons/hicolor/512x512/apps/antigravity.png

# Обновление кэша
if command -v update-desktop-database >/dev/null 2>&1; then
  sudo update-desktop-database /usr/share/applications >/dev/null 2>&1 || true
fi
hash -r

Удаление IDE

sudo rm -rf /opt/antigravity-ide /opt/antigravity-ide.previous
sudo rm -f /usr/local/bin/antigravity-ide /usr/local/bin/update-antigravity-ide
sudo rm -f /usr/share/applications/antigravity-ide.desktop
sudo rm -f /usr/share/icons/hicolor/512x512/apps/antigravity-ide.png
hash -r

Удаление CLI

rm -f "$HOME/.local/bin/agy" "$HOME/.local/bin/update-antigravity-cli"
hash -r

Удаление legacy APT-пакета

sudo apt purge antigravity
sudo rm -f /etc/apt/sources.list.d/google-antigravity.sources
sudo rm -f /etc/apt/keyrings/antigravity-repo-key.gpg
sudo apt update

Удаление пользовательских данных (по желанию)

rm -rf "$HOME/.config/Antigravity" \
       "$HOME/.config/Antigravity IDE" \
       "$HOME/.antigravity" \
       "$HOME/.antigravity-ide" \
       "$HOME/.cache/antigravity" \
       "$HOME/.gemini/antigravity"

Чек-лист: что проверить после установки

Десктоп-приложение:

  • [ ] sudo whoami выводит root
  • [ ] antigravity --help или antigravity --version работает
  • [ ] readlink -f /usr/local/bin/antigravity ведёт в /opt/antigravity
  • [ ] /usr/share/applications/antigravity.desktop существует
  • [ ] stat -c '%U %G %a' /opt/antigravity/Antigravity-*/chrome-sandbox показывает root root 4755

IDE:

  • [ ] antigravity-ide --help или antigravity-ide --version работает
  • [ ] readlink -f /usr/local/bin/antigravity-ide ведёт в /opt/antigravity-ide

CLI:

  • [ ] command -v agy показывает /home/username/.local/bin/agy
  • [ ] agy --version показывает версию
  • [ ] agy --help показывает справку

Заключение

Google Antigravity установлен на Debian. В зависимости от ваших задач:

  • Десктоп-приложение (antigravity) — для управления проектами и визуальной оркестрацией агентов
  • IDE (antigravity-ide) — для разработки с ИИ-помощником в редакторе
  • CLI (agy) — для терминальной работы, SSH и скриптов

Что дальше:

💡 Важно: Antigravity — это новый продукт. Не копируйте слепо Ubuntu-решения для AppArmor на Debian. Проверяйте логи перед созданием кастомных профилей. В большинстве случаев достаточно правильных прав на chrome-sandbox (root:root 4755).