axon-daemon detects it, classifies its runtime, selects the matching probe, attaches to the live process, and begins emitting structured SubstrateState JSON within seconds.
What a Probe Does
Every probe performs the same three jobs, regardless of the underlying runtime:- Connect — Establishes a channel into the live process (CDP WebSocket, JVMTI agent socket, MMF bridge, or
ptrace/ReadProcessMemoryhandle). - Extract — Reads the application’s in-memory data model and converts raw runtime objects into dot-notation key-value pairs.
- Normalize — Applies semantic labels (field names, object types, action signatures) and writes the result as a
SubstrateStateobject with aconfidencescore.
The Four Probe Types
V8 / JavaScript
Connects via the Chrome DevTools Protocol (CDP). Uses the ASO fast-path (~5–50ms) or heap snapshot fallback (~47s). Covers Gmail, Slack, VS Code, Notion, Discord, and any Electron app. Accuracy >99%.
JVM / Java
Attaches a native JVMTI agent via the JVM Attach API and uses JNI reflection to read fields and invoke methods. Covers SAP ERP, IntelliJ IDEA, Jenkins, and Elasticsearch. Accuracy >97%.
CLR / .NET
Injects a managed C# bootstrapper via the Windows CLR Hosting API and communicates over a Memory-Mapped File bridge. Covers Mission Planner, WinForms, WPF, and Microsoft Office. Accuracy >97%.
Native / C++
Reads process memory via
ptrace (Linux) or ReadProcessMemory (Windows) and applies Visual-Memory Grounding for semantic labeling. Covers Bloomberg Terminal, Photoshop, and AutoCAD. Accuracy ~75%.Probe Comparison
App Lifecycle
Every tracked application follows the same deterministic lifecycle from first detection to steady-state fast polling.1
Process detection
axon-daemon continuously scans all running OS processes and registers any new PID, executable name, and command-line arguments.2
Runtime classification
The daemon inspects the process to determine whether it is running a V8 engine, a JVM, a CLR, or native code, and selects the appropriate probe.
3
App identity assignment
The classified process is matched against the app signature database. A matching entry assigns a stable
app_id (e.g. gmail-chrome-12847) and human-readable app_name that survive process restarts.4
Probe attachment
The appropriate probe connects to the target runtime. This is the cold probe phase — the first full state extraction and schema discovery. Duration is 3–90 seconds depending on runtime and app size.
5
First SubstrateState cached
Once
confidence reaches 0.80 or above, the first SubstrateState is written to the in-memory cache and made available via the REST API.6
Fast poll loop begins
The probe enters its optimized fast-path poll loop. By default, state refreshes every 2 seconds at ~50ms per cycle. Any state change triggers a WebSocket event broadcast to all subscribers.
When the tracked application exits, the probe detaches automatically, the state is removed from cache, and the
probe_status transitions to detached. No manual cleanup is required.Probe Status Values
Theprobe_status field in AppSummary reflects the current lifecycle phase:
Confidence Score by Runtime
Each probe produces aconfidence score (0.0–1.0) reflecting how completely its semantic labeling covers the application’s state. Confidence determines which action tiers are unlocked.
Forcing a Fresh State Read
By default, state is served from the 2-second rolling cache. To bypass the cache and trigger an immediate probe cycle:- HTTP
- Python SDK
