locate-on-windows
Geolocate the current Windows machine using the native WinRT Location API (PowerShell 5.1). No external API keys, no browser, no dependencies — uses Windows.Devices.Geolocation directly. Trigger when user asks to locate themselves, find their position, or for device-based geolocation (as opposed to IP-based geolocation). Outputs latitude, longitude, and accuracy in meters.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/cute-omega/locate-on-windowsLocate your position on modern Windows
Locate the Windows machine using the built-in WinRT Windows.Devices.Geolocation API.
Usage
Save the script below as geolocate.ps1 and run:
powershell.exe -ExecutionPolicy Bypass -File geolocate.ps1
Returns JSON:
{
"error": false,
"message": "ok",
"latitude": 35.6762,
"longitude": 139.6503,
"accuracy_m": 1500,
"timestamp": "2026-01-01T08:00:00.0000000+09:00"
}
Script
# geolocate.ps1 — Windows Geolocation via WinRT (PowerShell 5.1 only)
Add-Type -AssemblyName "System.Runtime.WindowsRuntime"
[Windows.Devices.Geolocation.Geolocator, Windows.Devices.Geolocation, ContentType=WindowsRuntime] | Out-Null
try {
$geo = New-Object Windows.Devices.Geolocation.Geolocator
$geo.DesiredAccuracy = [Windows.Devices.Geolocation.PositionAccuracy]::Default
$geo.DesiredAccuracyInMeters = 100
$asyncOp = $geo.GetGeopositionAsync()
$asTask = [System.WindowsRuntimeSystemExtensions].GetMethods() |
Where-Object {
$_.Name -eq 'AsTask' -and
$_.GetParameters().Count -eq 1 -and
$_.GetParameters()[0].ParameterType.IsGenericType -and
$_.GetParameters()[0].ParameterType.Name.StartsWith('IAsyncOperation')
} | Select-Object -First 1
if (-not $asTask) {
$output = [Ordered]@{
error = $true
message = "Cannot resolve AsTask<T> overload"
latitude = 0.0
longitude = 0.0
accuracy_m = 0
timestamp = [datetime]::Now.ToString("o")
}
Write-Output ($output | ConvertTo-Json)
exit 1
}
$genericMethod = $asTask.MakeGenericMethod([Windows.Devices.Geolocation.Geoposition])
$task = $genericMethod.Invoke($null, @($asyncOp))
$task.Wait()
$pos = $task.Result
$output = [Ordered]@{
error = $false
message = "ok"
latitude = [math]::Round($pos.Coordinate.Point.Position.Latitude, 6)
longitude = [math]::Round($pos.Coordinate.Point.Position.Longitude, 6)
accuracy_m = $pos.Coordinate.Accuracy
timestamp = $pos.Coordinate.Timestamp.ToString("o")
}
Write-Output ($output | ConvertTo-Json)
} catch {
$output = [Ordered]@{
error = $true
message = $_.Exception.Message
latitude = 0.0
longitude = 0.0
accuracy_m = 0
timestamp = [datetime]::Now.ToString("o")
}
Write-Output ($output | ConvertTo-Json)
exit 1
}
How It Works
- Loads
System.Runtime.WindowsRuntimefor WinRT type resolution. - Instantiates
Windows.Devices.Geolocation.Geolocator. - Calls
GetGeopositionAsync()— returnsIAsyncOperation<Geoposition>. - Converts to
Task<T>via reflection onSystem.WindowsRuntimeSystemExtensions.AsTask<T>. - Blocks with
.Wait()and outputs JSON.
The location source depends on hardware: GPS (if present), WiFi triangulation, or IP fallback. Typical WiFi accuracy is 1–3 km.
Requirements
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-cute-omega-locate-on-windows": {
"enabled": true,
"auto_update": true
}
}
}