observeLABSCO SUMMARY
Your agent can see inside a process that is still running.
It replaces the print-rebuild-redeploy loop with a question: the agent finds the line, plants an observation point, and reads the values back live — which is what makes an intermittent bug in a container investigable at all.
What it is
A daemon that sits between your agent and a live process and sets logpoints — breakpoints that evaluate an expression and log the result instead of stopping execution. Underneath it drives the Debug Adapter Protocol, or eBPF uprobes on Linux for Go and Rust binaries. Your application keeps running at full speed while values are captured and stored.
What you get
- 29 MCP tools for observing a line, querying what was captured, enabling and disabling observation groups, and cleaning up afterwards
add_metricto start watching, andfind_variableto locate the variable in the running process when you cannot give a line number- Capture modes that keep the volume down: stream, sample, throttle, first-hit, and periodic sampling every N seconds
- Multiple variables per observation point, plus stack traces, memory snapshots and expression evaluation
- Events stored in SQLite on the daemon host, so you can leave it running overnight and ask in the morning what happened
- Python through debugpy, Go through delve, Rust through lldb-dap, with Go on Linux using eBPF automatically
Requirements
Install with Homebrew, the shell installer, or PowerShell on Windows; the daemon runs locally or alongside your service in a container, and detrix mcp is the stdio bridge your client launches. Nothing needs to change in your code to start, though embedding detrix.init() once — the clients are on PyPI, Go modules and crates.io — means you never restart again; otherwise one restart attaches the debugger. For cloud and container work set DETRIX_ADVERTISE_URL so the bridge knows where the daemon is, and DETRIX_TOKEN on both daemon and client for multi-tenant deployments. Variables whose names look sensitive — password, api_key, token, secret, private_key — are blocked before capture, with the blacklist and whitelist configurable in detrix.toml, and a per-connection safe mode restricts a session to variable watching only. Building from source needs Rust 1.80+.
Setup effort
One command — brew install flashus/tap/detrix
USE CASES
Chasing a bug you cannot reproduce locally
Point the agent at the running service, have it plant observation points on the suspect path, and read the real values the next time the condition occurs.
Investigating a container without getting inside it
The daemon runs alongside the service and fetches source files itself, so the agent can suggest correct lines without the code being on your machine.
Watching a hot path without drowning in output
Use throttle, sample or first-hit capture so a line that runs thousands of times still yields a readable record.
Finding out what happened overnight
Leave the daemon collecting into SQLite on a remote host, then query the stored events by metric and time when you come back.
Observing without the line number
Describe the behaviour instead — the variable is located in the running process rather than by you reading the file.
Keeping secrets out of the capture
Sensitive-looking names are refused by default, and detrix.toml lets you extend the blocklist before pointing an agent at production.
29 tools
Listed in project docs. Your client may show a different list.
enable_from_diffadd_metriclist_metricsget_metricupdate_metricremove_metrictoggle_metriclist_groupsenable_groupdisable_groupquery_metricsquery_system_eventsacknowledge_eventscreate_connectionlist_connectionsget_connectionclose_connectionvalidate_expressioninspect_fileget_configupdate_configvalidate_configreload_configget_statusget_mcp_usagedisconnect_allwakesleepBEFORE YOU INSTALL
What to know first
Tools you get
29 tools named in the project's documentation.
Requires
- detrix on PATH
- Docker
Where it runs
All 3 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
brew install flashus/tap/detrixMCP Clients
Claude Code
claude mcp add --scope user detrix -- detrix mcpCursor, Windsurf
{
"mcpServers": {
"detrix": {
"command": "detrix",
"args": [
"mcp"
]
}
}
}