Skip to content

Releases: NeuroSkill-com/skill

Skill v0.0.126

20 Apr 05:04

Choose a tag to compare

Changelog

Features

  • daemon restart on launch

Contributors

  • Eugene Hauptmann

Skill v0.0.125

20 Apr 03:37

Choose a tag to compare

Changelog

Features

  • fixed auto connect

Contributors

  • Eugene Hauptmann

Skill v0.0.124

20 Apr 00:57

Choose a tag to compare

Changelog

Features

  • fixed daemon invoke
  • linter
  • fixed calibration
  • fixed set default
  • better connect
  • fixed connectivity

Contributors

  • Eugene Hauptmann

Skill v0.0.123

19 Apr 19:07

Choose a tag to compare

Changelog

Features

  • Add daemon calibration session HTTP routes: POST /v1/calibration/session/start, POST /v1/calibration/session/cancel, GET /v1/calibration/session/status.

  • Add POST /v1/calibration/record-completed and GET /v1/calibration/active-profile daemon routes.

  • Daemon broadcasts calibration-tts events with spoken text before each phase, giving the frontend a 4-second window to play TTS audio before the countdown begins.

  • Auto-install daemon as persistent OS service on first app launch. The Tauri app calls the daemon's /service/install endpoint after startup, registering a LaunchAgent (macOS), systemd user unit (Linux), or Windows service. The daemon now persists across app restarts and reboots.

  • Add --uninstall CLI flag to skill-daemon for clean service removal.

  • LLM catalog: Added Qwen3.6 35B-A3B (MoE), MiniMax M2.7, and GLM 5.1 models to the local LLM catalog.

  • HuggingFace GGUF search: New UI section in Settings → LLM to search HuggingFace Hub for GGUF models. Browse repos by downloads/likes, expand to see individual quant files with sizes, and add models to the catalog with one click (optionally starting download immediately). Each repo shows a collapsible README (rendered as markdown with proper table and heading styling, YAML frontmatter stripped) and a direct link to the HuggingFace page. Two new daemon endpoints: GET /llm/catalog/search and GET /llm/catalog/search/files (the latter also returns the repo README, capped at 32 KB). Fully localized (9 languages).

  • Interactive search: AI summary with streaming. "Generate" button in the Insights panel sends search context (labels, EEG metrics, sessions, screenshots) to the local LLM via chat_completions_ipc with a channel callback. Response streams token-by-token with live markdown rendering via MarkdownRenderer. Thinking blocks are shown in a collapsible <details> element.

  • Interactive search: rich AI prompt with full EEG context. The LLM prompt now includes:

    • Time range and epoch count
    • Labels with timestamps and similarity distances
    • EEG epoch metrics: engagement, relaxation, SNR, α/β/θ band powers, heart rate, relevance score, session ID
    • On-demand timeseries fetch when graph nodes lack stored metrics (computes averages from raw data)
    • Session metrics with stddev, best-session flag
    • Screenshot context: app name, window title, timestamp, OCR similarity
    • Fallback session derivation from node session_ids when backend sessions are empty
  • Interactive search: prompt visibility. Collapsible "Prompt" section shown immediately when "Generate" is clicked (open by default during generation, collapses after). Shows the exact data sent to the LLM in monospace font.

  • Interactive search: LLM auto-start. When the LLM is not running, shows "Start LLM and try again" button that calls start_llm_server, waits for initialization, and retries the summary automatically.

  • Interactive search: Continue in Chat. "Continue in Chat →" button after the AI summary creates a new chat session named "Search: {query}", saves the prompt and response as messages, and opens the chat window. Users can ask follow-up questions about their search results.

  • Interactive search: auto-save to chat history. Every AI summary is automatically saved as a chat session, making all LLM conversations from search discoverable in the chat history regardless of whether the user clicks "Continue in Chat".

  • Interactive search: insights panel. Collapsible "Insights & Patterns" card with:

    • Optimal conditions: auto-detected peak engagement hour and best app
    • App × Engagement correlation: bar chart showing avg engagement per app (uses window_title fallback)
    • Hour-of-day engagement pattern: bar chart across 24 hours
    • AI summary with streaming, thinking blocks, markdown rendering, and chat integration
  • Interactive search: bookmark/findings system. Star button in node detail panel saves nodes to localStorage (max 50). Saved findings appear in the empty state with quick re-search and delete controls.

  • Interactive search: graph color mode switcher. Dropdown to recolor EEG nodes by timestamp (turbo), engagement level, SNR quality, or session (hash-based). Graph reactivity fixed with explicit dependency tracking.

  • Interactive search: timeline scrubber. Horizontal SVG timeline below the graph showing all timestamped nodes as color-coded clickable dots. Clicking selects the node in the detail panel.

  • Interactive search: EEG sparkline. "Load EEG bands ±60s" button on EEG point nodes fetches actual timeseries data and renders α (blue), β (amber), θ (green) band power chart with a red marker at the epoch timestamp.

  • Interactive search: screenshot preview. Inline screenshot thumbnail in the detail panel when a screenshot node is selected.

  • Interactive search: compare mode. Select two EEG points for side-by-side metrics comparison with green/red diff highlighting and time gap display.

  • Interactive search: node detail panel improvements. Moved to a separate card below the graph with colored left border, generous spacing, text-sm font sizes, responsive metrics grid, breadcrumb trail, and "More like this" / bookmark buttons.

  • Interactive search: 3D graph enhancements. Double-click zoom with smooth camera tween, minimap, node kind filtering, subtle grid floor, reset view button, enhanced tooltips with metrics/session/relevance.

  • Add device filter to EEG embedding search. A dropdown in the search controls lets users filter by device (e.g. MuseS-F921, AttentivU-053) or search across all devices. Backed by GET /v1/search/devices and device_name parameter on the streaming search endpoint.

  • Per-epoch EEG metrics in AI summary prompt. The interactive search AI summary now includes per-epoch metrics (engagement, relaxation, SNR, α/β/θ band powers, FAA, mood, TAR, meditation, cognitive load, drowsiness, heart rate) instead of just "(no EEG metrics stored)". Each 5-second epoch shows its own brain state data.

  • On-the-fly CSV metrics fallback. When embeddings lack metrics_json, the interactive search now lazily loads session _metrics.csv files and matches epochs by timestamp (±3s tolerance) to populate metrics from CSV data. This is transparent to the user — metrics appear without needing a backfill.

  • Background metrics backfill from CSV. New POST /v1/analysis/backfill-metrics endpoint patches metrics_json in the SQLite embeddings table for rows where it is NULL, matching against _metrics.csv by timestamp. Fires automatically on search page load (fire-and-forget). After first run, all future searches find metrics directly in the DB.

  • Recomputation of derived EEG metrics. When meditation, cognitive_load, drowsiness, or stress_index are null in stored metrics_json but band powers (α, β, θ, δ) are present, they are recomputed on-the-fly using the same formulas as the live pipeline.

  • Shared EEG score formulas (skill-data/eeg_scores.rs). New module with pure-math functions for computing derived EEG metrics from averaged band powers.

  • Interactive search: EEG metrics on graph nodes. Each EEG epoch node now carries its full metrics (engagement, relaxation, SNR, alpha/beta/theta, FAA, heart rate, etc.) via the NeighborMetrics struct, visible in the tooltip and detail panel.

  • Interactive search: session grouping & cross-session comparison. Every node gets a session_id derived from its timestamp. The results include a session summary with averaged metrics, stddev, min/max engagement/SNR, duration, and band power ratios. The best session (highest avg engagement) is auto-flagged with a ★ marker.

  • Interactive search: cross-session trend chart. SVG sparkline rendered above the session summary, showing engagement trend across sessions. Best session dot highlighted in green.

  • Interactive search: relevance scoring. Each EEG node receives a composite relevance_score combining text similarity (50%), temporal distance (30%), and engagement (20%). Nodes are optionally sortable by relevance in the UI and rendered larger in the 3D graph for high-relevance matches.

  • Interactive search: SNR quality filter. New snrPositiveOnly toggle (step 6) excludes EEG epochs with non-positive SNR (bad signal quality). Backed by server-side filtering before graph construction.

  • Interactive search: device filter. Device dropdown (step 7) in the interactive pipeline, filtering EEG epochs by device name at the SQL query level via get_session_timeseries_filtered().

  • Interactive search: date-range filter with presets. Date-range inputs (step 8) constrain results to a time window. Quick preset buttons (24h, 7d, 30d) with a clear button.

  • Interactive search: EEG epoch ranking. Rank-by dropdown (step 9) sorts EEG epochs by engagement, SNR, or relaxation before selecting top-k, surfacing the most interesting epochs first.

  • Interactive search: collapsible advanced filters. Steps 6–9 are grouped behind an "Advanced filters" toggle to keep the default view clean. An amber dot indicator shows when any filter is active.

  • Interactive search: performance timing & system load. Each search returns embed_ms, graph_ms, total_ms timing plus CPU usage and memory stats via sysinfo. Displayed in a compact perf bar.

  • Interactive search: search result caching. LRU-style cache (8 entries, 5-minute TTL) in the daemon. Repeated searches with identical parameters return instantly without re-embedding.

  • Interactive search: CSV export. "Export CSV" button in the sessions summary panel downloads a CSV with all session metrics.

  • Interactive search: search history. Recent queries persisted in localStorage (max 10). Displayed as clickable chips in the empty state for quick re-runs. ArrowUp in empty textarea recalls the last query.

  • **Interactive search: pipeline settings persist...

Read more

Skill v0.0.122

19 Apr 13:23

Choose a tag to compare

Changelog

Features

  • Add recent/frequent command ranking to Cmd-K. Commands you use most often and most recently appear at the top in a "Recent" section, with frequency and recency boosts applied to search scoring.

  • Add typo tolerance to Cmd-K search. Misspellings like "drak mode" or "calbriation" now find the right result using Damerau-Levenshtein edit distance as a fallback when fuzzy matching fails.

  • Add contextual boosting to Cmd-K. Device, EEG, Calibration, and LSL commands are ranked higher when a device is connected; Devices settings are boosted when no device is connected.

  • Add keyboard-driven toggles in Cmd-K. Toggleable settings (dark mode, high contrast) show an ON/OFF indicator and can be flipped with the Tab key without closing the palette.

  • Add prefix-based command filtering to Cmd-K. Type > to show only system commands or @ to show only settings.

  • Add semantic search fallback to Cmd-K via fastembed embeddings. When fuzzy results are sparse and the query is 6+ characters, a debounced request to the daemon's /v1/search/commands endpoint returns semantically similar commands in a "Suggested" section. Handles natural language queries like "make text bigger" or "reduce eye strain".

  • Add toggle dark/light mode command to the Cmd-K palette.

  • Add deep-link search for individual settings in the Command Palette (Cmd-K). 154 settings across all 20 tabs are now searchable by name, description, and synonyms — typing "DND", "dark mode", "GPU", "OCR", etc. instantly finds the right setting.

  • Auto-generate per-locale search indexes from i18n translation files and Tab components. Indexes are built for all 9 languages (EN, DE, ES, FR, HE, JA, KO, UK, ZH) and stay in sync automatically via a Vite plugin that watches for changes during development.

  • Add synonym expansion to Cmd-K fuzzy search. Common abbreviations like DND, BT, GPU, OCR, LLM, and 30+ others are expanded before matching so users can search using shorthand.

  • Add Command Palette button to the title bar of every window. Clicking the command-key icon opens Cmd-K, matching the keyboard shortcut behavior.

  • Selecting a setting in Cmd-K now opens the Settings window, switches to the correct tab, scrolls to the exact setting, and flashes a blue highlight to draw attention to it.

  • Wire settings index generation into npm run dev, npm run build, and npm run bump so indexes are always up to date before commits and builds.

  • Add Chat and Compare shortcuts to the Shortcuts settings tab, making all 11 global shortcuts user-configurable. The Compare shortcut (previously hardcoded to Cmd+Shift+M) is now customizable like all others.

  • Tray menu now reflects user-customized shortcuts for all actions including Chat and Compare.

  • The keyboard shortcuts overlay (? key) now shows all 11 global shortcuts, matching the Shortcuts settings tab and tray menu.

  • Global keyboard shortcuts no longer steal keystrokes from other apps. Shortcuts are now only registered when a Skill window is focused and unregistered when all windows lose focus, so the focused app always gets the keystroke first. The "Open NeuroSkill" shortcut (Cmd+Shift+O) remains always-on so users can bring the app to the foreground from anywhere.

  • Session sidecar device_kind: JSON sidecars now include device_kind (e.g. "muse", "awear", "openbci") alongside device_name and channel_names. Enables reliable device identification during reembedding when a day directory contains sessions from different devices. Backward compatible — old sidecars without this field are handled gracefully.

  • Embedding coverage dashboard in Settings → EXG → Re-embed. Shows a color-coded coverage bar (green ≥95%, amber ≥50%, red <50%), total/embedded/missing epoch counts, and estimated time remaining based on current embed speed.

  • Per-day breakdown table in the re-embed section. Expandable table showing each day's total epochs, embedded count, missing count, and a mini coverage bar — makes it easy to identify which days have gaps.

  • Idle reembed status indicator. When background embedding is enabled, the UI now shows whether it's actively processing (with day + progress), or waiting for the idle timeout to elapse, instead of running silently.

  • Re-embed progress improvements. Progress bar now shows indeterminate animation during encoder loading, percentage + ETA during processing, amber bar when paused (device reconnected), red bar with error detail on failure.

  • EEG embedding coverage in Search page. Corpus stats banner and empty-state panel now show epoch embedding coverage (e.g. "12,400/14,200 (87%)") with color coding, so you know at a glance whether your data is fully searchable.

  • Multi-modal search: Interactive search now returns screenshots (proximity + OCR text similarity) and EEG epochs alongside text labels. New kScreenshots, kLabels, and reachMinutes parameters control result depth.

  • Search corpus stats: New GET /search/stats endpoint and SSE streaming variant (/search/stats/stream) show EEG days, sessions, recording time, label counts, screenshot counts, and embedding model info. Stats appear in the search UI for all modes.

  • Daemon test mode: POST /v1/test/begin pauses background work (screenshots, OCR, re-embed) for stable E2E testing. POST /v1/test/end resumes. Debug builds only (#[cfg(debug_assertions)]).

  • Daemon readiness: /readyz now returns {ok, ready, test_mode}ready is set after the TCP listener binds. SKILL_DAEMON_TOKEN env var allows injecting auth tokens for isolated test daemons.

  • Interactive test picker: npm test shows a TUI picker (Node.js, cross-platform) with 17 suites. Arrow keys + space to toggle, enter to run.

  • Rust version guard: npm run tauri dev and npm run test:clippy check Rust >= 1.95 and prompt rustup update stable if outdated.

Bugfixes

  • Fix Chat shortcut not being loaded from saved settings on app startup.

  • Reembed silent failures: Added diagnostic logging on first extract failure and first encode failure per batch. Previously all epoch failures were completely silent, making it impossible to debug why 27K+ epochs would fail with zero output.

  • CSV channel length mismatch: The CSV parser now skips entire rows when any channel value fails to parse, preventing channels from accumulating different sample counts. Previously, individual parse failures were silently skipped per-channel, creating mismatched-length arrays that the ZUNA encoder rejected.

  • Mixed-device reembedding: CSVs with fewer columns than the metadata expects (e.g. different device in the same day directory) now use available columns instead of skipping all rows. The column count is detected per-file from the CSV header.

  • Reconnect respects test mode: The BLE reconnect loop now pauses when test_mode is active, preventing background connection attempts from interfering with E2E tests.

  • cpu-only feature build: Fixed compilation errors in skill-daemon when built with --no-default-features --features cpu-only. The #[cfg(not(feature = "llm"))] fallback paths referenced AppState fields that don't exist without the llm feature. Replaced with static stubs. This fixes the CI coverage job.

  • Clippy 1.95: Fixed sort_bysort_by_key(Reverse) in skill-history, collapsible_match in connect_wired, checked_div in iroh_remote.

  • Prebuilt llama naming: Updated download URL from q1-metal/q1-vulkan to metal-static/vulkan-static to match current release asset names.

  • Fix macOS DMG creation stream error: Added retry logic (up to 3 attempts) to the appdmg invocation in scripts/create-macos-dmg.sh. The ERR_STREAM_WRITE_AFTER_END race condition in appdmg's internal file-copy stream is now caught and retried automatically, with partial DMG cleanup between attempts.

  • Search hang fixed: Removed expensive collect_search_meta (session JSON parsing) from the search hot path. Corpus stats are now fetched separately via a dedicated endpoint.

  • Label stale count: count_needing_embed() uses SELECT COUNT(*) instead of loading all stale rows into memory.

  • Heredoc terminators: Fixed indented heredoc terminators (DPLIST, PYEOF) in release-mac, release-linux, and pr-build workflows that caused syntax error: unexpected end of file.

  • Flaky env var test: Added Mutex guard to enforce_path_integrity tests in skill-tools to prevent parallel env var races.

  • A11y errors: Added aria-label to 3 unlabeled inputs in EegModelTab.svelte.

  • Smoke test auth: Added Bearer token to all HTTP requests in test.ts (was sending unauthenticated). Updated 20+ REST paths from old Tauri-era shortcuts to /v1/ daemon endpoints. Score: 83/275 → 341/0.

  • E2E test isolation: Daemon token and data E2E tests now spawn isolated daemons on random ports with temp skill dirs. Can run in parallel.

  • Pre-checkout CI step: free-disk-space step inlined for workflows that run it before actions/checkout.

  • ESM import fix: Removed Node 22-only glob import and require() calls from ci.mjs (broke on Node 20 CI runners).

Refactor

  • Dead scripts removed: Deleted prepare-daemon-sidecar.sh (superseded by .js), adopt_anyhow.py (unused), check_windows_manifest.py (ported to Node).
  • Screenshot store reuse: Interactive search opens the screenshot store once and reuses it for both proximity and OCR searches.
  • E2E helpers: New src/tests/e2e-helpers.ts with spawnDaemon(), testBegin()/testEnd(), isDaemonReady(), freePort() shared across all E2E test files.

Build

  • CI scripts consolidated: Replaced ~960 lines of duplicated inline YAML with a single scripts/ci.mjs (Node.js, 12 subcommands). Zero Python dependency for builds — all scripts are Node.js + bash.
  • Release workflows refactored: All 3 release workflows (macOS, Linux, Windows) support workflow_dispatch for on-demand builds. On-dem...
Read more

Skill v0.0.121

15 Apr 17:27

Choose a tag to compare

Changelog

Features

  • update failing apple notary tool

Contributors

  • Eugene Hauptmann

Skill v0.0.120

15 Apr 16:59

Choose a tag to compare

Changelog

Features

  • updated API docs

Contributors

  • Eugene Hauptmann

Skill v0.0.119

15 Apr 13:05

Choose a tag to compare

Changelog

Features

  • added openblas to ci
  • fixed tests limits
  • missing keys

Contributors

  • Eugene Hauptmann

Skill v0.0.118

14 Apr 16:41

Choose a tag to compare

Changelog

Features

  • updated neuroloop
  • neuroloop 0.1.1
  • added new logo
  • updated neuroloop and neuroskill
  • added korean and a11y + fixed i18n
  • merged PRs
  • deps(cargo): bump the cargo-all group across 1 directory with 8 updates
  • Bumps the cargo-all group with 8 updates in the / directory:
  • | Package | From | To |
  • Updates rusqlite from 0.37.0 to 0.39.0
  • Updates zip from 4.6.1 to 7.2.0
  • Updates llmfit-core from 0.8.9 to 0.9.7
  • Updates sysinfo from 0.33.1 to 0.38.4
  • Updates libc from 0.2.184 to 0.2.185
  • Updates rand from 0.9.3 to 0.10.1
  • Updates tokio-tungstenite from 0.24.0 to 0.28.0
  • Updates jsonschema from 0.45.1 to 0.46.0

  • Signed-off-by: dependabot[bot] support@github.com
  • linter
  • neuroloop
  • ui
    1. zuna-rs Performance (0.0.4)
    • model/*.rs — Replaced LinearConfig::init() (random KaimingUniform via ChaCha12 RNG) with linear_zeros() using Tensor::zeros across all 8 model files
    1. Apple Accelerate BLAS
    • skill-daemon/Cargo.toml — Added simd + multi-threads to burn-ndarray for all platforms; added platform-specific BLAS: blas-accelerate (macOS), blas-openblas-system (Linux)
    1. Labels DB Schema Migration
    • labels.rs — Added ALTER TABLE migration for wall_start, wall_end, label_start, label_end, text_embedding, context_embedding, embedding_model columns
    1. HNSW Panic-Proofing
    • skill-label-index/lib.rs — Added safe_insert() with dimension check via idx.inner.dim() before insert
    1. Embedding Status & Reindex UI
    • Daemon: GET /v1/labels/embedding-status — reports current model, stale count, per-model breakdown
    1. Reembed Settings
    • skill-settings — ReembedConfig struct: auto_labels, auto_eeg, auto_screenshots, batch_size, batch_delay_ms
    1. Daemon Watchdog Settings
    • skill-settings — daemon_auto_restart: bool (default true), daemon_restart_timeout_secs: u64 (default 10)
    1. Daemon Band Powers in BandSnapshot
    • eeg_bands.rs — Added top-level rel_delta..rel_gamma fields to BandSnapshot, computed as channel-averaged absolute powers normalized across all 6 bands (including high_gamma)
    1. NeuroLoop Band Display Fixes
    • Band bars always empty — Fixed scaling: old formula val * barWidth * 3 assumed ~30% relative power; new formula normalizes bars relative to strongest displayed band
    1. NeuroLoop Scores Update Fix
    • mergeScoresEvent() — Was missing cognitive_load, drowsiness, mood from EegBands events; now extracts all 7 metrics at 10Hz
    1. NeuroLoop Status Injection Fix
    • before_agent_start — Was calling runNeuroSkill CLI first (30s timeout, fails on WS auth); reversed to try the already-open WS connection first (instant, already authenticated), CLI as fallback
    1. NeuroLoop LLM Auto-Start
    • On WS connect — Checks LLM server status; if stopped, shows warning and auto-starts the server
    1. Misc
    • npm run stop — Added to package.json, kills all skill-daemon processes
  • Test Results
    • 75 Rust tests — 0 failures, 0 warnings
  • ndarray optimization
  • updated embeddings and hnsw
    • zuna-rs 0.0.4 — zero-cost model init (no random waste)
  • fixed labels
  • deps(npm): bump the npm-all group with 11 updates
  • Bumps the npm-all group with 11 updates:
  • Updates @threlte/core from 8.5.6 to 8.5.9
  • Updates @threlte/extras from 9.14.4 to 9.14.5
  • Updates bits-ui from 2.17.2 to 2.17.3
  • Updates maplibre-gl from 5.22.0 to 5.23.0
  • Updates marked from 17.0.6 to 18.0.0
  • Updates pmtiles from 4.4.0 to 4.4.1
  • Updates @biomejs/biome from 2.4.10 to 2.4.11
  • Updates @sveltejs/kit from 2.56.1 to 2.57.1
  • Updates svelte from 5.55.1 to 5.55.3
  • Updates vite from 8.0.4 to 8.0.8
  • Updates vitest from 4.1.2 to 4.1.4

Contributors

  • Eugene Hauptmann
  • nataliyakosmyna
  • dependabot[bot]

Skill v0.0.117

13 Apr 09:25

Choose a tag to compare

Changelog

Features

  • neuroskill
  • fixed cargo clippy
  • fixed svelte errors
  • updated main app for neuroskill and neuroloop
  • Neuroloop TUI:
  • Daemon:
  • Neuroloop provider registration:
  • No Tauri changes needed — the desktop UI already handles tags natively with collapsible thinking blocks.
  • fixed neuroskill + added japanese
  • fixed neuroskill
  • updated neuroloop
  • updated iroh
  • updated neuroskill
  • tests
  • updated cli
  • updated faq
  • refactored faq and help
  • updated disconnect
  • added submodules
  • fixed tests
  • biome fixes

Contributors

  • nataliyakosmyna
  • Eugene Hauptmann