Personal Agent is a local-first desktop AI workspace that brings your conversations, AI providers, custom agents, skills, and instructions into one place. Connect to multiple cloud or local models, create reusable AI capabilities, and activate agents, skills, or instructions instantly using slash commands-all while keeping your conversations and data under your control.
See ARCHITECTURE.md for a detailed breakdown of the app's architecture, component tree, and data flows. See docs/SETUP.md for step-by-step provider, web search, and database setup.
I use multiple AI subscriptions - Gemini, Opencode Go, and other OpenAI-compatible providers. I also run models locally via LM Studio and Ollama. For development, I use Pi and Opencode with those same subscriptions. But I wanted a separate chat interface for daily random things - brainstorming, quick questions, research, notes - without mixing into my dev tools. Over time, I kept running into the same frustrations:
- Scattered conversations. I would ask questions across different platforms and forget where I asked what. There was no single place to find my conversation history.
- Lost data. Responses, insights, and decisions would disappear into separate chat logs with no way to search or retrieve them later.
- No tagging or organization. I could not tag a conversation, group related chats, or pin important ones. Everything was just a flat list of untitled chats.
- No formatting control. Every platform forces its own style - emojis, formatting quirks, and output structures I did not ask for. I wanted my responses in a specific format, every time, without fighting the system.
- Generic outputs. When I asked an LLM to plan something, it would give me a generic plan format instead of the structure I actually use. There was no way to enforce my own templates.
Personal Agent solves all of this:
- Centralized storage. All conversations live in one local database. Search across everything from a single place. Optionally sync to Turso for multi-device access.
- Custom instructions. Define global instructions that get prepended to every conversation. No emojis, specific formatting rules, your preferred response structure - it just works.
- Skills. Create reusable skill blocks (think: project-specific guidelines, coding conventions, domain knowledge) and activate them per conversation. The LLM follows your rules, not the other way around.
- Custom agents. Combine instructions and skills into named agent profiles. Switch between them depending on what you are working on.
- Tagging and pinning. Organize conversations with tags. Pin the ones that matter. Find what you need without scrolling through a list of "New Chat (47)".
- Multi-device. Turso database sync means your conversations, agents, and instructions follow you across macOS and Windows devices.
Download the latest release for your platform from the GitHub Releases page. Packages are provided for macOS, Windows, and Linux (AppImage, .deb, .rpm, and a native Arch .pkg.tar.zst).
Download the .dmg installer from the releases page, open it, and drag Personal Agent to your Applications folder.
Download the .msi installer from the releases page and run it.
Pick the package for your distro — only the package file is needed; any staging folders next to it in the release are build artifacts and can be ignored.
chmod +x "Personal Agent_x.y.z_amd64.AppImage"
./"Personal Agent_x.y.z_amd64.AppImage"- No installation or root required — just run it, or double-click in a file manager.
- Optional: use AppImageLauncher to integrate it into the app menu automatically.
- Optional: move it to a permanent location, e.g.
~/.local/bin/or/opt/.
sudo apt install ./Personal\ Agent_x.y.z_amd64.deb
# or
sudo dpkg -i ./Personal\ Agent_x.y.z_amd64.debUninstall:
sudo apt remove personal-agentsudo dnf install ./Personal\ Agent-x.y.z-1.x86_64.rpm
# or on RHEL/CentOS
sudo yum localinstall ./Personal\ Agent-x.y.z-1.x86_64.rpm
# or on openSUSE
sudo zypper install ./Personal\ Agent-x.y.z-1.x86_64.rpmUninstall:
sudo dnf remove personal-agentAfter installing deb/rpm, launch Personal Agent from your app menu.
Each release ships a native Arch package. Download it from the releases page and install with pacman:
sudo pacman -U personal-agent-x.y.z-1-x86_64.pkg.tar.zstThis registers the app so it can be tracked and removed like any other package. The package pulls in webkit2gtk-4.1, libappindicator-gtk3, librsvg, gtk3, and openssl as dependencies (install libappindicator-gtk3 first if pacman reports it missing). Launch Personal Agent from your app menu, or run personal-agent.
Uninstall:
sudo pacman -R personal-agentThe project does not publish an official AUR package. To build the
.pkg.tar.zstyourself, follow AUR.md. A community-maintained AUR package, if one appears, would install withyay -S personal-agent(or your preferred AUR helper).
# Prerequisites: Node.js 20+, Rust, and Tauri v2 system dependencies
git clone https://github.com/im4aLL/personal-agent.git
cd personal-agent
npm install
npm run tauri buildnpm install
npm run tauri devPersonal Agent works with any OpenAI-compatible API. For step-by-step instructions to add Opencode Go, OpenAI, Ollama, LM Studio, DeepSeek, or a custom endpoint, see docs/SETUP.md.
Want multi-device sync or web search? Those are covered in docs/SETUP.md too.
- Chat with any OpenAI-compatible provider (OpenAI, Ollama, LM Studio, DeepSeek, Opencode Go, and more)
- Streaming responses with stop support
- Thinking / reasoning content display (collapsible)
- Per-message retry on errors
- Message editing and response regeneration
- Auto-generated conversation titles
- Conversation search with debounced input
- Virtualized message list for smooth scrolling in long conversations
- Tagging and pinning for conversation organization
- File attachments - images, PDFs (text is extracted and sent to the model), plus common text/code formats (
.txt,.md,.json,.csv,.ts,.py-style extensions, etc.) - Keyboard shortcuts: Enter to send, Shift+Enter for newline, Esc to stop
- Live context-usage indicator (estimated tokens vs. the model's context window) in the message input
- Automatic conversation summarization when a conversation approaches the context limit, so older turns are compacted instead of dropped
- Manual "Compact" button to summarize on demand
- Summaries are invalidated automatically if you edit or regenerate a message they cover, so a stale summary is never reused
Opt-in per tool in Settings > Web Search - the model only calls a tool if you've turned it on:
- Web search - Search the web via your own Tavily API key
- URL fetching - Let the agent fetch and read the content of a URL
- Google / DuckDuckGo search window - Opens a real, visible search window; you do the searching yourself (handles logins/captchas), then click "Done" to hand the results back to the model
- Tools are disabled automatically for Gemini providers due to a known upstream issue with tool calls
Detailed tool and web search setup: see docs/SETUP.md.
- Custom instructions - Global rules that apply to every message you send. Define your preferred format, tone, and constraints once.
- Skills - Reusable knowledge blocks you can activate per conversation (coding conventions, project guidelines, domain-specific rules).
- Custom agents - Combine instructions and skills into named profiles. Switch agents when switching contexts.
How instructions, skills, and agents work together: see docs/SETUP.md.
- Local-first storage with Turso (libsql) for optional cloud sync
- Conversations, agents, skills, and instructions sync across devices
- Offline detection with automatic reconnection
- Settings export without API keys (provider labels, URLs, and model lists only)
- API keys masked in all UI and never logged
- Dev-mode provider call logging (URL and model only, no keys)
- Dark, light, and system theme support
- Stream-drop retry with exponential backoff
- Provider management with connection testing and model discovery
Custom instructions, skills, and custom agents form the core of Personal Agent's customization system. They are stored in your Turso database (or locally) and can be managed from Settings. See docs/SETUP.md for details and examples.
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | React 19 + TypeScript |
| Build tool | Vite |
| State management | Zustand |
| AI SDK | Vercel AI SDK with OpenAI-compatible provider |
| Styling | Tailwind CSS v4 + shadcn/ui |
| Markdown | react-markdown with GFM + highlight.js |
| UI primitives | Radix UI + Base UI |
| Icons | Lucide React |
| Database | Turso (libsql) for optional cloud sync; localStorage for provider config |
| Linting & formatting | Biome |
| Routing | React Router v7 |
MIT



