Ask a terminal question in Malay, get the command back.
camne is how people say macam mana / bagaimana: "how". Type it the way you would ask a friend.
$ camne nak exit vim
<Esc>:q<Enter>
$ camne nak tengok fail hidden
ls -a
$ camne nak pasang zsh
camne warning: runs as root
sudo apt install zsh
$ camne nak list port bukak
lsof -icamne only prints the command. It never runs it. You read it, then you decide whether to type it.
curl -fsSL https://raw.githubusercontent.com/officialdad/camne/main/install.sh | shThen ask something:
camne nak reset passwordThe first time, camne downloads what it needs (about 1 GB, once) and shows the progress. After that it works offline. Your questions never leave your computer.
On Windows, download camne_windows_amd64.exe (or camne_windows_arm64.exe)
from Releases.
Already installed? camne update gets the newest version.
Colloquial Malay, rojak, or English all work. camne answers in English either way, because commands are English.
$ camne nak cari file besar dari 100MB dalam home
find ~ -size +100M
$ camne nak kira berapa banyak file dalam folder ni
find . -type f | wc -l
$ camne how do I see disk space
df -hQuestions about the terminal itself count too: which flag does what, which tool to reach for, how to get out of an editor.
camne answers exactly what you asked. A bare request gets a bare, sometimes placeholder answer; a request with names in it gets a command you can run.
$ camne nak install btop
btop
$ camne nak install btop untuk arch
camne warning: runs as root
sudo pacman -S btop
$ camne nak cari file
find / -name <filename>
$ camne nak cari file report.pdf dalam Downloads
find ~/Downloads -name "report.pdf"Three things help most:
- Which system.
untuk arch,kat ubuntu,kat mac,guna brew. Install commands differ per distro and camne cannot see yours. - Which file or folder.
nak delete file lama.txt, notnak delete file. A name in the question is a name in the answer. - Where.
dalam Downloads,dalam folder ni,dalam home.
Malay filenames sometimes come back translated (lama.txt turns into
old.txt). Quote them and they stay as typed: nak delete file 'lama.txt'.
Spelling changes the answer. Bahasa pasar spelling is fine (bukak,
tgk, mcm mana), but the same question spelled two ways can come back with
two different commands. nak list port bukak gives lsof -i; nak list port buka gives netstat -an | grep -i listen. Both list open ports. If an answer
looks off, ask again in different words. This is a beta model trained mostly
on standard spelling; the pasar forms are still being added.
Some commands deserve a second look before you run them: anything that
deletes, anything that needs root, anything that touches a system folder.
camne prints a magenta camne warning: line above those, one line per reason.
$ camne nak delete semua file dalam /etc
camne warning: find + delete: target is the critical path /etc
find /etc -type f -exec rm {} \;The command still prints. camne runs nothing, warned or not.
| command | what it does |
|---|---|
camne doctor |
checks the install and says what is missing, without downloading anything |
camne update |
installs the newest release in place |
camne stop |
shuts down the model camne keeps in memory between questions |
Once a day, after it has answered, camne asks GitHub whether a newer release exists and offers to install it. Nothing downloads until you say yes, and the check is skipped when camne's output is piped somewhere.
The rest of this file is about how camne works and how well it works. You do not need any of it to use camne.
camne is one Go binary. On first run it fetches
llama-server and the
camne-1.5b model into
~/.cache/camne. Both stay local. There is no account, no telemetry, and no
network call except the download and the once-a-day release check.
It runs on 4 cores and 8 GB of RAM with no GPU. Warm answers take under a second; a cold start is under two.
The command is syntax-highlighted and the warnings are coloured only when the
output is a terminal. Pipe it anywhere (camne ... | sh, $(camne ...)) and
you get plain bytes. NO_COLOR or TERM=dumb turns colour off everywhere.
camne-1.5b is Qwen2.5-Coder-1.5B tuned on 228k command rows in four registers (formal Malay, colloquial, rojak, English) plus 330 hand-written beginner tasks, then one epoch of preference tuning against its own wrong answers. Status: beta.
Malay and rojak questions answer well, and the first fifty things a beginner asks (create, list, delete, copy, find, disk, permissions, "how do I quit vim") pass 94% of unseen phrasings on the repo's probe. On advanced English one-liners it is worse than the English-only model it replaces (-0.06, p = 0.05). If you only ever type English, use whatisit.
Scores below are InterCode-ALFA, unmodified scorer, 300 tasks per register. Rojak, Malay grammar around English technical nouns, is what people type most, so it is the column that matters.
| model | BM | rojak | EN | beginner tasks* | size | tok/s @4t | RSS |
|---|---|---|---|---|---|---|---|
| nl2sh-1.5b (the English model camne used to ship) | 0.310 | 0.447 | 0.603 | — | 986 MB | 40 | 1.6 GB |
| camne-1.5b, previous revision | 0.487 | 0.490 | 0.543 | 0.90 | 986 MB | 37 | 1.6 GB |
| camne-1.5b, this revision | 0.497 | 0.517 | 0.543 | 0.94 | 986 MB | 38 | 1.6 GB |
* training/probe.py: 35 beginner tasks asked in 176 phrasings the training
data does not contain, scored on whether the right tool comes back.
Against the English model: Malay +0.187 (p = 6e-08), rojak +0.070
(p = 0.031), English -0.060 (p = 0.05). Against the previous revision the
benchmark cannot tell them apart (every register inside the 95% CI; the same
recipe re-run reproduces to ±0.013), and the probe pass rate moves only
+0.04 (p = 0.12). What changed is the answers themselves: the previous
revision said touch path/to/file1 path/to/file2 ... for "create a new
file", skicka mkdir path/to/folder for a folder and kcadm.sh create users for a user; this one says touch newfile.txt, mkdir newfolder,
sudo useradd -m newuser. Placeholder answers on the probe went 29 → 2 of
222. It shipped on that, not on a score. Speed and memory are unchanged:
same base, same quantisation, same file size.
Full method, the runs that failed, and why, in RESULTS.md.
go build ./cmd/camne # local binary
scripts/build.sh v0.1.0 # all six targets into dist/ + checksums.txt
vhs demo/demo.tape # re-record demo.gifContributing: CONTRIBUTING.md. The repo ships a checked-in
.claude/ config, described in .claude/README.md.
Apache-2.0

