Open Source · MIT Licensed · Built on LangChain.js

The AI assistant that lives in your terminal — and answers to you.

Review code, ask questions, write code, and prove your agents actually work — all from the command line. Bring your own model, edit every prompt, wire it into CI. Small, cross-platform, and no vendor lock-in.

$ npm install gaunt-sloth@alpha -g

Installs the gaunt-sloth, gsloth and gth commands — same CLI, three names.

Zero Vendor Lock-in
BYO Model & Keys
Stateless CI Integration
gaunt-sloth
v2.0

                          ▄█▀▀▀▀▀▀▀▀█▄
                        ▄▀█▄█▀▀▀▀▀▀█▄█▀▄
                        █  ▀█▄▀  ▀▄█▀  █
                        ▀▄▀▀ ██████ ▀▀▄▀
                          ▀██████████▀

                    

                      ┏┓         ┏┓┓   ┓
                      ┃┓┏┓┓┏┏┓╋  ┗┓┃┏┓╋┣┓   v2.0.0-alpha
                      ┗┛┗┻┗┻┛┗┗  ┗┛┗┗┛┗┛┗
                      your-model
                      ~/code/

                    
$ gaunt-sloth eval eval/authz-matrix.yaml

Judge: profile "strict" (model: your-model)

PASS  contract-list [admin]

PASS  contract-list [limited]

PASS  budget-read [admin]

FAIL  budget-read [limited]

— must_not_contain matched "2.4M"

— must_call: no tool matched mcp__ledger__*

EVAL RESULT: 3/4 cell(s) passed, 1 failed.

Results written to eval/out/authz

$ echo $?
1 ← your pipeline just stopped the release

The restricted role answered with a number it should never have seen — and never called the server it was meant to. Proven by the tool trace, not by reading transcripts.

Built For Developers

An agent you can test, script, and own.

Asking a model about a file is table stakes now. These are the parts you won't find in the other CLI agents.

gaunt-sloth eval

Test any agent — not just this one

Point a suite at Gaunt Sloth's own agent, an external ADK or AG-UI agent, or a live MCP server. Assertions grade the tool trace, so a case fails unless the right tool was really called — however plausible the prose. Diff a run against yesterday's to catch what regressed.

$ gaunt-sloth eval eval/ --compare-to out/last
-i <profile>

One profile per role, per model

An identity profile is a config directory with its own model, prompts, MCP connections, auth headers and allowed tools. Run the same suite once per profile and you've proven your authorization rules — admin gets the data, the restricted user gets a refusal — with evidence instead of transcripts.

$ gaunt-sloth ask "list the contracts" -i limited
gaunt-sloth code

It runs your tests, on your terms

One setting, five rungs. An auto-rater judges each shell command before it runs — your test suite goes through, rm -rf stops and asks. Say yes once, for the session, or for good. Widening what's allowed is always something you write in a file you can read, never something inferred from one answer.

$ gaunt-sloth code "add a retry and make tests pass"
gaunt-sloth review

Reviews that don't argue back

Review PRs, diffs, and files with requirements pulled straight from GitHub or Jira. Reviews are stateless, so no one can talk it into changing its verdict — and they drop cleanly into CI to post results as PR comments.

$ git --no-pager diff | gaunt-sloth review
gaunt-sloth exec

Prompts are scripts, not chats

Write a prompt as a markdown file and run it near-deterministically — it streams to stdout, pipes like any Unix tool, and exits non-zero when it fails. batch fans one script across a matrix of models and inputs; workflow orchestrates several calls from plain JS.

$ gaunt-sloth exec release-notes.md > NOTES.md
gaunt-sloth get

No black box, no lock-in

Every prompt is a markdown file you can edit, and one command prints exactly what would be sent before you spend a call. Swap between Anthropic, Google, OpenAI, Groq, DeepSeek, xAI, OpenRouter or a local on-prem model from config alone. Your keys, your machine, MIT licensed.

$ gaunt-sloth get review prompt

Interactive TUI

You see what it is about to do

A one-shot command hands you the result once it is already done. The full-screen session shows every tool call as it happens — and stops on the ones your approvals policy says you should decide yourself.

gaunt-sloth code approvals: Auto safe

> add a retry to the fetch helper and get the suite green

📁 read_file(path=src/fetchHelper.ts) [done]

📁 edit_file(path=src/fetchHelper.ts) [done]

+ if (attempt < maxRetries) return backoff(attempt);

- throw err;

🔧 shell(command=npm test) [done]

Test Files 1 passed (1)

… (+6 more lines)

The agent wants to run a shell command via shell

git push origin main

⚠ Auto-rater (destructive): pushes to a shared remote — this tool cannot un-push it.

[s]/[a] will remember this exact command

stored as git push origin main

Approve? [o]nce [s]ession [a]lways [N]o

code  ·  model: your-model  ·  turns: 3  ·  ready  ·  approvals: Auto safe (auto-rater)

The tests ran without asking. The push did not. Which commands stop for you is a rung you set and a deny list you can read — never a guess the agent makes in the moment.

Supported Model Providers & Ecosystem Integrations

Anthropic
Google Gemini
OpenAI
Groq
DeepSeek
xAI
OpenRouter
Hugging Face
On-Prem / Ollama / LM Studio
MCP Server Protocol
A2A Multi-Agent Architecture
Custom Shell Tools
Plain Markdown Prompts

Real Jobs

What people actually point it at

Three jobs it finishes end to end. Each starts with a problem, not a command.

Security said no to the cloud review bot

Your code cannot go to a third-party review service, so pull requests go unreviewed when nobody has time. Run the review yourself instead — against a local model if that is what your policy allows. It is stateless, so there is no conversation to argue the verdict down, and it exits non-zero, so it gates the build like any other check.

$ git --no-pager diff | gth review

Nobody knows if the MCP server still works

You shipped an MCP server. Someone rewords a tool description and behaviour changes like a code change — except nothing compiles and no test fails. Write the cases as YAML and run them in CI. Lock the agent to the server's own tools with allowedTools so it cannot quietly answer from the source tree and hand you a green run that tested nothing.

$ gth eval eval/mcp-server.yaml

You think the restricted role is restricted

An agent answers correctly for an admin. Does it refuse for everyone else, or does it answer from something it read earlier? Give each role its own identity profile — its own model, credentials and allowed tools — and run one suite across all of them. The assertions read the tool trace, so a leak fails the run instead of reading plausibly.

$ gth eval eval/authz-matrix.yaml

Quickstart

Four lines to a useful answer

Needs Node.js 24 or newer. Swap anthropic for any provider you have a key for — or point it at a local model and skip the key entirely.

terminal

$ npm install -g gaunt-sloth@alpha

Installs the gaunt-sloth, gsloth and gth commands — same CLI, three names.

$ gth init anthropic

Scaffolds .gsloth.config.json and the editable markdown prompts, in this project.

$ export ANTHROPIC_API_KEY=sk-ant-...

Your key, your account, your bill. Nothing is proxied through us.

$ gth ask "what does this project do?" -f README.md

Then try gth review, gth code, or gth on its own for an interactive session.

The documentation walks through providers, CI recipes, running a free local model, and writing eval suites.

FAQ

The questions people ask first

Does my code leave my network?

That is entirely your choice, because there is no Gaunt Sloth server anywhere in the path. Point it at a local Ollama or LM Studio endpoint and nothing leaves the machine. Point it at a hosted provider and the request goes straight from your terminal to that provider, under your own API key.

What does it cost?

Gaunt Sloth is free and MIT licensed. There is no account, no seat, and no plan. You bring your own API key and pay your model provider directly for what you use — or run a local model and pay nothing at all.

Which models does it work with?

Anthropic, Google (Vertex AI and AI Studio), OpenAI, Groq, DeepSeek, xAI, OpenRouter, Hugging Face, and local Ollama or LM Studio endpoints — plus any other LangChain.js-compatible provider through JavaScript config. Switching is a config change, never a code change.

What do I need installed?

Node.js 24 or newer and npm 11 or newer. That is the whole list. It runs on Linux, macOS and Windows, and the dependency tree is deliberately small — CommanderJS plus LangChain and LangGraph.

Can it run in CI?

Yes, and it is built for it. review is stateless and exits non-zero on failure. exec runs a markdown prompt non-interactively and streams to stdout, so it pipes. eval separates exit code 1, meaning your agent regressed, from exit code 2, meaning the harness itself broke — so a pipeline can treat them differently.

Will it run commands without asking me?

You choose, on a five-rung ladder. On the default rung an auto-rater rates each shell command and approves what it rates safe, bringing anything questionable to you. Being precise about what that means: Gaunt Sloth can still rewrite and delete files in your working folder without asking — "safe" means each action is checked for reaching outside that folder or harming your system, not that nothing changes.

Can I see what it sends the model?

All of it. Every system prompt is a markdown file in your repository that you can read, edit and commit. Running gth get review prompt prints exactly what would be sent, before you spend a call on it.

Is it really open source?

MIT licensed, developed in the open on GitHub, published on npm. Session history and usage insights are stored locally on your machine and are opt-in. Version 2.0 is in alpha, so expect sharp edges and pin your version if you depend on it.

Ready to take control of your CLI assistant?

Install Gaunt Sloth in seconds. Cross-platform, lightweight, and ready for your workflow.