An agentic framework built on pydantic-ai with Model Context Protocol (MCP) server support, a generic tool system, three-tier memory, and local-first workspaces.
π Full documentation: miminions.ai
- Minion agent β an async, LLM-powered agent on
pydantic-ai, defaulting to OpenRouter (with OpenAI, Anthropic, Gemini, and an offline test model also selectable). - Generic tool system β turn a typed Python function into an agent-callable tool with an auto-derived JSON schema; no boilerplate.
- MCP integration β connect to MCP servers and load their tools alongside your own functions.
- Three-tier memory β a chronological session log (
HISTORY.md), stable workspace facts (MEMORY.md), and a cross-workspace SQLite vector store, with an LLM distiller that promotes insights across tiers. - Vector memory β
SQLiteMemorywith semantic, keyword, full-text, metadata, regex, hybrid, and date-range search, embeddings via fastembed (ONNX β no PyTorch/CUDA). - Workspaces β a node/rule graph plus an on-disk layout (
prompt/,memory/,skills/,sessions/,data/) that drives each agent's context. - CLI β manage agents, tasks, knowledge, workspaces, and an interactive chat
from the
miminionscommand; state persists under~/.miminions/. - Local data manager β content-addressable (SHA-256) storage with deduplication, a master index, and an append-only transaction log.
- Async-first β full asynchronous operation throughout.
pip install miminionsOr with uv:
uv add miminionsRequires Python 3.12+. SQLite vector memory is an optional extra (it adds
fastembed, sqlite-vec, and pysqlite3):
pip install miminions[sqlite] # or miminions[all]The agent uses OpenRouter by default β set your key before running:
export OPENROUTER_API_KEY="sk-or-..."import asyncio
from miminions.agent import create_minion
async def main():
agent = create_minion("MyAgent")
def add(a: int, b: int) -> int:
return a + b
agent.register_tool("add", "Add two numbers", add)
# The model decides when to call the tool.
reply = await agent.run("What is 3 + 7?")
print(reply)
asyncio.run(main())Want a different model? Pass a provider (or a pydantic-ai model directly):
agent = create_minion("MyAgent", provider="anthropic") # or "openai", "gemini"
agent = create_minion("MyAgent", provider="test") # offline, no API keyfrom miminions.memory.sqlite import SQLiteMemory
from miminions.agent import create_minion
agent = create_minion("Assistant", memory=SQLiteMemory("agent.db"))
# store_knowledge / recall_knowledge require an attached memory backend.
agent.store_knowledge("Python is a high-level language", metadata={"topic": "python"})
print(agent.recall_knowledge("What language is Python?"))With memory attached, the agent also gains a built-in ingest_document tool that
chunks and stores .pdf/.txt/.md files. Requires the [sqlite] extra.
from mcp import StdioServerParameters
from miminions.agent import create_minion
agent = create_minion("MyAgent")
await agent.connect_mcp_server(
"math", StdioServerParameters(command="python", args=["math_server.py"])
)
await agent.load_tools_from_mcp_server("math")
# ...
await agent.cleanup()After install, the miminions command is available (a default workspace and
agent are created under ~/.miminions/ on first run):
miminions --help
python -m miminions --help # equivalentCommand groups:
| Group | What it does |
|---|---|
chat |
Interactive chat with a workspace agent; distills memory on exit |
prompt |
One-shot prompt to a workspace agent |
agent |
Create/manage agents and run/inspect their tools |
task |
Create and track tasks |
knowledge |
A versioned knowledge base |
workspace |
Manage workspaces, their nodes, rules, and on-disk files |
execution |
Register tools and record tool runs in execution sessions |
auth |
Local sign-in, public-access mode, and config |
# Start an interactive chat (resume with --session <id>)
miminions chat start
# One-shot prompt
miminions prompt ask "Summarize today's standup notes"
# Agents
miminions agent add --name "Researcher" --description "Finds and summarizes sources"
miminions agent list
# Workspaces
miminions workspace add --name "Demo" --sample --init-files
miminions workspace listThe
workflowcommand group exists in the codebase but is not yet enabled. The--asyncflag onmiminions agent runis currently a placeholder.
See the CLI reference for every subcommand.
| Topic | |
|---|---|
| Getting Started | Install, first agent, and the CLI |
| Agent | The Minion API |
| Memory | Three-tier and vector memory |
| Context Builder | System-prompt assembly |
| Tools | @tool, GenericTool, MCP |
| Workspaces | Nodes, rules, on-disk layout |
| Tasks & Workflows | TaskRuntime and tracing |
| Data Management | LocalDataManager |
| Gateway Runtime | Channels, bus, cron |
For a map of the source tree and module status, see STRUCTURE.md.
Runnable examples live in examples/.
git clone https://github.com/MiMinions-ai/MiMinions.git
cd MiMinions
pip install -e ".[dev]"Run the tests:
pytest tests/ # everything
pytest tests/unit/ # unit
pytest tests/integration/ # integration
pytest tests/e2e/ # end-to-endpyproject.toml is the single source of truth for packaging. Build and publish
with uv:
uv build
uv publish
# TestPyPI:
uv publish --publish-url https://test.pypi.org/legacy/Build a standalone CLI binary:
bash deploy/build_cli.shContributions are welcome β see CONTRIBUTING.md and the
Code of Conduct. Feature work targets the development
branch.
MIT β see LICENSE.