Keyboard-first TUI + headless JSON Task Manager for Windows 11.
- Zero external deps — only Odin
core/base+ OS system DLLs - Low cost — ~1 Hz refresh by default, preallocated buffers, self-overhead shown
- JSON mode — scripts/agents can query and control without opening the TUI
GitHub: aquaticcalf/task
Download task-*-windows-x64.msi from Releases, run it (admin).
Installs to C:\Program Files\task and adds it to the system PATH.
msiexec /i task-0.1.0-windows-x64.msi
:: uninstall:
msiexec /x task-0.1.0-windows-x64.msiirm https://github.com/aquaticcalf/task/releases/latest/download/install.ps1 | iexInstalls to %LOCALAPPDATA%\Programs\task and updates user PATH.
Uninstall: download uninstall.ps1 from the same release, or delete that folder.
Unzip task-*-windows-x64.zip and put task.exe on your PATH.
After a release (manifest is attached as task.json):
scoop install https://github.com/aquaticcalf/task/releases/latest/download/task.jsonbuild.bat
:: or
odin build . -out:task.exe -o:speed -subsystem:consoleRequires Odin on PATH (Windows 10/11).
# zip + standalone exe
.\scripts\package-release.ps1 -Version 0.1.0
# also build MSI (needs .NET SDK + WiX tool)
.\scripts\package-release.ps1 -Version 0.1.0 -MsiArtifacts land in dist/.
| Kind | When | Tag | Notes |
|---|---|---|---|
| Beta (prerelease) | Every green push to master |
beta |
Rolling; MSI/zip named task-beta-* |
| Stable | You cut a version | vX.Y.Z (e.g. v0.1.1) |
Release workflow |
git tag v0.1.2
git push origin v0.1.2Or Actions → Release → Run workflow.
Push to master → CI job beta updates the rolling prerelease:
https://github.com/aquaticcalf/task/releases/tag/beta
PRs only build/test (no beta publish).
task| Key | Action |
|---|---|
1–7 |
Tabs: Processes, Performance, Details, Services, Startup, Users, App history |
↑ ↓ / j |
Move selection |
/ |
Filter (Esc cancel) |
k |
Kill process (confirm y) |
t |
Kill process tree |
e |
Efficiency mode (EcoQoS) |
o |
Open file location in Explorer |
s / r |
Cycle sort column / reverse |
p |
Pause refresh |
[ ] |
Slower / faster refresh |
Space |
Start/stop selected service |
d |
Disable selected startup entry |
F5 |
Force refresh |
q |
Quit |
task --json help
task --json summary --seconds 1
task --json processes --sort cpu --limit 20
task --json process --pid 1234
task --json performance --seconds 2
task --json services
task --json startup
task --json users
task --json kill --pid 1234
task --json kill --pid 1234 --tree
task --json priority --pid 1234 --class high
task --json efficiency --pid 1234 --enable true
task --json affinity --pid 1234 --mask 0xF
task --json service --name Spooler --action stop
task --json startup-disable --location HKCU\Run --name Foo
task --json open-location --pid 1234{"ok":false,"error":"..."}Use --seconds N (1–10) for multi-sample CPU % accuracy.
main.odin / collect_*.odin / tui / json_api
installer/Package.wxs MSI (WiX)
scripts/package-release.ps1
scripts/build-msi.ps1
scripts/install.ps1 per-user installer
scripts/uninstall.ps1
.github/workflows/ci.yml
.github/workflows/release.yml
| Area | Implementation |
|---|---|
| GPU % (system + per-process) | PDH \GPU Engine(*)\Utilization Percentage (same family Task Manager uses) |
| Disk % | PDH \PhysicalDisk(_Total)\% Disk Time (fallback: process IO sum) |
| Temperature | PDH \Thermal Zone Information(*)\Temperature + WMI MSAcpi_ThermalZoneTemperature |
| Fan | WMI Win32_Fan.DesiredSpeed when firmware exposes it |
| Per-process network | GetExtendedTcpTable / UDP + GetPerTcpConnectionEStats byte counters |
| App history | Session aggregate by image: lifetime CPU, TCP bytes, GPU Engine, memory |
| Protected processes | Enables SeDebugPrivilege when available; admin still required for some targets |
Values may still be n/a on hardware that does not publish ACPI/WMI sensors — that is a platform gap, not a missing code path.
MIT © aquaticcalf