Jeffはコマンドラインを離れずにGmail、Calendar、Tasks、Contactsを操作できるターミナルベースのAIアシスタントだ。ストリーミングレスポンス、vimスタイルナビゲーション、会話メモリを備えたフルTUIとして動くか、手早いクエリ向けのワンショットCLIとして動く。Rustで書かれ、5つのLLMプロバイダーから好きなものを選べる。
インストール
brew install 2389-research/tap/jeff
何をするのか
ターミナルからGoogle Workspace。 メールの検索と送信、カレンダーイベントの管理、連絡先の確認、タスクの作成 — すべて自然言語で。JeffはOAuthで認証してトークンをローカルに保存する。パーソナライズウィザード(jeff init)が送信済みメールを読んであなたの文体を学習するので、下書きした返信はあなたが書いたように聞こえる。
インタラクティブTUIまたはプリントモード。 デフォルトはj/kナビゲーション、シンタックスハイライト、リアルタイムストリーミングを備えたフルスクリーンインターフェース。プリントモード(jeff -p 'summarize my inbox')はスクリプトやパイプ用に単一レスポンスを返す。組み込みの4カラーテーマ: Default、Dracula、Gruvbox、Nord。
マルチプロバイダー。 Anthropic(Claude)、OpenAI、Google Gemini、OpenRouter、Ollama。--providerで切り替えるかJEFF_PROVIDERを設定する。Ollamaでモデルをローカル実行するか、OpenRouter経由でルーティングする。
MCP拡張性。 Model Context Protocolで外部ツールサーバーを接続。jeff mcp addでサーバーを登録すると、ツールが自動的に会話に現れる。8つのライフサイクルフック(ツール使用、レスポンス、送信、セッションのpre/post)でログ、通知、ガードレール用のカスタムスクリプトを接続できる。
会話管理。 すべてがローカルSQLiteに永続化される。--continueまたは--resume <id>で会話を再開。markdown、JSON、HTMLにエクスポート。クイックアクセス用に会話をお気に入り登録。タイトルで履歴を検索。
ツール承認フロー。 危険なツール(bash、ファイル書き込み)はTUIで明示的な承認が必要。特定ツールを常に許可または決して許可しないルールを保存できる。モデルを完全に信頼するなら--dangerously-skip-permissionsでオーバーライド。
仕組み
JeffはGoogle APIツール定義にjeff-soma、コアツール(bash、ファイル操作、ウェブ検索、grep)にmux-rsを使っている。TUIはratatui + crossterm。会話はイベント駆動アーキテクチャでストリーム処理される — ランタイムがストリーミングテキストとツールリクエストをチャネル経由でUIに送り、UIが承認とメッセージを返す。コンテキスト管理がトークン使用量を追跡し、ウィンドウ上限に近づくと自動的に刈り込む。
必要要件
- 少なくとも1つのプロバイダーのAPIキー(
ANTHROPIC_API_KEY、OPENAI_API_KEYなど)— またはOllamaがローカルで動作していること - メール・カレンダー機能にはGoogle OAuthクレデンシャルが必要(
jeff auth googleで設定)
