aptai(llm-apt-autoupgrade)
LLM に相談しながら apt を自動更新する
LLM-assisted unattended apt upgrades for Debian / Ubuntu
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 にあります。