Interactive agentic coding CLI backed by your own open-source model endpoint
Project description
acoder
Interactive agentic coding CLI backed by your own open-source model endpoint (any OpenAI-compatible URL — e.g. Qwen3-Coder on RunPod serverless). A terminal coding agent like Claude Code / Codex, but pointed at a model you host.
Install & run (no install needed)
uvx acoder setup # one-time: enter your endpoint URL + API key
uvx acoder chat # interactive agent session
uvx (from uv) runs acoder without installing it and
provisions Python for you — nothing to set up but your endpoint. Prefer a permanent
install? uv tool install acoder or pipx install acoder, then just acoder chat.
Config is read from env vars, ./.env, or ~/.config/acoder/config.env
(written by acoder setup): ACODER_ENDPOINT, ACODER_API_KEY, ACODER_MODEL.
Optional extras: acoder[research] (Firecrawl library docs), acoder[bench]
(benchmark harness), acoder[all].
Interactive agent
acoder chat --mode approve # default: approve each write/command (y/n/a)
acoder chat --mode auto # full autonomy
acoder chat --mode plan # read-only: investigates, proposes, never edits
acoder do "fix the failing test in parser.py and run pytest" # one-shot
The agent reads/searches freely and gates every file write and shell command by
your chosen mode. Slash commands in the REPL: /mode, /ingest, /cost,
/reset, /help, /exit.
Batch workflow (the original staged pipeline)
Works like a careful human dev, in strict stages:
- Ingest — map the repo: every file, class, function, signature,
docstring, import, and cross-file call edge →
.acoder/repomap.json - Research — detect the libraries the task touches; fetch official docs
via Firecrawl (free search fallback without a key); cache condensed API
notes per package in
.acoder/libdocs/ - Plan — short step plan + edge-case list, grounded in the map + docs
- Code — generate the full solution with that assembled context
- Verify — run tests in a sandbox; repair loop with anchored acceptance
Verification design (measured, not vibes)
Naive self-repair (model writes tests, repairs until they pass) lowered HumanEval+ from 89.0 → 87.2 in our runs: bad model-written tests break good code. acoder therefore treats task-statement examples as ground truth anchors; model-written tests are advisory, and a repair is only accepted if it strictly improves the score.
Usage
cp .env.example .env # RUNPOD_API_KEY, ACODER_ENDPOINT, FIRECRAWL_API_KEY
pip install -e ".[bench]"
acoder ingest . # build the repo map
acoder research pandas # cache API notes for a library
acoder solve "add a retry decorator to http_get in client.py" --path .
acoder bench humaneval --mode baseline
acoder bench bigcodebench --mode agent
acoder report # scorecard vs frontier reference numbers
Benchmarks (this deployment, pass@1)
| Benchmark | Baseline | Agentic | Notes |
|---|---|---|---|
| HumanEval | 92.7 | — | greedy, FP8, 48GB serverless worker |
| HumanEval+ | 89.0 | 87.2 (naive v1) | v1 regression is what motivated anchored verify |
| BigCodeBench-Hard | pending | pending | research stage on |
macOS note: EvalPlus's sandbox calls resource.setrlimit(RLIMIT_AS, ...),
which macOS rejects — wrap it in try/except ValueError in
evalplus/eval/utils.py or every task scores 0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acoder-0.1.0.tar.gz.
File metadata
- Download URL: acoder-0.1.0.tar.gz
- Upload date:
- Size: 39.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaea239068fad5ceb9887e74a40331dcf8e5839b0a6e1ccea30dc93bbabfef8c
|
|
| MD5 |
988b986e0863902712aa576839d90582
|
|
| BLAKE2b-256 |
a959125cf0fc962f2a0bc49efdbef9091f105f4900d3b250810f94606be96b24
|
File details
Details for the file acoder-0.1.0-py3-none-any.whl.
File metadata
- Download URL: acoder-0.1.0-py3-none-any.whl
- Upload date:
- Size: 47.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f193131ef31d656aff8b347c0604f8e7c55eab12d18fe7b9caffa2b6b24d9839
|
|
| MD5 |
2d5342133d48514648519a29c00eb3c8
|
|
| BLAKE2b-256 |
117fae0c1fc0b4ac451bb76c5741c98f8ed1750df19267db1e59f968c5452f4a
|