This is the practical Adit setup flow for v1.
The supported path is:
- Install
Phone Linkon Windows. - Follow the
Link to Windowsinstructions on the iPhone. - Accept every iPhone permission prompt that
Link to Windowsrequests during first setup. - Wait for that first
Link to Windowspairing to finish insidePhone Link. - Build
Adit. - Run the daemon.
- Use
doctoranddevicesbefore debugging anything deeper.
Do not skip ahead and start Adit while the initial Phone Link or Link to Windows flow is still mid-bootstrap. The daemon expects that first pairing to exist already and then adopts the resulting runtime state.
dotnet build Adit.slnAdit now auto-discovers the installed Phone Link package during build. If that fails, or dotnet run re-enters restore/build and cannot resolve the same internals, set the install dir manually:
$env:PhoneLinkInstallDir = (Get-AppxPackage Microsoft.YourPhone).InstallLocation
dotnet build Adit.slncd web
npm install
npm run build
cd ..
dotnet run --project src\Adit.Daemon -- serveThe daemon listens on http://127.0.0.1:5037 by default.
These are the first commands to run when something feels off:
dotnet run --project src\Adit.Daemon -- help
dotnet run --project src\Adit.Daemon -- devices
dotnet run --project src\Adit.Daemon -- doctorWhat they tell you:
devices: what Windows currently exposes for the classic MAP/PBAP target and the LE ANCS targetdoctor: whether core messaging, contacts, and notifications are actually readyhelp: the supported daemon operator commands
Invoke-RestMethod http://127.0.0.1:5037/v1/info
Invoke-RestMethod http://127.0.0.1:5037/v1/runtime
Invoke-RestMethod http://127.0.0.1:5037/v1/capabilities
Invoke-RestMethod http://127.0.0.1:5037/v1/doctor
Invoke-RestMethod http://127.0.0.1:5037/v1/setup/guide
Invoke-RestMethod -Method Post http://127.0.0.1:5037/v1/setup/check
Invoke-RestMethod -Method Post http://127.0.0.1:5037/v1/notifications/check
Invoke-RestMethod http://127.0.0.1:5037/v1/thread-chooser/status/v1/thread-chooser/status always returns a snapshot, but it will report disabled unless ADIT_ENABLE_LEARNED_THREAD_CHOOSER=true and the sidecar assets are present.
Cause:
Phone Linkis not installed- Windows cannot resolve the package install location
Fix:
Get-AppxPackage Microsoft.YourPhone
$env:PhoneLinkInstallDir = (Get-AppxPackage Microsoft.YourPhone).InstallLocation
dotnet build Adit.slnCause:
Phone Linkauto-discovery did not resolve a usable install path during restore/build
Fix:
$env:PhoneLinkInstallDir = (Get-AppxPackage Microsoft.YourPhone).InstallLocation
dotnet build Adit.sln
dotnet run --project src\Adit.Daemon -- serveCause:
- the iPhone is not paired
- Windows is not exposing the classic Bluetooth endpoint yet
Fix:
- Re-open
Phone Linkand confirm the LTW pairing is still live. - Keep the iPhone nearby and unlocked.
- Run
devicesagain and look for a paired classic endpoint for the iPhone.
Cause:
- the classic target exists, but the LE ANCS side is missing or stale
Fix:
Invoke-RestMethod -Method Post http://127.0.0.1:5037/v1/notifications/check
Invoke-RestMethod -Method Post http://127.0.0.1:5037/v1/notifications/enableThe legacy /v1/bootstrap/notifications/check|enable|disable routes still exist as compatibility aliases for older tooling, but /v1/notifications/* is the primary surface.
If it still does not come up:
- Toggle Bluetooth off and back on, on both the Windows PC and the iPhone. This resets the LE connection state and often clears stale ANCS sessions.
- Keep the phone unlocked.
- Make sure LTW pairing still exists.
- Run
devicesand confirm a paired LE endpoint shows up for the same container.
Symptom:
- sends or pulls fail until
Phone Linkbacks off
Fix:
Aditalready defaultsAutoEvictPhoneLink=true- if needed, close or reopen
Phone Link, then force a sync:
Invoke-RestMethod -Method Post http://127.0.0.1:5037/v1/sync/nowCause:
- wrong URL
- daemon not actually running
- build output is stale
Fix:
- hit
http://127.0.0.1:5037/v1/infodirectly - rerun
doctor - rebuild the UI and restart the daemon
dotnet run --project src\Adit.Daemon -- serve
dotnet run --project src\Adit.Daemon -- doctor
dotnet run --project src\Adit.Daemon -- devices
dotnet run --project src\Adit.Daemon -- info
dotnet run --project src\Adit.Daemon -- status
dotnet run --project src\Adit.Daemon -- runtime
dotnet run --project src\Adit.Daemon -- capabilities
dotnet run --project src\Adit.Daemon -- sync
dotnet run --project src\Adit.Daemon -- notifications-check
dotnet run --project src\Adit.Daemon -- notifications-enable
dotnet run --project src\Adit.Daemon -- notifications-disableThe v1 product posture keeps Link to Windows as the supported setup path. Native daemon pairing routes are available only for lab work when you start the daemon with:
$env:ADIT_ENABLE_EXPERIMENTAL_PAIRING_API = "true"
dotnet run --project src\Adit.Daemon -- serveThat enables:
GET /v1/pairing/candidatesPOST /v1/pairing/pairPOST /v1/pairing/unpair