nautilus-preview (v6)
A LoRA over Qwen3.5-0.8B, merged, trained to be the model behind snail — a zsh plugin that turns plain English at the prompt into a shell command, an answer, or a commit message.
Generic models get snail's three surfaces wrong in the same ways every time: they wrap
commands in fences, explain themselves when asked for one line, burn a thousand reasoning
tokens on "copy the pngs", and suggest pbcopy on Linux. Nautilus is trained on prompts
rendered from snail's own Rust constants, so the training distribution cannot drift from
what the binary actually sends.
GGUF builds: nautilus-preview-gguf.
What it does
Three surfaces, each with a hard output contract:
- command — one shell line, no prose, no fences, or the literal
falsewhen the request is impossible. Resolves globs against the real directory listing, respects standing instructions ("never use sudo"), and picks the right userland for the OS. - ask — a
RUN: <cmd>/ANSWER: <≤3 sentences>loop. Every lookup is gated against snail's real read-only allowlist before it executes. - commit — a summary under 72 characters, imperative, no trailing stop, with a body only when the change needs a why.
New in v6: documentation lookup. With command_help = true in snail's config, the
model may answer HELP: <tool> when it does not know a tool well enough to write the
command. snail reads that tool's tldr page, then --help, then man, and asks again —
up to three rounds, so a missing tool leaves room to name a different one. This exists
because the alternative is an invented ffmpeg flag delivered with total confidence.
Results
193 held-out golden records, 185 mechanically gated (replay samples have no gate). Scored by the same graders snail's test suite uses, not by eye.
| v5 | v6 | |
|---|---|---|
| overall | 133/159 (84%) | 159/185 (86%) |
| A11 unanchored search | 3/8 | 8/8 |
| A12 documentation lookup | — | 2/8 |
| A12n answer without asking | — | 8/8 |
The lookup mechanism itself works: on the golden set 10/10 records that warrant a lookup
emit HELP:, and 8/8 that do not are answered directly, so the model discriminates. A12's
low score is the command written after reading the page, not a failure to read it.
Use Q8_0 if you want command_help. On the ten records that warrant a lookup, bf16 and
Q8_0 both ask 10/10; Q4_K_M asks 4/10 and answers the rest straight from its own guesses.
The 4-bit quant is fine for plain command translation and noticeably worse at knowing what
it does not know. Served Q4_K_M scores 149/180 at 0.29s median / 0.64s p90 on a 3090, with
zero format leaks — though that harness is single-shot and cannot feed documentation back,
so it counts every legitimate HELP: as a miss.
Known weaknesses. The A11 fix over-corrected: the model reaches for
find . -maxdepth 1 -type f -name '*.txt' where ls *.txt is right, which accounts for
roughly a quarter of remaining failures. It also learned to name plausible-but-absent
tools first (HELP: avconv before ffmpeg), costing a wasted round trip. Both are data
problems being fixed for v7; neither is a correctness risk, since snail shows you every
command before it runs.
Use
Point snail at any OpenAI-compatible endpoint serving it:
endpoint = 'http://127.0.0.1:8080/v1/chat/completions'
model = 'nautilus'
command_help = true # optional: let it read documentation first
Send enable_thinking: false. Roughly 85% of training is the no-think path — that is the
shipped path, and reasoning is the thing that makes this product unusable.
Training
LoRA r=32, lr 1e-4, 2 epochs, batch 2 × accum 16, max length 2048, on a single 3090. 24.5k records: ~13.4k command, ~3.5k ask, ~3.8k commit, ~2.3k robustness, ~1.4k replay. Sources are exec-verified generation in real fixture directories, teacher distillation, tldr/man corpora, mined OSS commit history, and back-translated local shell history scrubbed of secrets. Final train loss 0.883, eval loss 0.781.
Prompts are rendered from snail's Rust constants by a mirror module, and a test greps the
constants out of src/ai.rs and asserts byte equality. Edit a prompt in Rust and the test
fails until the data is re-rendered.
Licence
Apache-2.0, inherited from the base model.
- Downloads last month
- 32