Coding Agent · CLI

Nevermore

An interactive coding agent in pure C — chat with AI models from the terminal, with an agent loop that reads, edits, searches, and runs code.

#ai-agent #c #llm #ollama #openrouter #searxng #terminal #tui #opencode

What is Nevermore?

Nevermore is a terminal-native coding agent written entirely in C. It talks to six LLM providers — Charm Hyper, Ollama (local daemon and cloud), OpenRouter, and OpenCode Go + Zen — over a hand-rolled HTTP/1.1 + SSE client with OS-native TLS. No libcurl, ever: Schannel on Windows, Secure Transport on macOS, and mbedTLS/OpenSSL on Linux.

Its TUI is modeled on the Ditty REPL and built on boba. As a first-class portty citizen it speaks the kitty keyboard protocol and attaches images over sixel, iTerm2, or kitty graphics.

Features

  • Six providers over a hand-rolled HTTP/1.1 + SSE stack, with OS-native TLS — no libcurl
  • Agent tool loop: read, write, edit, list, and search files; run commands; web search via local SearXNG; load Agent Skills
  • Long-running jobs: exec_command, write_stdin, and kill_job for dev servers, REPLs, and ssh — watch them with /ps, stop them with /kill
  • @ file mentions: a picker over the working directory completes paths as you type, and mentions that resolve are underlined
  • Live provider balance meters in the status row (5h, weekly, and monthly windows), plus context window, output tokens, and prompt-cache hit rate
  • OpenRouter routing controls: /routing, /tier, /maxprice, and /preset cheap|fast|balanced, with a note on which upstream served each round
  • Prompt-cache aware: a frozen system prompt, cache hints for OpenRouter’s Anthropic models, and cache reads reported where the provider supplies them
  • Vision: attach images with /image or -i; image-output models render in the terminal and save with /image save
  • A searchable /model picker (cap:vision, cap:tools, ctx:>200k), and /config showing every setting and where it came from
  • Reasoning traces shown as they stream, with controllable echo of reasoning data back to the provider
  • boba TUI with streaming responses, kitty keys, and sixel/iTerm2/kitty image attach; a plain-SGR spinner — a pulsing dot while the model streams, a rotating star while a tool runs
  • One-shot mode: nevermore ask "…", with -p and -m for a single run
  • Transcripts: /session save writes the conversation as markdown
  • Cross-platform: portable ZIPs for macOS (Apple Silicon) and Windows (x86_64), source build on GNU/Linux

Build & install

macOS (Apple Silicon) and Windows (x86_64): download the portable ZIP from the releases page, extract it anywhere, and run nevermore. There is no installer, and no MSYS2 or Homebrew.

GNU/Linux: build from the source tarball or a git checkout. Nevermore depends on boba via pkg-config.

git clone https://github.com/chestso/nevermore
cd nevermore
./autogen.sh
mkdir -p build && cd build
PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig:$HOME/.local/lib64/pkgconfig \
  ../configure --prefix=$HOME/.local
make -j"$(nproc)"
make install

Providers

Six provider entries, all speaking the OpenAI-compatible chat API. The colon keeps a service and its endpoint tier distinct:

  • Charm Hyper — gateway
  • Ollama — ollama:local (the default, no key needed) and ollama:cloud
  • OpenRouter — with routing, tier, and price controls
  • OpenCode — opencode:go and opencode:zen

Keys come from the environment or ~/.authinfo. Settings live in ~/.config/nevermore/config, with changes made in the chat kept in a separate runtime file.