Let me say it plainly: qmax-code is not based on Claude Code. It's not a fork. It's not a wrapper. It shares zero source code with Anthropic's product. qmax-code was built from scratch in Go, using the Charm framework for the terminal UI, and has been in production since early 2026 — before the Claude Code source leak made headlines.
This is the story of two tools, what motivated building them, and the engineering decisions behind each.
Two Tools, One Mission
QualityMax has two developer-facing tools, and they solve different problems:
| qmax-code | qmax (CLI agent) | |
|---|---|---|
| What it is | Interactive AI testing agent (TUI) | Traditional CLI for local test execution |
| Interface | Natural language chat with Max the cat | Commands + flags (qmax crawl start) |
| Framework | Charm (bubbletea + lipgloss + glamour) | Standard Go stdlib |
| AI model | Claude (sonnet/opus/haiku, user choice) | Server-side (QualityMax API) |
| Session persistence | Full conversation history, resumable | Config only (~/.qamax/) |
| Key store | OS Keychain (macOS/Linux) | Config file |
| Best for | Exploration, ad-hoc testing, conversation | CI/CD, scripted workflows, headless |
| Lines of Go | 7,951 | 5,114 |
Think of it this way: qmax-code is Claude Code, but for testing. And qmax is gh, but for testing. Different interfaces, same platform underneath.
The Motivation
QualityMax started as a web platform. Import a repo, click buttons, see results. It works — but developers kept telling us the same thing:
"I don't want to leave my terminal to run tests."
We built qmax (the CLI) first. Traditional commands: qmax crawl start --url, qmax test run --project, qmax sast scan. It solved the context-switching problem for scripted workflows.
But then something shifted. Claude Code launched. Cursor added terminal agents. Developers started talking to their tools instead of typing flags.
I realized we needed both: the structured CLI for CI pipelines, and an interactive AI agent for the messy, exploratory work that developers actually do. "Hey, test the checkout flow on an iPhone and tell me what breaks" isn't a command — it's a conversation.
So I built qmax-code.
Why Go + Charm
Go: the universal binary
Both tools are Go. The reasons are pragmatic:
- Single binary, zero dependencies. One
curl | shand you're running. No Node.js, no Python, no Docker. 15MB, statically compiled. - Millisecond startup. No interpreter warm-up. When you type a command, it executes before a Node.js process finishes booting.
- Cross-compilation is trivial.
GOOS=linux GOARCH=arm64 go build. Five platforms, one Makefile target. - Error handling is explicit. Go doesn't crash on unexpected responses. Every network call has timeouts, every JSON parse has validation. Zero crash reports since launch.
Charm: the terminal UI framework
qmax-code's TUI is built on Charm's Go libraries:
- Bubbletea — the Elm-architecture TUI framework. Handles input, rendering, and state management.
- Lipgloss — CSS-like styling for terminal output. Colors, borders, padding, alignment.
- Glamour — Markdown rendering in the terminal. Code blocks get syntax highlighting, tables render properly, links are clickable.
Charm is what makes qmax-code feel like a real application, not a CLI with colored output. Progress bars animate smoothly, code blocks have syntax highlighting, and the layout adapts to terminal width.
Features That Matter
Session persistence
Every conversation is saved to ~/.qmax-code/sessions/. Close your terminal, shut down your laptop, come back tomorrow — your context is still there.
$ qmax-code --list-sessions ID Updated Turns Tokens Project a8f2c1d0 2026-04-03 14:22 12 8,420 #142 b3e7f9a2 2026-04-02 09:15 8 5,100 #89 c1d4e6b8 2026-04-01 17:40 23 14,200 #142 $ qmax-code --resume last
Sessions persist for 7 days. You can resume any of them with --resume <id> or --resume last. The full conversation history, project context, and token usage are preserved.
OS Keychain integration
API keys are stored in your OS keychain — macOS Keychain Access, Linux secret-tool, or fallback to a 0600-permission config file. Never plaintext. Never environment variables that leak into shell history.
$ qmax-code login /\_/\ / ( o.o ) / > ^ < / /| | Let's connect you to QualityMax! Your auth code: QMAX-8J9EXG Opening browser to authorize... Connected as dev@acme.io
Max the cat
Max is the mascot. He has moods: happy, thinking, confused, sad, proud, sleeping, alert. He reacts to what's happening — celebrates when tests pass, looks worried during long-running operations, and offers encouragement when things fail.
You can turn him off with --professional if you're presenting to your VP. But most developers keep him.
Speed and connectivity
qmax-code maintains a persistent connection to the QualityMax API. It doesn't just fire-and-forget — it streams progress bars for test execution, polls for crawl status updates, and shows live results as they arrive.
When the connection drops (laptop sleep, VPN toggle, network change), it reconnects automatically without losing state. The session file acts as a checkpoint — even if the process crashes, --resume last picks up where you left off.
Multi-model support
Choose your AI model per session: auto (haiku for simple tasks, sonnet for complex), sonnet, opus, or haiku. BYOLLM — bring your own Anthropic key.
$ qmax-code --model opus --project-id 142
The 48 MCP Tools
This is what makes qmax-code more than a pretty terminal. The 48 MCP tools expose the entire QualityMax platform to any AI assistant — Claude Code, Cursor, Windsurf, or qmax-code itself.
When you say "scan this repo for security issues," qmax-code doesn't guess. It calls import_repository, then analyze_coverage, then presents the results with Glamour-rendered markdown. The AI orchestrates. The tools execute.
MCP = Model Context Protocol
An open protocol that lets AI assistants call external tools. Instead of the AI hallucinating test results, it calls a real tool that actually runs the test and returns real output. QualityMax has 48 of these tools — the deepest MCP integration in the QA space.
The 21 Skills
Skills are higher-level workflows that chain multiple tools together. They live in .claude/skills/ and work with any AI assistant that supports the skill protocol:
- qa-report — Free QA audit of any URL. Crawl, score across 8 categories, produce a health report. This is our sales tool.
- onboard-qa — Full project setup: create project, import repo, crawl, generate tests, set up CI. One command.
- test-doctor — Fix failing tests: read error, crawl changed page, update selectors, re-run to verify.
- k6-load-testing — Generate and run performance tests from natural language.
- security-scan — Full SAST audit with vulnerability report.
- regression-guard — Pre-deploy regression check against previous runs.
- sprint-qa-plan — Generate test plans from user stories and acceptance criteria.
Not Based on Claude Code
The timing is coincidental. The Claude Code source leaked in late March 2026. qmax-code has been in development since late 2025 and in production since early 2026. Here are the facts:
- qmax-code is 7,951 lines of Go, not TypeScript
- It uses the Charm framework (bubbletea/lipgloss/glamour), not Ink or React
- It connects to QualityMax's REST API and 48 MCP tools, not the Anthropic API directly
- It's domain-specific (testing and QA), not general-purpose coding
- It has OS Keychain integration, session persistence, and a cat mascot
Claude Code writes code. qmax-code verifies that code is safe to ship.
In fact, they work together. Install both, connect QualityMax's 48 MCP tools to Claude Code, and you have the best of both worlds: Claude Code generates your features, qmax-code tests them.
What's Next
- Playwright Test Agents integration — Microsoft's test generation feeding into our quality pipeline
- Offline mode — Run tests locally without cloud connectivity, sync when back online
- GitHub Marketplace — One-click install for any repo
- LLM evaluation testing — Hallucination detection and RAG quality scoring
The terminal is where developers live. We built qmax-code to meet them there — with real tools, not just a prompt wrapper.
Try qmax-code
One command. Zero config. 15MB. Max the cat will take it from here.
curl -sL https://qualitymax.io/static/install-qmax-code.txt | bash
Learn more →
