Personalized medicine for your PC. Not a preset.
NVPilot reads your specific hardware, figures out what is actually holding your system back, and changes only the settings that are costing you performance on your GPU — preserving everything else at full quality. Every change is journaled with its inverse, so all of it is reversible.
TypeScript · nvidia-smi · local LLM optional (Ollama) · always reversible
Perceive → plan → act → reflect, for the app you're actually using
In watch mode, NVPilot runs this cycle in real time: it detects the foreground app, optimizes for it, and reverts everything when you switch away or quit.
Reads GPU telemetry via nvidia-smi, classifies your GPU tier, and captures game settings, power state, and background processes.
src/drivers/A local Ollama model proposes a plan as structured JSON — or the built-in rule engine decides, so it always works without an LLM.
src/planners/Every action is validated and clamped in code, then applied — with its inverse written to the journal before the next action runs.
src/core/executor.tsRe-perceives the system and verifies each change actually landed, reporting setting-by-setting what changed and what didn't.
src/core/agent.tsThe full system, reasoned about together
Background apps, process priority, power plans, and game configs are planned as one problem — not tuned in isolation.
| Layer | What it reads | What it changes |
|---|---|---|
| GPU | Utilization, VRAM, temperature, power draw (nvidia-smi) | Nothing — telemetry only |
| Game | Current graphics settings, with tier-relative guidance | Render distance, shadows, clouds, mipmaps, particles (Minecraft; registry ready for more games) |
| System | Running processes and memory usage | Process priority; optional background-app cleanup (opt-in via --allow-close) |
| Power | Active power plan or profile | Switches to a performance plan (powercfg on Windows; powerprofilesctl / cpufreq on Linux) |
Built to be trusted with your machine
Every change carries its inverse
Each mutation is recorded in a journal (~/.nvpilot/journal.json)
together with its inverse before the next action runs. npm run restore,
Ctrl+C in watch mode, or switching apps replays the inverses.
Game configs are additionally backed up before the first write. The one exception is closing background apps — which is exactly why it's off by default.
The LLM plans. The code decides.
The perceived state goes to a local Ollama model, which proposes actions as structured JSON. Every action is validated and clamped in code: unknown settings rejected, values clamped to legal ranges, protected processes always refused.
If Ollama is unreachable or its output fails validation, NVPilot falls back to the deterministic rule engine — the tool always works without an LLM.
Analyze first. Nothing changes until you say so.
Needs Node.js 18+, an NVIDIA GPU with drivers (nvidia-smi on PATH),
and Windows 10/11 or Linux. Ollama is optional.
git clone https://github.com/Kurisuo/NVPilot.git cd NVPilot npm install npm run analyze # read system state, print recommendations, change nothing npm run apply # apply recommended optimizations once (journaled, reversible) npm run watch # real-time agent: watch the foreground app, optimize for it npm run restore # revert every change NVPilot has made # optional, for the LLM planner: ollama pull nemotron-mini
--no-llmSkip Ollama and use the deterministic rule engine.--allow-closePermit closing background apps from the safe-to-close allowlist — off by default, because closing is the one action that can't be auto-reverted.--interval <ms>Foreground poll interval in watch mode (default 2000).Drive it from another agent
NVPilot exposes its capabilities as JSON-schema tool definitions
(--tools-json) so an external agent runtime like
NemoClaw or OpenClaw can call them. External tool calls pass through the same
validation and journal as NVPilot's own planners — equally constrained,
equally reversible.
npx ts-node src/index.ts --tools-json # emit tool definitions for an agent runtime