The terminal is the whole product.
Mimon is an AI coding agent that lives in your terminal. Bring any model and your own keys — no accounts, no dashboard, no telemetry. Drop an image and watch it render as real pixels.
npm i -g mimon-cliengine ready · 127.0.0.1:7800 · tier fast → glm-4.6 ~ ❯ fix the failing test in src/tui● reading src/tui/chat.ts · 444 lines⚠ edit src/tui/chat.ts - if (chunks.length) return null + if (!chunks.length) return null allow [a] · edit [e] · deny [n]✓ patched · 1 hunk● exec bun test src/tui✓ 42 pass · 0 fail · 312 msfixed: the guard was inverted — valid chunks were rejected as empty. ~ ❯ what does ~/shots/error.png show?▤ error.png · 1280×800 · 214 KB · attachedFocus dies with the dialog: esc closes it but the caret never returns to the input, so the next keystrokes go nowhere until you click back.█
What ships in the box
Terminal-native
A hand-rolled TUI: pixel-font boot screen, boxed prompt, model picker, permission cards. Repaints cleanly at any terminal size.
Any model, your keys
anthropic, openai, deepseek, glm, gemini — or any OpenAI-compatible endpoint. Keys live in the macOS Keychain, never logged, never returned.
Images in the terminal
Drop a path and see real pixels on iTerm2, WezTerm, kitty and Ghostty — a clean info panel elsewhere. The model sees it either way.
Make it yours
Rename the agent and repaint it — one color or one per letter — from a 256-color grid, presets, or custom hex. Saved for every launch.
Ask-first tools
Read-only tools run on their own. Writes and execs show a visible diff and wait for your key before anything lands.
Local engine
A loopback-only server on 127.0.0.1:7800 drives the agent loop, tools and audit log. The CLI refuses anything but localhost.
How it works
your terminal
keystrokes in
ANSI frames out
repaints on resize
mimon engine
127.0.0.1:7800
agent loop · tools · audit
hard step cap per turn
model provider
anthropic · openai
deepseek · glm · gemini
any OpenAI-compatible URL
The render loop
The TUI writes ANSI escape codes straight to stdout. It measures every glyph — wide CJK characters and zero-width marks included — so boxes, prompts and diffs align at any width, and the whole screen rebuilds cleanly when the terminal resizes. The boot screen spells the agent's name in a hand-drawn pixel font, one color per letter if you want.
The turn loop
Each turn the engine rebuilds context from the session store, compacts history under the model's budget, and calls your provider with your key. Tool calls pass a permission gate — read-only runs free, writes and execs wait on a visible diff — and land in an append-only audit log. A hard step cap bounds every turn, so a confused run stops instead of spiraling.
Images, as real pixels
Drop a path into the prompt and mimon decodes it in pure TypeScript — PNG chunks, zlib inflate, Paeth unfiltering — then draws it with ▀half-block pairs in 24-bit color. iTerm2, WezTerm, kitty and Ghostty get inline pixels; anything else gets a clean info panel, and the model gets the image either way.
png · jpeg · gif · webp · bmp
4 images per message · 6 MB each · magic-byte validated
▤ demo.png
480×320 · 15.2 KB · ~/shots/demo.png
inline pixels need iTerm2, WezTerm, kitty or Ghostty — the image still reaches the model
Make it yours
The name on the boot screen and its colors are one environment variable away — or permanent through /brand inside the TUI: one color for the whole name, or a different color per letter, picked from presets, the full 256-color grid, or any custom hex. Your swatches are remembered for next time.
AGENT_NAME=ANIR AGENT_COLORS=purple,gold
/brand → 256-color grid · presets · custom hex
Ask first, audit always
- Writes & execs ask first
- Read-only tools run on their own. Anything that lands on disk or spawns a process shows a visible diff and waits for your key.
- Loopback only
- The engine binds 127.0.0.1:7800 and refuses to serve anything else; the CLI refuses non-loopback engines.
- Append-only audit
- Every tool call and every permission decision lands in the audit log — and the log never rewinds.
- Keys stay home
- Provider keys live in the macOS Keychain (or a 0600 file elsewhere): never logged, never audited, never returned by any endpoint.
- One sandbox
- File tools may only touch AGENT_WORKSPACE_ROOT — the engine's working directory by default.
Put it in your terminal.
One command, nothing else: the package carries a self-contained binary for macOS and Linux, arm64 and x64. First launch walks you through the setup wizard — pick a provider, paste a key, done.
npm i -g mimon-cli- curl, no package manager
curl -fsSL https://raw.githubusercontent.com/tawachdev/cli-agent/main/install.sh | sh - one shot, no install
npx mimon-cli "summarize this folder" - from source
bun install && bun run cli