single static binary · ~2k-token prompt · built-in risk guardrail · local-first

✦ ipsupport-code

A lightweight, self-learning coding agent that drives your own model — any OpenAI-compatible server, local or cloud, in a single static binary, with a built-in risk model watching every tool call.

It runs a reason → act → observe loop over a handful of fat tools, recovers from errors using lessons it learned on past runs, and gets better over time. Local-first — LLMTray on a Mac (ours — native mlx-lm in the menu bar), Ollama, vLLM, or anything else serving /v1/chat/completions — and the same loop runs the cloud providers (OpenAI, Anthropic, Grok, Groq, OpenRouter, Z.ai) when you want one. It can also delegate a task to a sub-agent on a different model. Your machine, your keys, under a permission policy you control.

ci release license go
$ curl -fsSL https://raw.githubusercontent.com/ipsupport-llc/ipsupport-code/main/scripts/install.sh | sh
PS> iex (irm https://ipsupport-llc.github.io/ipsupport-code/install.ps1)

macOS · Linux · Windows — one binary, no Python, no runtime, no dependencies · verifies SHA-256

ipsupport-code at work: a diff of a Go file on the left, the task prompt in the middle, and the report the agent wrote on the right — analyze, fix, test, report.
ipsupport-code
❯ ipsupport-code


❯ add a /health endpoint and run the tests
  ⚙ file edit  server.go   +6 −0
  ⚙ run  go test ./...
  → exit 0   ok  ./...  (0.4s)
  ✦ noted  tests run with: go test ./...
  Added GET /health returning 200 "ok"; all tests pass.

❯ review that change across grok and claude, then merge
  ⇉ spawned grok    · grok-4.3 · ~/myproject
  ⇉ spawned claude  · claude-sonnet · ~/myproject
  ✓ grok finished   ✓ claude finished
  → both: correct. grok wants a 503-case test; claude flags a missing Content-Type.
  Reviewer agrees it's solid; I'll add the 503 test.
  NEXT: add the 503-case test

qwen2.5-7b-instruct · ~/myproject · ctx 4.0k/8k · ↑1.6k · ready

# what it does

Built for micro-tasks on your own machine. It won't match a frontier model — it's a private, controllable agent that compounds what it learns.

▪Single static binary

One executable, CGO_ENABLED=0 — no Python, no Node, no runtime, no virtualenv to rot. Download, run, done. It updates itself in place.

✦Self-learning

After each task it reflects and writes durable lessons and project facts to disk, then folds them into the next run. Tool errors are met with fixes it found before.

⚙Fat tools

One tool per domain — file · run · git · web · calc — so the catalog stays tiny and small models route well. Native tool-calls only.

∙Your model, your machine

LLMTray on a Mac — our menu-bar app running mlx-lm natively on Apple Silicon — or any local server speaking OpenAI's API: Ollama, vLLM, and the rest. Nothing leaves your box unless you point it at a cloud provider.

⇄Multi-provider

One /ai key away from OpenAI, Anthropic, Grok, Groq, OpenRouter, or Z.ai — switch models live with /model (search its 300+).

⇉Sub-agents

Delegate a task to a sub-agent on another model — run locally, then have a frontier model review the diff, or compare a review across 2–3 models. Paid spawns ask first.

⌥Sessions & usage

Per-name sessions with restore-on-startup — -session <name> gives a thread its own log and goal, so several can run side by side — plus a token ledger with day/week/month rollups and estimated $ cost by model.

▮Permission policy

Allow/deny globs, a workspace jail, and a non-overridable safety floor. A plan / auto toggle and non-stealing approval prompts. Opt-in OS sandbox for shell commands — Seatbelt on macOS, Landlock on Linux.

◎Goals with a judge

/goal sets a multi-turn objective. When the agent thinks it's done, a separate judge decides — and re-feeds the gap until the goal is actually met.

↪Steer it live

/steer folds a note into a running task without stopping it; /btw asks a quick side question while the task keeps going.

⚠Built-in risk guardrail

A small risk model ships inside the binary — pure Go, 768 KB of weights, ~28µs a call, nothing sent anywhere. It scores every tool call, and one it flags stops for you even when your policy would allow it: y, n, or a for the session. It learns from your answers, per project. Off in /config or with -skip-risk-check.

◇A minimal prompt

The built-in system prompt is ~2.7 KB and the whole tool catalog ~5 KB — about 2,000 tokens before your task, so a small local model keeps its context for the work. Skills, sub-agents, MCP and history each add a tool only when there is something for it.

◌Read-only runs

-read-only answers a review or a question with nothing allowed to change: no file writes, no git changes, and commands run in the OS sandbox with the workspace read-only and no network.

◆Skills

Downloadable, toggleable instruction packs — load extra know-how only when the topic fits, so the prompt stays lean.

⌘Interactive /config & /usage

A settings panel you navigate with the arrow keys, plus a local token ledger broken down by day and provider/model.

▷A real TUI

Live-streamed tool calls, markdown answers, syntax-highlighted diffs, multi-line paste, and a status bar with model · context · tokens.

# quickstart

Three steps from nothing to a running agent in your project.

  1. Install — run the one-liner above (or grab an archive from releases). It lands in ~/.local/bin.
  2. Point it at a model — start any local server that speaks the OpenAI API. On a Mac we recommend LLMTray: a menu-bar app that runs mlx-lm natively on Apple Silicon — download the DMG and pick a model; first-run setup finds it on localhost:8765 by itself. Elsewhere, Ollama, vLLM or any other OpenAI-compatible server does the same job. Prefer the cloud? ipsupport-code then /ai key openrouter sk-… and /ai openrouter.
  3. Run it — cd your-project && ipsupport-code, then type a task. It edits files, runs commands, and reports real output — under your permission policy.

# commands & keys

Every feature is a slash-command or a keystroke — /help shows this inside the agent too.

/Commands

/help · /status · /usage · /budget · /config
/ai & /ai key · /model · /reasoning · /agents · /jobs
/goal · /diff · /rewind · /history · /knowledge
/steer · /btw · /snip · /risk · /login · /shell
/skills · /permissions · /sessions · /cd · /mcp
/new · /clear · /compact · /plan·/auto · /reflect
/loop · /update · /offline · /rename · /color

⌨Keys

Enter send · alt+enter newline
Tab complete a /command or @file path
ctrl+r reverse-search prompt history
shift+tab plan ⇄ auto mode
ctrl+u clear input · ctrl+l clear screen
↑ answer approval / edit queued · esc cancel · ctrl+c quit

⇉Sub-agents

Define profiles in /config → Sub-agents (provider → model → name). Then ask, e.g. "review internal/tool across grok and claude, then merge." They run in parallel, each jailed to its own directory. Manage with /agents add|add-tool|rm|exec — add-tool plugs in local CLI agents (codex, claude, muse, aider…); relax the per-spawn prompt with /permissions agents on. Or fire one in the background and keep working — its result folds into the next turn; watch them with /jobs.

# works with

OpenAI-compatible at the core, so the agent is model-agnostic — local first, cloud when you want it. Anything serving /v1/chat/completions works, including keyless local servers.

Local

LLMTray — macOS, Apple Silicon LM Studio Ollama vLLM any OpenAI-compatible server

Cloud

OpenAI Anthropic Grok (xAI) Groq OpenRouter Z.ai (GLM)

External agents

codex / claude / muse / aider (as sub-agents)