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 false when 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
Safetensors
Model size
0.8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Loke-60000/nautilus-preview

Adapter
(174)
this model
Quantizations
1 model