ElementaryOS M-Series · Features
Measured October 16, 2026 on the working elementary OS 9 desktop. Qwen3.5 4B through private Linux MLX is the practical default: it passed 9/15 short tasks, 9/9 corrected MCP workflows and real Newelle/memory/coding checks. Qwen9 scored 12/15 short tasks but later crossed the desktop RAM reserve; it now requires a larger optional budget.
Merged and installed. PR #155 passed all six head-specific CI checks and merged as 5c26ff6. Installed runtime/model hashes, strict live CPU/IBus settings, enabled readiness, preserved toggle mode/input settings and the unchanged everyday 4B process passed read-only verification. Native ANE/MLX assets are retained; the optional Voice Assistant is installed with automatic replies off. All seven installed routes passed: GTK4 with public-file ASR, GTK3/Qt6/Brave with no-inference input fixtures, and Code/Newelle/Tasks with no-inference field-discovery/lease/cancel checks. The last three do not repeat positive transcription; earlier pinned real-app ASR receipts supply that evidence. The three initial missing-argument setup failures are retained; only their unstarted fixtures resumed. The installed queues retained at least10.48GiB available at≤2530RPM/49.01°C, with no guard interruption. These tests used isolated app state. No fresh owner microphone or physical-F5 acceptance is claimed.
The current integration selects English Nemotron CPU streaming, with native ANE and Parakeet MLX alternatives and configurable0–900second residency. Exact English words arrived during speech in actual elementary Code (1.671s), Newelle (1.839s) and Tasks (1.885s), plus GTK3/GTK4/Qt6/Brave fixtures. Times include controller/input preparation. No message-send or task-save action was requested. A synthetic Gmail-style rich compose/textarea regression passes; authenticated Gmail remains untested.
Testing exposed Chromium confirming speculative draft composition on focus loss. Those failures remain retained. App input now uses only stable committed words; the original transcript is preserved and English grammar suggestions stay separate. Native worker deadlines, cancellation, field leases, pressure reclamation and private rollback are covered. No owner microphone or window was used.
Two resident62.61s trials per engine settled the longer-run comparison for these ports: CPU finished0.048/0.062s after audio; MLX needed26.187/26.820s. MLX used less CPU time (19.15/19.77 versus76.52/78.98CPU-seconds), but fell behind live input. Final WER was1.19%CPU and0.595%MLX on the repeated clean clip; this is a stress workload, not general accuracy. CPU's post-run sensor summary failed to save; its completed trials were retained without rerunning. MLX remained above10.79GiB available, at≤2527RPM/54.93°C. Lower CPU use does not establish lower total power.
The optional English Voice Assistant uses the existing local4B and robotic eSpeak synthesis, with explicit Ask and off-by-default replies after F5. A synthetic text→WAV test produced first WAV file at 2.200 s. A joined continuation replayed37 recorded real-ASR widget events through the actual completion gate and produced one real reply/WAV2.294s after the replayed audio end, reusing completed ASR instead of running it twice. This is not fresh acoustic microphone-to-speaker latency or full-duplex WebRTC. Acceptance, controls and deployment record · Canonical qualification ledger: read before repeating work · Sanitized receipts, failures and source pins.
Measured on this M1 Pro 32 GB: Nemotron160 CPU produced first draft words in 0.851 s median; MLX Vulkan Parakeet in 1.452 s; the existing native ANE controller in 2.97 s warm committed output (4.26 s cold). These output policies differ. Three trials per engine on one 10.435 s public clean clip retained all outcomes. All three had zero final normalized word errors; Moonshine tiny/small retained 14.29%/7.14% errors. Three additional speakers passed the small Nemotron/Unified CPU extension. This does not establish general accuracy or current human F5 acceptance.
A real private GTK4 English-only workflow showed original words at1.290 s and optional English suggestions at2.598 s from child launch, during speech. Original text remained intact. The source candidate defaults to grammar after speech; live cleanup is optional. Across these English streaming trials, sampled fans stayed at or below2531 RPM and available memory above10.88 GiB, preserving the six-GiB reserve. RPM is a noise proxy; power and dBA were not measured. No microphone, owner window or runtime default was changed. English speech→English text is the current scope; older foreign-language experiments below are historical.
Full timings, Apple API analysis, Omarchy MX/MLX branch audit and next gates · Sanitized receipts and frozen source. Those figures describe the earlier file-input cohort. Focus-bound integration, native lifecycle work and deployment are recorded in the newer English F5 acceptance section; PR #155 is merged.
| Model and runtime | Tasks | Estimated decode tok/s | Minimum free GiB | Peak fan RPM |
|---|---|---|---|---|
| Qwen3.5 9B 4-bit · MLX | 12/15 | 14.73 | 9.45 | 2533 |
| Qwen3.5 4B 4-bit · MLX | 9/15 | 19.76 | 10.65 | 2538 |
| Qwen3 4B Instruct 2507 · MLX | 6/15 | 11.55 | 14.64 | 2529 |
| Qwen2.5 Coder 7B Q4_K_M · llama.cpp | 6/15 | 15.13 | 11.80 | 2662 |
| Liquid LFM2.5 1.2B Q4_K_M · llama.cpp | 9/15 | 63.59 | 14.90 | 2528 |
Five fixed cases repeated three times: extraction, scheduling arithmetic, log calibration with an injected instruction, and two pure Python functions. These deterministic trials test this small workload, not general model intelligence. Decode rates are API timing estimates; cache behavior differs between runtimes. Fan RPM is a noise proxy, not a dBA measurement. Existing desktop apps remained open, but their memory footprint changed between runs; headroom differences are not model allocation measurements.
The corrected MCP workflow suite has completed at 9/9 for the newer Qwen3.5 4B and 6/9 for the older Qwen3 4B. Liquid completed 3/9, the 7B coder 0/9 and Bonsai 9/9. Qwen9's corrected run was interrupted by the memory guard. Earlier note instructions had ambiguous punctuation; those counts are retained as exploratory data. The workflows calculate a time, create and read back a note, and ignore instructions planted in a file. Tasks and Calendar also passed real data-service tests using temporary synthetic records that were removed afterwards. Newelle's summary memory recalled a synthetic preference after its handler was reconstructed.
The initial MCP OS layer supplies typed tools for Tasks, Calendar, scoped workspace files, system measurements, the Energy Monitor cache and fault signatures. Other installed apps are inventoried with explicit adapter coverage. The October 18 adapters add local Calendar writes, unsent Mail drafts and a separate Assistant Browser reader. Messaging, arbitrary windows and complete browser control remain outside this surface.
Native 4B trials averaged 221.74 prompt tokens/s (512-token input) and 25.17 decode tokens/s (128-token output). Native and API timing workloads differ; see the methods and raw logs. The small model failed kernel/log repair-advice checks and is excluded from dedicated diagnosis. Deterministic fault collection remains active; automatic model diagnosis is off.
A real Tasks-to-model-to-note workflow passed through production EDS and stdio MCP, followed by note creation and read-back. Private records were removed from eval input, and owned test data was cleaned up.
The October 16 eleven-tool adapter added create-only tasks in a dedicated local Assistant Tasks list, with retry IDs that prevent duplicate creation. Live concurrent/retry/conflict EDS checks and all six model workflows passed: note-to-task/read-back 3/3 and rejection of a file instruction to create an unwanted task 3/3. Every owned test source was removed. An interrupted request remains in the checkpoint evidence. These tests explicitly name the workflow tools; they do not establish control of every app. Current app coverage and methods.
The sixteen-tool adapter creates retry-safe events in local Assistant Calendar, reads pages only in a separate user-launched Assistant Browser profile, and creates local unsent Mail drafts. Concurrent/retry/conflict Calendar checks passed with independent EDS readback and cleanup. Hidden isolated native Mail testing confirmed that the draft-review button preserves recipient, Unicode/reserved subject and multiline body in the installed composer. Send was never activated. Newelle discovered exactly sixteen configured tools. The isolated all-sixteen-tool Newelle wrapper discovery passed; the actual positive Send conversation passed, while hostile-page handling made no writes but failed the requested exact answer format. Seventy-two contracts and four image-wiring checks pass.
Qualification in progress: all six backend model cases completed and passed. The actual Newelle positive chain passed; the negative case retains a strict-format failure. The first browser-to-Calendar-to-Mail chain took 347.37 seconds, including approximately 226.53 seconds paused for cooling. At 345 one-second samples, available RAM stayed at or above 11.44 GiB, fan readings at or below 3236 RPM and temperature at or below 58.40 C. These are sampled readings, not acoustic measurements. The first hostile-page rejection passed in 12.85 seconds and created no event or draft. The second browser-to-Calendar-to-Mail repeat passed in 129.95 seconds with independent event/draft matches and no recorded cooling pause during that case. The second hostile-page rejection passed in 104.75 seconds, including about 91.07 seconds cooling-paused. The final positive and rejection repeats passed in 124.37 and 26.90 seconds. The earlier repeat-three transport timeout is retained without a quality score; cleanup passed. The kernel is now 7.1.12-2-20261017.20-sep-ARCH from separate owner work, so timings are a separate cohort. Sanitized checkpoint, source pins and exact evaluated code.
The proposed redesign starts with a headless agent broker, scoped app capabilities, durable kernel/app alerts and workflow receipts. Pantheon controls and an explicitly paired WebRTC voice client share that service. Speech capture, optional grammar/translation review and interruptible speech output have separate acceptance gates. Main b20c808 fixed native AOP float32 capture; installed loopback tests report recognition. Later owner feedback confirms physical F5 speech-to-field in Dictation; universal insertion remains unqualified. The new IBus route passes GTK3/GTK4 field checks; The first browser password-metadata failure is retained; the revised candidate requires AT-SPI field metadata and passes GTK3, native GTK4 Wayland, Qt6 and accessibility-enabled Brave checks. CPU/IBus is activated with per-utterance engine selection and restoration. The earlier owner F5 attempt produced a microphone-function prompt; that failure remains retained. After deployment, the owner opened Dictation and reports words appearing in Original transcript with physical F5 speech. This is a limited native-app human acceptance pass; spoken contents stay private. Input timeouts and clean IBus-disconnect recovery are fixed; the bridge now restores only an empty native input selection and preserves the speech worker. Installed recovery and private GTK reconnect tests pass, and the later human Dictation retry passed. The revised speech-to-field fixture passed at 0% normalized WER, first text 5.09 s and maximum sampled fan 2523 RPM; prior results and failures remain separate. Optional review has three explicit native modes and a completed six-case pilot:5/6 limited checks, with a French identifier-mutation failure retained. Warm requests took1.99–3.43s, max2516RPM and min9.48GiB available. Separate English/German/Japanese probes passed3/3 limited checks. A public-file speech→GTK4 panel→French translation→grammar→private clipboard workflow passed functional checks:0% normalized WER, first field text5.00s, min11.04GiB and reported0RPM/max40.17C. Semantic translation errors remain (stew→soup; bruised→crushed potatoes), unchanged by grammar review. Original and intermediate text are preserved. These are limited probes, not broad translation or acoustic qualification. The native Dictation panel is installed. A new regression found its focus-only retry disabled after field errors/waiting; the retained failure is followed by passing fixed and installed GTK4 focus checks. Review receipts and frozen source. A separately qualified on-demand CPU speech candidate rechecks the original field after loading and frees its model on idle/pressure. A file-to-field lifecycle test reclaimed784MiB; a zero-inference timer test released at61.00s and reclaimed767MiB. Retained native library/allocator memory remains; long-run stability is unqualified. Both kept≥11.07GiB available, reported0RPM and stayed below40.0C. Forty-six contracts and private Qt6/Brave/GTK4 Wayland field checks pass. A separate eight-cycle reload-only soak settled around107.2MiB closed RSS (last four samples span48KiB); repeated-inference and indefinite stability remain unqualified. The lazy CPU controller is now deployed after idle/quiet and preference-preservation checks. Fresh listener RSS was32.67MiB before native SDK load; that is distinct from retained after-use library/allocator memory. Lifecycle receipts and evaluated source. No new alert broker, voice conversation or WebRTC service is claimed installed. Feature design and phased tests.
Source and sanitized receipts are merged through PR #86. All five CI jobs passed; 46 dictation, 72 assistant and six image-wiring checks pass. Initial Pages publication was independently verified against the reviewed report bytes. A later deployment installs the lazy controller and Dictation panel, and the owner reports a successful physical F5 speech-to-field check. Earlier failures remain retained. Historical scope: these foreign-language experiments predate the owner’s English-only clarification. Current work is raw English words with optional English grammar; see the newer streaming results above. Sanitized deployment, failed/fixed panel and human acceptance receipts. Commit-specific publication proof.
A pinned Omarchy Mac/MX and MLX comparison covers notification/agent behavior, voice engines, Laya, oMLX and performance switches. The reviewed MLX main is 28 commits ahead of our tested pin. Native-GQA is a promising untested M1 Pro candidate; numerically rejected shortcuts remain excluded. Upstream speeds are not substituted for local measurements, and the current qualification runtime remains unchanged.
Private MLX v0.7.33 passes matrix, integer-shift and compiled rsqrt/RMSNorm smoke checks. Its private Honeykrisp compute driver leaves desktop Mesa separate. The kernel/app fault watcher is active at login, records bounded signatures and previous-boot evidence, and does not execute model-generated repairs.
The six-hour upstream workflow discovers public developer branches and PR heads across the selected Mac, MLX, Mesa, ANE and kernel repositories. Its first enhanced main-branch run passed with zero fetch errors and retained 1,105 public branch heads; the compressed dashboard state decoded correctly. The initial 1,103-head snapshot is also preserved. The October 18 repair records two deleted Aurora refs without aborting discovery; the candidate run retained 1,114 heads. After PR #94 merged, a verified main run retained 1,180 public heads and 193 PR heads with zero fetch errors; artifact digests matched the dashboard and pending history was preserved. Discovery produces review candidates; it does not update pins or qualify hardware.
The offline factory runtime stages successfully and image pruning/configuration checks pass. A complete image build and hardware boot with this AI layer remain separate qualification steps.