螺蛳壳里做道场 — a tiny stage in a snail's shell.
A local-LLM CLI toolkit that runs on Ollama. Four pillars:
- Zero cloud cost — everything runs on your own machine.
- Private — notes and images never leave your computer.
- Fast — no network round-trips to a cloud API.
- Good enough for simple tasks — small local models, used where they shine.
The first tool is quick-note: capture notes, todos, reminders, and calendar
entries from natural-language text or images. Stored locally in SQLite, parsed
by a local multimodal model (default qwen3.5:9b).
- macOS
- Node.js
- Ollama installed and running, with the default model pulled:
brew install ollama
ollama serve # keep this running
ollama pull qwen3.5:9bshelldojo doctor checks that Ollama is reachable and the configured model is
present.
This is a TypeScript project. There is no published npm package yet, so run it from source:
npm install
npm run build
node dist/surfaces/cli.js doctorDuring development you can skip the build step and run via tsx:
npm run dev -- doctorThe examples below use shelldojo <cmd> as shorthand for
node dist/surfaces/cli.js <cmd>.
# Add a plain note (no intent classification)
shelldojo note add "买牛奶"
# Smart capture: the model classifies intent and routes to
# note / todo / reminder / calendar
shelldojo note capture "明天下午3点和张伟开会"
# Capture from an image — the multimodal model reads it
shelldojo note capture ~/Desktop/shot.png
# With no argument, capture reads from the clipboard (pbpaste)
shelldojo note capture
# List recent notes, or search with a query
shelldojo note list
shelldojo note list 会议
# Complete or remove notes by their list index
shelldojo note done 2
shelldojo note rm 3
# Supplement an existing note by list index or id
shelldojo note supplement 1 "改到4点"done, rm, and supplement operate on the index shown by the most recent
note list (or the list capture printed for a query). Run note list first.
shelldojo config get
shelldojo config set model qwen3.5:9b
shelldojo config set timezone Asia/ShanghaiConfig keys: model, lang (zh/en), timezone, ollamaBaseUrl.
shelldojo doctorAdd the global --json flag to get machine-readable output:
shelldojo --json note list
shelldojo --json doctorCapture latency depends on the model. Reasoning models like qwen3.5:9b are
more accurate but slower (tens of seconds per capture). A smaller model trades
some quality for speed:
shelldojo config set model qwen3.5:4b
# or
shelldojo config set model gemma4:e4bRemember to ollama pull whichever model you configure.
Everything is stored under ~/.shelldojo/:
config.json— your configurationshelldojo.db— the SQLite note store
Override the location with the SHELLDOJO_HOME environment variable.