Sotero

Install guide · Windows

Sotero Runtime Windows Installation and Developer Setup Guide

Install, verify, operate, integrate, upgrade, and remove Sotero Runtime 0.0.2 on Windows x86_64. The signed MSI securely generates the required 32-byte signing secret, creates the protected LocalSystem service configuration under ProgramData, and starts the registered service automatically. After installation, confirm service status, liveness, and readiness.

AudienceDevelopers, technical evaluators, and client administrators
Packagesotero-runtime-0.0.2-windows-x86_64.msi
Supported systemsWindows 10/11 and Windows Server 2019+, x86_64
Default transportLocal TCP loopback at http://127.0.0.1:5100
Administrator rule. Launch the interactive MSI from File Explorer or a regular PowerShell window; Windows Installer requests UAC elevation when needed. Use an Administrator PowerShell window only for service lifecycle changes or advanced troubleshooting. The MSI creates and protects the service configuration under C:\ProgramData automatically.

Before you begin

What the installer adds

The MSI installs a self-contained daemon, developer resources, a machine PATH entry, and the native SoteroDaemon Windows Service. On a fresh installation, it securely generates the required 32-byte signing secret inside sotero-daemon, writes the protected service configuration under C:\ProgramData\Sotero, registers the service for automatic startup, and starts it. The service runs as LocalSystem with a service-scoped USERPROFILE that points to C:\ProgramData\Sotero.

ComponentInstalled location or identity
Daemon commandC:\Program Files\Sotero Runtime\sotero-daemon.exe
Shared filesC:\Program Files\Sotero Runtime
Windows ServiceSoteroDaemon, automatic start, LocalSystem
Service configurationC:\ProgramData\Sotero\.sotero\sotero.toml
Service runtime stateC:\ProgramData\Sotero\.sotero
Default endpointhttp://127.0.0.1:5100

Requirements

  • Windows 10 or 11, or Windows Server 2019 or later, on an x86_64 operating system.
  • A Windows account that can approve a User Account Control elevation prompt.
  • Administrator access to approve the installer UAC prompt and perform service lifecycle commands.
  • The official MSI and, when supplied, its matching SHA-256 checksum sidecar.
  • Local access to TCP port 5100. The default listener is loopback-only and is not exposed to the network.
[Environment]::Is64BitOperatingSystem
[Environment]::OSVersion.Version
$PSVersionTable.PSVersion

Download Sotero Runtime

  1. Open the Download link from the site navigation and sign in with Google, Microsoft, or your Sotero email and password.
  2. Review and accept the required End User License Agreement. Separate marketing consent is optional.
  3. Choose Windows x86_64 and download sotero-runtime-0.0.2-windows-x86_64.msi and its checksum when available.

Verify the Windows package

Verify the MSI before opening it. Continue only when Authenticode status is Valid and the SHA-256 value matches the value distributed through a trusted Sotero channel. A valid signature should identify Sotero Inc. as the signer.
cd $env:USERPROFILE\Downloads
$msi = ".\sotero-runtime-0.0.2-windows-x86_64.msi"

Get-FileHash -Algorithm SHA256 $msi
Get-AuthenticodeSignature $msi |
    Format-List Status, StatusMessage, SignerCertificate

If no checksum sidecar was supplied, obtain the expected SHA-256 value from your release administrator. Do not disable SmartScreen or signature checking to install a package whose origin cannot be verified.

Install with Windows Installer

Use this method for a normal interactive installation. A regular File Explorer or PowerShell session is sufficient to launch the MSI; Windows Installer requests administrator approval through UAC when it performs per-machine changes.

  1. Open Downloads in File Explorer and double-click the verified MSI.
  2. Approve the User Account Control prompt. If you cannot approve it, ask a Windows administrator to install the package.
  3. Review the installation screen and continue with the default destination under Program Files.
  4. Wait for the successful completion message, then close the installer. The MSI creates the service configuration and starts SoteroDaemon automatically.
  5. Open a new PowerShell window so the updated machine PATH is visible.
No separate Configure the Windows service or Start-Service step is required after a successful install. Continue directly to verification. The generated signing secret is never displayed and is not passed through the MSI command line or written to the MSI log.

How service configuration is handled

The service does not use C:\Users\<you>\.sotero. It runs as LocalSystem with USERPROFILE=C:\ProgramData\Sotero, so its authoritative configuration is C:\ProgramData\Sotero\.sotero\sotero.toml. The MSI creates this configuration on a fresh installation and restricts access to SYSTEM and Administrators.

The generated signing secret encrypts the persisted JWT signing key and authenticates Control API operations. Do not print, copy, attach, or replace it. The MSI preserves an existing ProgramData configuration during reinstall and upgrade so encrypted state remains usable. Organizations that require a centrally managed secret should pre-provision a protected configuration before installation; the MSI preserves it instead of generating a replacement.

Verify the background service

The installer has already started the service. Wait briefly, then confirm Windows Service Control Manager reports Running and verify both liveness and readiness. Readiness checks the registry, catalog, signing store, replay store, and Control authentication — not only whether a process exists.

Start-Sleep -Seconds 8

Get-Service SoteroDaemon
& "C:\Program Files\Sotero Runtime\sotero-daemon.exe" service status
Invoke-RestMethod "http://127.0.0.1:5100/healthz"
Invoke-RestMethod "http://127.0.0.1:5100/readyz"

Verify the service profile registration

reg.exe query `
    "HKLM\SYSTEM\CurrentControlSet\Services\SoteroDaemon" `
    /v Environment

# Expected value:
# USERPROFILE=C:\ProgramData\Sotero

Verify restart behavior

Restart-Service SoteroDaemon
Start-Sleep -Seconds 8
& "C:\Program Files\Sotero Runtime\sotero-daemon.exe" service status

Service lifecycle commands

TaskAdministrator PowerShell command
Show status and health& "C:\Program Files\Sotero Runtime\sotero-daemon.exe" service status
StartStart-Service SoteroDaemon
RestartRestart-Service SoteroDaemon
StopStop-Service SoteroDaemon
Query SCM directlysc.exe query SoteroDaemon
Open Services consoleservices.msc

Status and HTTP health checks can be performed from a regular PowerShell window. Start, stop, restart, registration changes, and ProgramData writes require Administrator PowerShell.

Use Sotero Runtime as a developer

Connect through local TCP

Windows uses TCP loopback at 127.0.0.1:5100. The default bind is local to the machine. Copy the packaged thin client into an importable location in your Python project.

Copy-Item "C:\Program Files\Sotero Runtime\thin-client.py" `
    ".\sotero_thin_client.py"
python -m pip install "httpx>=0.27" "PyJWT[crypto]>=2.8" "cryptography>=42"
from sotero_thin_client import ThinClientRuntime

runtime = ThinClientRuntime()
runtime.onboard(daemon_url="http://127.0.0.1:5100")

When Control API authentication is required, provide the secret through your application's approved secret-management mechanism. Do not hard-code it.

Install the bundled Claude Code skills

& "C:\Program Files\Sotero Runtime\sotero-daemon.exe" install-skills
# Default destination: %USERPROFILE%\.claude\skills

Run skill installation as your normal user, not as Administrator, so the files are placed in your own profile. Restart Claude Code if it was already running.

Useful operator commands

PurposeCommand
List registered agentssotero-daemon.exe agent list
Show recent service audit eventsUse the service-profile command in Logs and troubleshooting
Validate service configurationsotero-daemon.exe --config "C:\ProgramData\Sotero\.sotero\sotero.toml" config validate
Show status and healthsotero-daemon.exe service status
Open developer dashboardsotero-daemon.exe show dashboard

Configuration and file reference

ItemService path or behavior
ConfigurationC:\ProgramData\Sotero\.sotero\sotero.toml
Agent registry and SQLite security storeC:\ProgramData\Sotero\.sotero\registry.db
Signing and JWT keystoreC:\ProgramData\Sotero\.sotero\keys.db
Audit logC:\ProgramData\Sotero\.sotero\audit.jsonl
Default editable policyC:\ProgramData\Sotero\.sotero\examples\policy.rego
Service environmentHKLM\SYSTEM\CurrentControlSet\Services\SoteroDaemon\Environment
ExecutableC:\Program Files\Sotero Runtime\sotero-daemon.exe
Health endpointshttp://127.0.0.1:5100/healthz and /readyz

When changes take effect

  • Changes to sotero.toml require Restart-Service SoteroDaemon.
  • The configured agents file and Rego policy file are watched and hot-reloaded.
  • When sotero.toml and a matching environment variable both contain a value, the file value wins.
  • Variables exported in your own PowerShell session are not inherited by LocalSystem.
  • Keep signing_key_secret stable while encrypted state exists. Restore the original secret rather than replacing it on a production instance.

Logs and troubleshooting

Audit events and startup diagnostics

The logs command reads audit decisions, not service startup stderr. Windows SCM does not capture the daemon's console output in a normal text file. To read the service audit log with the CLI, temporarily use the service's USERPROFILE in the current Administrator PowerShell process.

$originalUserProfile = $env:USERPROFILE
$env:USERPROFILE = "C:\ProgramData\Sotero"
try {
    & "C:\Program Files\Sotero Runtime\sotero-daemon.exe" `
        --config "C:\ProgramData\Sotero\.sotero\sotero.toml" `
        logs --last 100
} finally {
    $env:USERPROFILE = $originalUserProfile
}

For a service that starts and immediately stops, obtain debug-windows-service.ps1 from Sotero support or the source operations bundle. It captures a ProgramData-profile foreground reproduction, service state, health checks, executable signature, and relevant Windows events without copying configuration contents or secret values.

Set-ExecutionPolicy -Scope Process Bypass
cd C:\path\to\diagnostic-script
.\debug-windows-service.ps1

# The timestamped folder and ZIP are created beside the script.

Common symptoms

SymptomAction
Command is not recognizedOpen a new PowerShell window or run the full path under C:\Program Files\Sotero Runtime.
Configuration is incompleteEdit the ProgramData sotero.toml, then validate it with an explicit --config path.
Unable to decrypt Control signing keyRestore the original signing_key_secret. For a disposable test instance only, use the reset procedure below.
Supervisor stopped and health unreachableRun the diagnostic collector and inspect foreground-stderr.log and Windows events.
Health succeeds but readiness failsInspect the named false check in /readyz before treating the service as deployable.
Interactive behavior differs from serviceThe two processes use different USERPROFILE values. Test with C:\ProgramData\Sotero for service parity.

Reset disposable test state

Irreversible for service state. This deletes cached agents, keys, credentials, and audit history. Use it only for a disposable test installation; production recovery should restore the original secret or a backup.
Stop-Service SoteroDaemon -ErrorAction SilentlyContinue
$originalUserProfile = $env:USERPROFILE
$env:USERPROFILE = "C:\ProgramData\Sotero"
try {
    & "C:\Program Files\Sotero Runtime\sotero-daemon.exe" `
        --config "C:\ProgramData\Sotero\.sotero\sotero.toml" `
        reset-access --yes
} finally {
    $env:USERPROFILE = $originalUserProfile
}

Upgrade or replace Sotero Runtime

Upgrade to a newer version

  1. Back up C:\ProgramData\Sotero\.sotero, especially sotero.toml, registry.db, keys.db, and audit.jsonl.
  2. Download and verify the newer signed MSI and checksum.
  3. Install the newer version interactively or with Administrator PowerShell. The MSI stops the old service, replaces product files, preserves ProgramData state, and starts the updated service.
  4. Repeat the service-status, liveness, readiness, and restart checks.

Replace a rebuilt MSI with the same version

A rebuilt 0.0.2 MSI may have different contents but the same ProductVersion. Windows Installer does not reliably treat it as an upgrade. Uninstall the registered 0.0.2 product first, then install the rebuilt package. ProgramData state is preserved.

Stop-Service SoteroDaemon -Force -ErrorAction SilentlyContinue
Get-Process sotero-daemon -ErrorAction SilentlyContinue | Stop-Process -Force

$roots = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
$product = Get-ItemProperty $roots -ErrorAction SilentlyContinue |
    Where-Object { $_.DisplayName -eq "Sotero Runtime" } |
    Select-Object -First 1

if ($product) {
    $remove = Start-Process msiexec.exe `
        -ArgumentList @("/x", $product.PSChildName, "/passive", "/norestart") `
        -Wait -PassThru
    $remove.ExitCode
}

After removal, install the rebuilt MSI with the earlier PowerShell procedure. Accept only exit code 0 or 3010, then repeat service-status, health, readiness, and restart verification. The preserved ProgramData configuration is reused automatically.

Uninstall Sotero Runtime

Standard uninstall

The standard uninstall removes installed product files and the SoteroDaemon service registration. It deliberately preserves C:\ProgramData\Sotero\.sotero so a future installation can resume with the same configuration and encrypted state.

  1. Open Settings, choose Apps, then Installed apps.
  2. Find Sotero Runtime and choose Uninstall.
  3. Approve the UAC prompt and wait for removal to finish.

PowerShell uninstall with a verbose log

$roots = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
$product = Get-ItemProperty $roots -ErrorAction SilentlyContinue |
    Where-Object { $_.DisplayName -eq "Sotero Runtime" } |
    Select-Object -First 1

if ($product) {
    $log = "$env:USERPROFILE\Desktop\sotero-uninstall.log"
    $remove = Start-Process msiexec.exe `
        -ArgumentList @(
            "/x", $product.PSChildName, "/passive", "/norestart",
            "/L*v", "`"$log`""
        ) -Wait -PassThru
    $remove.ExitCode
}

Verify removal

Test-Path "C:\Program Files\Sotero Runtime\sotero-daemon.exe"
Get-Service SoteroDaemon -ErrorAction SilentlyContinue

# Expected: False, followed by no service result.

Optionally remove all service data

Irreversible. Removing ProgramData deletes configuration, signing keys, registered agents, policies, security state, and audit history. Back it up first and retain the backup according to your organization's security policy.
Copy-Item -Recurse "C:\ProgramData\Sotero\.sotero" `
    "$env:USERPROFILE\Desktop\sotero-state-backup"

# Run only after verifying the backup and approving permanent deletion:
Remove-Item -Recurse -Force "C:\ProgramData\Sotero"

Quick reference

GoalCommand
Validate service configsotero-daemon.exe --config "C:\ProgramData\Sotero\.sotero\sotero.toml" config validate
StartStart-Service SoteroDaemon
RestartRestart-Service SoteroDaemon
StopStop-Service SoteroDaemon
Check status and healthsotero-daemon.exe service status
Check livenessInvoke-RestMethod "http://127.0.0.1:5100/healthz"
Check readinessInvoke-RestMethod "http://127.0.0.1:5100/readyz"
Collect diagnostics.\debug-windows-service.ps1
Interactive uninstallSettings > Apps > Installed apps > Sotero Runtime > Uninstall

Expected steady state: SoteroDaemon is Running, the CLI reports supervisor RUNNING and health healthy, /healthz reports ok, and every /readyz check is true.

Ready to install?

Download the Sotero Runtime MSI from the site navigation, then follow this guide.