Chad banner
nathansutton nathansutton

Chad

Design community

Description

chad: a local Claude-Code-style coding agent for your laptop

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

chad: a local Claude-Code-style coding agent for your laptop

[![tests](https://github.com/nathansutton/chad/actions/workflows/tests.yml/badge.svg)](https://github.com/nathansutton/chad/actions/workflows/tests.yml)

Two staircase newel posts side by side: Claude is a hand-carved wooden horse head, chad is a scuffed plastic toy horse tied on with twine

Claude can do anything, for anyone, anywhere. chad does one thing. 🗿 *Coding under supervision.*

chad is a single-user coding agent that runs entirely on an Apple Silicon Mac via [MLX](https://github.com/ml-explore/mlx). One 27B model and no API key. Every other harness assumes a datacenter on the other end of a socket; chad assumes a laptop, and the whole design falls out of that. (Not affiliated with Anthropic.)

Try it

uvx chad-code          # runs anywhere; the command is still `chad`
uvx chad-code prove    # offline smoke test: 4 tiny fix-it tasks, verified, timed 🗿

The first run asks, then downloads the model once (~13 GB) into the shared Hugging Face cache. While it downloads, `cd` into a project and think of a scoped first ask: *"fix the failing test in `tests/test_x.py`"* lands, *"improve my codebase"* flails.

chad targets 24 GB and nothing smaller. It runs below that and tells you it is doing so, but 13 GB of weights sit resident before a single token of context, so a 16 GB Mac gets a window too small to work in.

The PyPI package is `chad-code`. Bare `chad` is an unrelated squatted package.

![chad fixing a failing test end to end: reason, read, edit, run pytest, confirm green, all on a local model](docs/demo.gif)

Real session, unedited (the silent prefill is cut). A local model finds the cent that floor division loses, fixes it, and verifies itself, then runs your own `pytest` in your own shell. Recorded with `--yolo` so nothing pauses for a keypress; the default mode stops and asks before every edit and every comma