A local-first personal AI assistant in readable Python, with its own agent loop, SQLite-based memory, and built-in evals.
ChrisVip001/joyczl-agent
A local-first personal assistant with a Rust core for the agent loop, memory and tools, plus TypeScript chat gateways and a dashboard.
- Stars
- 112
- Forks
- 0
- Open issues
- 0
- Last commit
- 3 days ago
What is it?
Joy is a personal assistant that runs on the user's own machine. Its state store, agent loop, memory and tools are implemented in Rust, while TypeScript provides the browser dashboard and chat gateways for Telegram, Discord, WeChat and Lark. A thin Python SDK wraps the same JSON-RPC interface exposed by the `joy app-server` process, so every client talks to one place that owns the SQLite state.
Memory combines semantic facts searchable with FTS5, dated episodes, and procedural Skills, with a retrieval gate that consults memory only when it seems relevant. The assistant ships with about eleven built-in tools covering notes, calendar events, web search, file reading, URL fetching and shell commands, and it can connect to MCP servers. Shell execution is off by default and requires an explicit environment flag. Each turn records a trace line and token usage.
The project includes a deterministic evaluation suite and an LLM judge for answer quality, and it supports a range of LLM providers including local Ollama models that need no API key.
Key features
- 01Chat through a terminal REPL, a browser dashboard, or Telegram, Discord, WeChat and Lark gateways.
- 02Three memory types: searchable facts, dated episodes, and reusable Skills.
- 03Built-in tools for notes, calendar, web search, file reading and URL fetching, plus MCP server support.
- 04Shell commands are sandboxed, allowlisted, and disabled unless explicitly enabled.
- 05Clients communicate with the core over JSON-RPC, with SQLite state owned by a single process.
Use cases
- Running a private assistant that keeps notes, memory and calendar data on your own machine.
- Chatting with an agent from Telegram or Discord while the state stays local.
- Experimenting with a Rust agent core that exposes a JSON-RPC API to other clients.
- Using a local Ollama model as the assistant's LLM without sending data to a cloud provider.
Quick start
- 1
Build the Rust project from the joy-rs directory
cd joy-rs && cargo build - 2
Start the terminal REPL with a provider and API key
JOY_PROVIDER=deepseek DEEPSEEK_API_KEY=… ./target/debug/joy - 3
Or start the dashboard at http://localhost:7777
JOY_PROVIDER=deepseek DEEPSEEK_API_KEY=… ./target/debug/joy dashboard
Things to know
- Requires building from source with Cargo, since no package is published to PyPI or npm yet.
- Needs an LLM provider API key, or a local Ollama setup, before it can answer.
- The Discord, WeChat, and Lark gateways have never been connected to the real platforms.
In collections
Topics
FAQ
- What is joyczl-agent?
- A local-first personal assistant with a Rust core for the agent loop, memory and tools, plus TypeScript chat gateways and a dashboard. Joy is a personal assistant that runs on the user's own machine. Its state store, agent loop, memory and tools are implemented in Rust, while TypeScript provides the browser dashboard and chat gateways for Telegram, Discord, WeChat and Lark. A thin Python SDK wraps the same JSON-RPC interface exposed by the `joy app-server` process, so every client talks to one place that owns the SQLite state.
- Is joyczl-agent free to use? What license does it have?
- joyczl-agent is open source under the MIT license. Check the license terms before using it in commercial products.
- Is joyczl-agent still maintained?
- Actively maintained. The last commit to joyczl-agent was on Nov 4, 2026.
- What can I use joyczl-agent for?
- Running a private assistant that keeps notes, memory and calendar data on your own machine. Chatting with an agent from Telegram or Discord while the state stays local. Experimenting with a Rust agent core that exposes a JSON-RPC API to other clients. Using a local Ollama model as the assistant's LLM without sending data to a cloud provider.
- How do I install joyczl-agent?
- Build the Rust project from the joy-rs directory: cd joy-rs && cargo build Start the terminal REPL with a provider and API key: JOY_PROVIDER=deepseek DEEPSEEK_API_KEY=… ./target/debug/joy Or start the dashboard at http://localhost:7777: JOY_PROVIDER=deepseek DEEPSEEK_API_KEY=… ./target/debug/joy dashboard
- Where can I get joyczl-agent?
- The source code and installation instructions are on GitHub: https://github.com/ChrisVip001/joyczl-agent
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
Open-source AI personal assistant for planning, writing and personal knowledge, runnable on a Mac or self-hosted with your own model keys.
A lightweight, self-hosted personal agent app with a TUI and GUI, local workspace tools, human approval, persistent sessions, memory, and Skill/Plugin/MCP extensions.
Self-hosted personal AI agent with a built-in WebUI, memory, tools, MCP support, sub-agents and scheduled automations, using local or cloud LLMs.
Self-hosted, local-first personal AI agent with layered memory, tool permissions, workflows and IM channel integration.
A Rust framework for building composable AI agent runtimes that combine models, tools, memory and other agents.