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-cli
mimon — demo session
engine 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.█
fast · glm-4.6▤ 1 attached · 127.0.0.1:7800

What ships in the box

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

rendered in your browser right now — the same ▀ half-block technique
same binary, two brands — the boot screen repaints from one line

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 managercurl -fsSL https://raw.githubusercontent.com/tawachdev/cli-agent/main/install.sh | sh
  • one shot, no installnpx mimon-cli "summarize this folder"
  • from sourcebun install && bun run cli
enter send/ command menutab cycle model tieresc stop a turnctrl+c quit