
2026/06/29 4:43
Show HN: Bash4LLM+ —軽量で依存関係のない BASH ラッパーです。LLM API のための
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
Bash4LLM⁺ は、Linux、macOS、WSL、BSD などの Unix 系システムおよび Android デバイス(Termux を介して)向けに設計された安全で監査可能な Bash スクリプトです。その主な革新点は、Groq OpenAI API と統合しつつ、Gemini、Mistral、または Hugging Face など将来のプロバイダーにも対応するアーキテクチャを維持し、特定モデルをハードコーディングしないことです。セキュリティは設計自体に組み込まれており、危険な実践(/tmp ディレクトリを使用することや eval コマンドを使用すること)を厳密に回避し、Android には flock などの不安定なメカニズムの代わりに原子的なディレクトリロックを活用し、プロバイダーコードを安全なユーザー所有のディレクトリ上に配置することを保証します。ユーザー生成された出力を直接実行することはありません。基本的なチャット機能を超えて、このスクリプトは UI ステートシステムを通じて原子的な JSON メタデータを公開しており、Home Assistant などの自動化ツールとの深い統合を容易にします。ストリーミング、設定可能な閾値での自動保存、ダイナミックなモデル管理(更新、ホワイトリスト)、時間やトークン制限といったパラメータに対する微細な制御もサポートしています。インストールは簡単で、標準的な GitHub クローン、API キーの設定(GROQ_API_KEY)、bash、curl、jq、およびコアユーティリティなどの最小限の必要条件のみを必要とします。専有 AI バイナリへのオープンソース代替手段(GPL v3)として、モバイルおよびデスクトップ環境間でのポータビリティを提供し、直接プロンプト、多行入力、JSON データのパイプ、バッチ処理に対する広範なコマンドオプションを備えています。
本文
Bash4LLM⁺:セキュアな Bash 優先 AI CLI ツール
Bash4LLM⁺ は、Groq の OpenAI 互換 API と対応し、他社プロバイダーへも拡張可能な、完全に監査可能なラッパー CLI ツールです。単一の Bash スクリプトで構成されるため、自己完結型かつ即座に利用できます。
特徴と利点
- 動的モデルリスト — ハードコードなし。
をリアルタイムで取得します。GET https://api.groq.com/openai/v1/models - セキュリティバイデザイン —
使用禁止、/tmp
禁止、厳格なパーミッション設定を標準実装しています。eval - プラットフォーム互換性 — Linux、macOS、WSL、Cygwin、Termux(Android)、BSD で動作が保証されます。
- UI ステートシステム(ui_state) — コアから JSON フォーマットの原子形メタデータを公開し、GUI や Home Assistant などの連携を支援します。
- ストリーミング対応 — リアルタイム出力または終了時の完全出力を切り替え可能です。
- 自動保存機能 — 設定可能な閾値を超えた長文出力を自動的に保存します。
- 高度なモデル管理 — リフレッシュ、リスト表示、デフォルト永続化、動的ホワイトリストを備えています。
- Termux / Android 向け最適化 — Termux を検出し、Android の SELinux/Kernel レstrictions に合わせた堅牢なディレクトリロックへ切り替えます。
脅威モデルとセキュリティ要件
Bash4LLM⁺ は主に シングルユーザー環境(PC、個人サーバー) 向けに設計されています。
セキュリティの前提条件
- プロバイダー信頼性: プロバイダーはシェル内で実行されるコードのため、管理可能な信頼できるディレクトリに配置してください。
- 設定の信頼:
やBASH4LLM_EXTRAS_DIR
などの環境変数は管理下にある前提です。BASH4LLM_TMPDIR - スクリプトの安全性: スクリプトはモデルからの出力を決して(jamais)実行しません。
- リスク緩和: TOCTOU(Time-of-Check-to-Time-of-Use)や JSON/SSE パースの限界については緩和済みですが、詳細は「SECURITY」セクションで確認してください。
必須要件
PATH 上に以下のパッケージ(または同等品)が存在する必要があります:
bashcoreutilsfindutilsutil-linuxgawkcurljq
インストール手順
【ファストフォワード】迅速インストールガイド
以下のコマンドを実行して、即座に Bash4LLM⁺ を開始できます。
# 1. リポジトリをクローン(最新コミットのみ) git clone --depth 1 --branch main https://github.com/kamaludu/bash4llm.git repo-bash4llm # 2. ワーキングディレクトリを作成し、実行ファイルを抽出 mkdir -p bash4llm cp repo-bash4llm/bin/bash4llm bash4llm/ chmod +x bash4llm/bash4llm # 3. ディレクトリに入り、モデルリストを更新 cd bash4llm ./bash4llm --refresh-models
API キー設定: スクリプトが Groq の API キー入力を促します。以下の通りエクスポートしてください。
export GROQ_API_KEY="gsk_xxxxxxxxxxxxxxxxx"
オプション:Extras のインストール
追加プロバイダー(Gemini, Hugging Face など)やテンプレートを含む機能をインストールするには:
./bash4llm --install-extras ../repo-bash4llm/extras/
または、簡易オプションを使用する場合:
./bash4llm --install-extras
選択的なインストール
特定の機能のみをインストールする場合(例:プロバイダー A のみ):
./bash4llm --install-extras providerA
各種有効フラグ:
: ソースディレクトリ指定--source <dir>
: 強制実行--force
: 実行前確認--dry-run
簡易使用法
プロンプトの入力方法
| タイプ | コマンド例 | 説明 |
|---|---|---|
| 直接的なプロンプト | | 単純な文字列を渡します。 |
| マルチライン | | Here-Document を使用します。 |
| パイプ処理 | | 標準入力からの入力をサポートします。 |
| Dry Run | | 実際の API コールを行わずシミュレーションモードです。 |
| モデル指定 | | 特定のモデルを明示的に指定します。 |
| 外部プロバイダー | | インストール済みの場合、他のプロバイダーへ切り替え可能です。 |
セッション管理 (--session
)
--sessionコンテキストメモリ(会話履歴)を利用するには、
--session <id> を指定する必要があります。
# 新セッションを開始 ./bash4llm --session chat1 "こんにちは" # 同じセッションで続きを指示 ./bash4llm --session chat1 "私が言ったことを要約して" ./bash4llm --session chat1 --session-window 10 "続きを続けて"
⚠️ 重要: コンテキストメモリを利用するには、必ず
--session <id> を含める必要があります。
コマンドラインオプション詳細
モデルとプロバイダー
| フラグ | 引数 | 効果 |
|---|---|---|
| なし | モデルリストを更新します(API キー必須)。 |
| なし | インタラクティブな形式でモデル一覧を表示。 |
| なし | RAW 形式(一行ずつ)でモデル一覧を表示。 |
| なし | プロバイダー一覧を表示。 |
| はい | アクティブなプロバイダーのデフォルトモデルを設定。 |
, | はい | 今回実行用のモデルを指定。 |
| はい | CLI からプロバイダーを選択。 |
入力処理
| フラグ | 引数 | 効果 |
|---|---|---|
| はい | ファイルの内容を入力に追加。 |
| はい | OpenAI 互換 JSON 入力を設定。 |
| はい | テンプレートファイルから入力生成。 |
| はい | バッチ処理を実行(1 ライン = 1 プロンプト)。 |
セッション・パラメータ
| フラグ | 引数 | 効果 |
|---|---|---|
| はい | 特定 ID のセッションを有効化。 |
| はい | API コール不要で空セッションを初期化(必ず と併用)。 |
| はい | システムプロンプトを設定。 |
, | はい | 出力の温度パラメータ設定 (0.0〜2.0)。 |
| はい | 最大トークン数を設定。 |
出力と保存
| フラグ | 引数 | 効果 |
|---|---|---|
| なし | 出力の保存を強制。 |
| なし | 保存機能を無効化。 |
| はい | 出力ファイルまたはディレクトリのパス設定。 |
| はい | 自動保存のサイズ閾値設定 (デフォルト:1000 B)。 |
| なし | インテグな RAW JSON 形式出力。 |
| なし | フォーマットされた JSON 出力。 |
| なし | 標準的な抽出テキスト(デフォルト)。 |
実行モード・診断
| フラグ | 引数 | 効果 |
|---|---|---|
| なし | API コールなしのシミュレーション動作。 |
| なし | 不要な出力削減、TTY タイトル抑制。 |
/ | なし | ストリーミングの有効/無効切り替え。 |
| なし | インタラクティブ REPL チャットモード。 |
| なし | 現在有効な構成情報を表示。 |
| なし | システム完全診断を実行。 |
設定とモデル優先順位
構成ファイルとパス
- ローカルパラメータ:
(MODEL, TURE, MAX_TOKENS など)$BASH4LLM_CONFIG_DIR/config - プロバイダー別デフォルト:
$BASH4LLM_CONFIG_DIR/model.$PROVIDER - モデルホワイトリスト:
($MODELS_FILE
で更新)--refresh-models
モデル選択の優先順位
(引数優先)-m/--model
(プロバイダー別設定)model.$PROVIDER- プロバイダー自動選択 (
)auto_select_model_... - ホワイトリスト最初要素 (
)models.txt - レガシーグローバル構成 (
)MODEL=...
ファイルセキュリティと隔離
の使用は禁止されており、一時ファイルは/tmp
に隔離されます。$RUN_TMPDIR- パーミッション:
- 一時ファイルディレクトリ:
(umask 077)700 - 保存されたファイル:
600
- 一時ファイルディレクトリ:
を指定した場合は、可能な限りディレクトリを作成します。--out
UI ステートシステム (ui_state)
Bash4LLM⁺ は GUI や外部ツールとの連携を支援するため、原子形 JSON ファイルを提供します。
| ファイルパス | 内容 |
|---|---|
| セッション状態 (, , ) |
| すべてのセッション一覧リスト |
| 最後の API 結果 (, , エッジケース検知) |
| 最後の履歴保存情報 |
| プロバイダー機能(ストリーミング、モデル更新など) |
使い方: GUI(オプション Extras)はこれらのファイルを参照して状態を表示します。CGI プレースホルダーとしても利用可能です。
セキュリティに関する注記
- eval 不使用: スクリプト内で
は使用しません。eval - 実行不可: モデルの出力をシェルとして実行しません。
- プロバイダー管理: プロバイダーはコードであるため、
やextras
ディレクトリを安全に保ってください。providers - TOCTOU リスク緩和: Time-of-Check-to-Time-of-Use 問題は緩和済みです。
エラーコード一覧
| コード | 変数名 | 意味 |
|---|---|---|
| - | 成功 |
| | API キーが不足しています |
| | モデルが無効またはホワイトリスト外です |
| | ネットワーク/curl エラー |
| | プロンプトが指定されていません |
| | ファイルシステム/一時ファイルエラー |
| | プロバイダーの HTTP/API エラー |
主要な環境変数
| 変数名 | 必須か? | 説明 |
|---|---|---|
| 必須 | Groq プロバイダー用の API キー。 |
| 必須 | 一時ファイル保存ディレクトリ。 |
| 推奨 | 設定ファイルを格納するディレクトリ。 |
| 推奨 | セッションと履歴の保存ディレクトリ。 |
| なし | アクティブなモデル(引数で上書きされます)。 |
| なし | アクティブなプロバイダー。 |
| なし | 許可されたモデルのホワイトリスト。 |
ライセンス・ライセンスファイル
Bash4LLM⁺ は GPL v3 ライセンスの下で提供されます。詳細は
LICENSE ファイルをご覧ください。
お問い合わせ
- 著者: Cristian Evangelisti
- メール:
opensource@cevangel.anonaddy.me - リポジトリ: https://github.com/kamaludu/bash4llm