aptai(llm-apt-autoupgrade)

LLM に相談しながら apt を自動更新する

LLM-assisted unattended apt upgrades for Debian / Ubuntu

対応環境
Ubuntu 24.04 / 26.04 LTS、Debian 13 / Python 3.11 以上
最新リリース
aptai 0.1.0 (2026-08-20)
ライセンス
MIT
言語
Python
更新
2026-09-25

リリースページ (v0.1.0) GitHub で見る

aptai の処理の流れ。preflight、apt-get update、full-upgrade、autoremove、postflight の各ステージと、失敗時に Claude へ相談して型付きアクションをポリシー検査・シミュレーションしてから実行する復旧ループ、3 往復で解決しない場合の Slack / Mattermost 通知
無人更新の流れと、失敗したステージだけが入る復旧ループ。LLM が返せるのは型付きアクションの固定語彙だけ(図解)

aptai(リポジトリ名は llm-apt-autoupgrade)は、apt update → apt full-upgrade → apt autoremove を無人で実行し、途中でエラーが起きたら Claude(既定は Opus 5.5)に相談して復旧を試みる Debian / Ubuntu 向けのツールです。3 往復まで自動で復旧を試み、それでもダメなら Slack / Mattermost に経緯のログ付きで通知します。

LLM が提案した操作を root 権限で実行する以上、そのままでは危険な設計になり得ます。そこで aptai は「LLM にシェルコマンドを書かせない」という前提で作られています。モデルが返せるのは aptai 自身が実装した型付きアクションの固定語彙だけで、提案はローカルポリシーで検査し、破壊的な apt 操作は必ず apt-get -s で先にシミュレーションしてから実行します。

追加パッケージはゼロで、Python 標準ライブラリのみで動作します。「パッケージ管理が壊れているときに直す」ツールが、壊れた apt や pip 経由でしか入らないライブラリに依存したら本末転倒だからです。何が送信されるかは sudo aptai diagnose でそのまま確認でき、認証情報は送信前にマスクされます。

特徴

  • LLM はシェルコマンドを書けません。返せるのは aptai 自身が実装した型付きアクションの固定語彙だけです
  • 失敗したステージだけが相談ループに入り、ステージごとに使えるアクションが別々に制限されます
  • ローカルポリシーが提案を検査し、Essential / Priority: required / 稼働中カーネル / 保護リストのパッケージは絶対に削除しません
  • 破壊的な apt 操作は必ず apt-get -s で先にシミュレーションし、apt 自身の計画を検査してから実行します
  • Python 標準ライブラリのみで動作し、Claude API とは urllib.request で直接 HTTPS を話します
  • apt の出力は信頼できないデータとして囲み、プロンプトインジェクションが仕込まれる前提で設計しています
  • 3 往復しても失敗したら Slack / Mattermost に通知し、JSON レポートを /var/log/aptai/ に残します
  • systemd のタイマーで毎日実行できます。ユニットテストの大半は「敵対的なプランが確実に拒否されること」の確認です

対応環境と入手方法

項目 要件
OS Ubuntu 24.04 LTS / 26.04 LTS、Debian 13 (trixie)
Python 3.11 以上(tomllib のため)
追加パッケージ なし。Python 標準ライブラリのみで動作します
権限 root(systemd サービスまたは sudo)

GitHub のリポジトリを clone して、付属のインストールスクリプトを実行します。

git clone https://github.com/shunnag/llm-apt-autoupgrade.git
cd llm-apt-autoupgrade
sudo ./scripts/install.sh          # /usr/local 配下に配置
# または
sudo ./scripts/install.sh --enable-timer   # 同時に毎日のタイマーを有効化

続けて /etc/aptai/env に ANTHROPIC_API_KEY を設定し、動作確認します。

sudo aptai check          # preflight・APIキー・通知先の確認
sudo aptai diagnose       # 「何が送信されるか」をそのまま表示
sudo aptai test-llm       # Claude API への疎通確認
sudo aptai run --dry-run  # 何も変更せずに一通り流す

このツールは LLM が提案した操作を root 権限で自動実行します。まず VM や検証機で試してください。本番機にいきなり入れないでください。mode = "suggest"(提案のみ・実行しない)と --dry-run が最初の一歩です。

アンインストールは sudo ./scripts/uninstall.sh(設定ごと消すなら --purge)。安全機構の詳細は SECURITY.md、コードの構成は docs/architecture.md にあります。