Jeff is a terminal-based AI assistant that handles your Gmail, Calendar, Tasks, and Contacts without leaving the command line. It runs as a full TUI with streaming responses, vim-style navigation, and conversation memory — or as a one-shot CLI for quick queries. Built in Rust, backed by your choice of five LLM providers.
Install
brew install 2389-research/tap/jeff
What it does
Google Workspace from the terminal. Search and send email, manage calendar events, check contacts, and create tasks — all through natural language. Jeff authenticates via OAuth and stores tokens locally. A personalization wizard (jeff init) reads your sent emails to learn your writing style, so drafted replies sound like you wrote them.
Interactive TUI or print mode. The default mode gives you a full-screen interface with j/k navigation, syntax highlighting, and real-time streaming. Print mode (jeff -p 'summarize my inbox') returns a single response for scripting and pipes. Four color themes ship built-in: Default, Dracula, Gruvbox, and Nord.
Multi-provider. Anthropic (Claude), OpenAI, Google Gemini, OpenRouter, and Ollama. Switch with --provider or set JEFF_PROVIDER. Run models locally with Ollama or route through OpenRouter.
MCP extensibility. Connect external tool servers via the Model Context Protocol. jeff mcp add registers a server; tools show up in conversation automatically. Eight lifecycle hooks (pre/post for tool use, response, submit, and session) let you wire in custom scripts for logging, notifications, or guardrails.
Conversation management. Everything persists in local SQLite. Resume conversations with --continue or --resume <id>. Export to markdown, JSON, or HTML. Favorite conversations for quick access. Search history by title.
Tool approval flow. Risky tools (bash, file writes) require explicit approval in the TUI before executing. Save rules to always-allow or never-allow specific tools. Override with --dangerously-skip-permissions if you trust the model completely.
How it works
Jeff runs on jeff-soma for Google API tool definitions and mux-rs for core tools (bash, file ops, web search, grep). The TUI is ratatui + crossterm. Conversations stream through an event-driven architecture — the runtime sends streaming text and tool requests to the UI via channels, the UI sends back approvals and messages. Context management tracks token usage and prunes automatically when you approach the window limit.
Requirements
- An API key for at least one provider (
ANTHROPIC_API_KEY,OPENAI_API_KEY, etc.) — or Ollama running locally - Google OAuth credentials for email/calendar features (configured via
jeff auth google)
