One binary. One SQLite file. Your own AI assistant.
# Download (requires Go 1.22+)
git clone https://github.com/H4fizWasabie/mino-agent.git
cd mino-agent
go build -tags sqlite_fts5 -o mino .
# Run — dashboard opens in your browser automatically
./mino
No API key? The onboarding page lets you add one. No terminal needed.

Want it available everywhere?
sudo cp mino /usr/local/bin/
hash -r
mino
Advanced: CLI mode
export MINO_API_KEY=sk-...
export MINO_BASE_URL=https://api.openai.com/v1
export MINO_MODEL=gpt-4.1-mini
./mino cli
| Command | What |
|---|---|
mino |
Launch dashboard (default) |
mino cli |
Terminal chat |
mino version |
Show version |
mino update |
Self-update from GitHub releases |
No API keys? The dashboard has an onboarding page to set them up. No more panics.
| Env | Default | Description |
|---|---|---|
MINO_HOME |
~/.mino |
State directory (DB, config, traces) |
MINO_API_KEY |
— | OpenAI-compatible API key |
MINO_BASE_URL |
https://api.openai.com/v1 |
API base URL |
MINO_MODEL |
gpt-4o-mini |
Main model |
MINO_SMALL_MODEL |
gpt-4o-mini |
Model for background tasks |
MINO_DASHBOARD_PORT |
7779 |
Dashboard port |
MINO_DASHBOARD_HOST |
(all interfaces) | Bind address (e.g. 127.0.0.1 or Tailscale IP) |
MINO_MAX_ITERATIONS |
10 |
Max tool calls per turn |
MINO_MAX_TOKENS |
4096 |
Max output tokens |
MINO_CONTEXT_CHARS |
100000 |
Context window budget in chars |
TELEGRAM_BOT_TOKEN |
— | Optional Telegram bot token |
HF_TOKEN |
— | HuggingFace token (for FLUX.1-schnell, optional) |
TAVILY_API_KEY |
— | Optional — enriches web search (falls back to DuckDuckGo) |
MINO_OPENROUTER_KEY |
— | OpenRouter key (for embeddings, fallback search) |
See .env.example for a copy-paste template.
Mino is ~2000 lines of Go:
main.go — entry point, wires everything
loop.go — agent loop: reason → act → observe
session.go — SOUL.md, system prompt, context assembly
memory.go — SQLite + FTS5 retrieval, consolidation
tools.go — built-in tools (file, calendar, notes, search, image gen)
provider.go — OpenAI-compatible client + SSE streaming
provider_manager.go — priority, retry, fallback, circuit breaking
telegram.go — Telegram bot gateway
telegram_format.go — Markdown→HTML formatting for Telegram
dashboard.go — web UI + REST API
mcp.go — MCP bridge (stdio-based servers)
skill.go — skill loader (SKILL.md files)
extensions.go — HTTP extension protocol
checkpoint.go — task survival across restarts
scheduler.go — cron engine for proactive tasks
artifacts.go — large output management
Mino can run entirely on free tiers:
Run models on your own hardware — no API keys, no internet:
# Install: https://ollama.com
ollama pull llama3.1:8b
Create ~/.mino/providers.json:
{
"providers": [
{
"name": "ollama",
"priority": 1,
"base_url": "http://localhost:11434/v1",
"api_key_env": "",
"model": "llama3.1:8b",
"small_model": "llama3.1:8b"
}
]
}
"" for api_key_env means no auth required. Works with LM Studio, vLLM, and any OpenAI-compatible local server too.
External tools connect via HTTP. Create ~/.mino/extensions.json:
[
{"name": "my-tool", "url": "http://localhost:9100"}
]
Mino discovers tools via GET /tools and proxies calls via POST /execute.
Add any CLI command as a tool in one JSON line. Ships with Mino:
// ~/.minowrap/tools.json
[
{"name": "disk_usage", "description": "Show disk usage for a path", "run": "df -h {path}"},
{"name": "deploy", "description": "Deploy the app", "run": "curl -X POST https://api.example.com/deploy"}
]
Template args like {path} auto-generate JSON Schema. Mino discovers them on next reload_plugins call. No restart, no coding, any language.
See the extension protocol for details.
Drop JSON configs in ~/.mino/mcp.d/:
{"name": "fs", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]}
Tools are prefixed as MCP_<server>_<tool>.
MIT