zOS (“Zac’s Operating Space”) is a local-first agentic reasoning runtime built with Rust + Tauri and powered entirely by local Ollama LLMs. It provides structured pipelines for proof analysis, problem solving, algorithmic reasoning, and other technical workflows—without cloud APIs.
zOS manages multi-model routing, fault-tolerant structured extraction, repair loops, and task-aware fallback logic, wrapped in a SvelteKit desktop interface designed for interactive practice and analysis.
Modern LLMs are powerful but unstable in structured workflows: they truncate, hallucinate formats, and produce incomplete JSON. zOS explores how far a local, self-contained agent runtime can stabilize these behaviors using:
- validation & sanitization layers
- multi-step repair attempts
- fallback regeneration chains
- circuit breaking & exponential backoff
- automatic model selection for different task types
The goal of zOS is to provide a practical, local-first environment for technical reasoning tasks. The fault-tolerance mechanisms were built out of necessity: local LLMs frequently produce truncated or invalid structured output, so zOS implements enough routing and repair logic to keep the workflows usable.
Two-pass evaluation using local models:
- Analysis pass: detect structure, steps, logical gaps
- Evaluation pass: follow-up questions + final assessment
The pipeline includes validation hooks and recovery logic for malformed output.
zOS attempts to extract stable structured data from unstable LLM output using:
- truncation detection
- strict + lenient JSON parsing heuristics
- sanitization and partial-repair rules
- DeepSeek → Qwen regeneration chains
- fallback routing for repeated failures
These components form the backbone of the zOS reasoning runtime.
A small routing layer dispatches tasks to the appropriate local model:
| Task Type | Default Model |
|---|---|
| Proof Analysis | deepseek-r1:7b |
| Problem Gen | qwen2.5:7b-math |
| General / Fallback | qwen2.5:7b-instruct |
The router includes:
- circuit breaker
- exponential backoff
- automatic fallback selection
In addition to the agent runtime, zOS tracks:
- a 10-dimensional skill vector (
[0.0, 1.0]per domain) - session history + deltas
- per-domain trends
- simple daily plan heuristics
- static + auto-generated problem pools
These systems exist to support long-term reasoning practice.
- Suggests problems based on weakest skills
- Accepts free-form solutions/proofs
- Runs the analysis → evaluation pipeline
- Adjusts skills based on detected issues
- Uses LLM-generated or static problems
- Browse problems by domain (ML Theory, RL, Algorithms, Debugging, Proof Strategy, etc.)
- Filters static problems from
problems/
- Current skill levels
- Daily plan (weakest skills + negative trends)
- Ability to reset all user data
- Per-session logs
- Skill trajectories
- Session counts & difficulty trends
- Static SVG analysis charts
- Task router w/ fallback, backoff, and circuit breaking
- Proof pipeline (analysis + evaluation passes)
- Structured output extraction & repair logic
- Problem generation with JSON validation
- Session + skill store (persisted in app data)
- Daily plan heuristic
- Central
AppStatefor caches and paths
- Tauri-routed SvelteKit SPA
- Dark-mode responsive UI
- History, analytics, and session views
- SVG-based charts
Default configuration:
deepseek-r1:7b— proof/solution analysis and evaluationqwen2-math:7b— math/technical problem generation (experimental)qwen2.5:7b-instruct— general or fallback tasks
Models are configurable via models.toml in the app data directory.
The 10-dimensional skill vector tracks:
- RL Theory
- ML Theory
- AI Research
- Coding Debugging
- Algorithms
- Production Engineering
- Analysis & Math
- Putnam/Competition
- Proof Strategy
- Logical Reasoning
- Rust (stable)
- Node.js 18+
- pnpm
- Ollama with required models pulled and available
Suggested setup on macOS:
-
Install Ollama:
brew install ollama -
Pull models:
ollama pull deepseek-r1:7bollama pull qwen2-math:7bollama pull qwen2.5:7b-instruct
-
Start Ollama:
ollama serve
- Clone the repository:
git clone <repository-url> - Enter the project directory:
cd personal-os - Install dependencies:
pnpm install - Start Ollama if needed:
ollama serve
Run in development mode:
pnpm tauri dev
This starts the Svelte dev server, builds and runs the Tauri app, and enables hot reload for frontend and backend.
Build a production bundle:
pnpm tauri build
The built application will be under src-tauri/target/release/bundle/.
Run tests:
- Rust tests:
cd src-tauri && cargo test - TypeScript/Svelte checks:
pnpm check
Models are configured via models.toml in the platform-specific app data directory:
- macOS:
~/Library/Application Support/com.zacnwo.zos/models.toml - Windows:
%APPDATA%/com.zacnwo.zos/models.toml - Linux:
~/.local/share/com.zacnwo.zos/models.toml
Default values:
proof_model = "deepseek-r1:7b"problem_model = "qwen2-math:7b"general_model = "qwen2.5:7b-instruct"
If the file does not exist, defaults are used.
-
ZOS_USE_STATIC_EXAMPLES=true- Enables static problems in Solve mode
- Without this, Solve mode prefers LLM-based generation, which is experimental and may fail
- Learn mode always shows static problems regardless
The app expects Ollama at http://localhost:11434 with the configured models available.
personal-os/
-
src/Svelte frontend-
routes/+page.svelteHome pagesolve/Problem solving UIlearn/Topic browsingimprove/Skills and daily planhistory/Sessions and analytics
-
-
src-tauri/Rust backendproblems/problem loading, selection, generation, cacheskills/skill vector and persistent storesessions/session records and historybrain/daily plan logic and persistenceanalytics/metrics computationpipelines/router, proof pipeline, Ollama client, JSON extractionmodels/model wrappers and registrystate/app-level state and cachesconfig/model config loader
-
problems/static JSON problem files -
package.json
User data is stored in platform-specific application data directories:
- macOS:
~/Library/Application Support/com.zacnwo.zos/ - Linux:
~/.local/share/com.zacnwo.zos/ - Windows:
%APPDATA%/com.zacnwo.zos/
Example:
proof_model = "deepseek-r1:7b"
problem_model = "qwen2.5:7b-math"
general_model = "qwen2.5:7b-instruct"ZOS_USE_STATIC_EXAMPLES=true — bypass LLM problem generation
Ollama endpoint: http://localhost:11434
Stored under the platform’s app data directory:
skills.json— skill vectordata/sessions/*.json— session logsdata/daily_plan.jsonproblems_cache.jsonmodels.tomlproblems/autogen/*.json
- Try cache
- Try daily plan
- Try LLM generation (default)
- Fallback to static problems if enabled
- User submits solution
- Analysis pass (structure, gaps)
- Evaluation pass (follow-ups + verdict)
- Skill updates applied
- Generated automatically every 24 hours
- Targets weakest or regressing skills
- Skill trajectories
- Session trends
- Difficulty over time
- LLM problem generation frequently fails due to JSON instability
- Static fallback recommended for reliable use
- Reasoning quality varies with local models and hardware
- No background prefetch worker yet
- Skill model is simplistic
- Start Ollama
- Launch zOS
- Select Solve, Learn, Improve, or History
- Submit proofs/solutions and iterate through feedback loops
- Review analytics over time
MIT
Tauri, SvelteKit, Ollama, DeepSeek-R1, Qwen Math, Qwen Instruct