AI agents ExeWatchMCP: your AI agent reads production and fixes the code

Stop Guessing.
Start Knowing.

Real-time monitoring and AI anomaly detection for your Delphi, C++Builder, C/C++, .NET/C#, JavaScript and Python apps. Know what went wrong before your customers complain.

  • Free tier available
  • No credit card required
  • 5-minute integration
illustrative
$ pip install ExeWatchMCP$ claude mcp add exewatch --env EXEWATCH_API_KEY=ew_api_... -- exewatch-mcp > Fix the errors of the last week. Reading ExeWatch: 3 problems, ranked by customers affected 1  EAccessViolation  TMainForm.FormDestroy   crash when the app closes, every run2  EDivByZero  TInvoice.Total   empty invoices3  slow  PrintInvoice   logo redrawn on every page Fixes proposed in 3 files. Review the diff
// One call at startup. That's the whole setup:
// errors, stack traces and hardware info flow in.
uses
  ExeWatchSDKv1;

InitializeExeWatch('ew_win_xxx', 'ACME-Corp');

// Add context when it helps:
EW.SetUser('user123', 'john@acme.com', 'John Doe');
EW.AddBreadcrumb('Loading data', 'db');
EW.Error('Connection failed', 'DB');

Integration in 5 Minutes

Native SDKs for Delphi, C++Builder, C/C++ (MSVC), .NET/C#, JavaScript, and Python — no complex setup

Delphi SDK

All Platforms

Works with VCL, FMX, console apps, Windows services, Linux servers, DataSnap, RAD Server, and Android mobile apps. iOS coming soon.

Stack traces on Win32 and Win64. Exceptions arrive with unit, function and line number, in 32-bit and 64-bit executables, Debug or Release. The setup links the compiler’s map file into your .exe, so there is no map file to ship next to it. Already use another library for stack traces? ExeWatch captures the trace itself and collects it from every customer machine in one dashboard. If that library only does stack traces, ExeWatch gives you much more, starting free: logs, breadcrumbs, performance timing, custom metrics, hardware info, email alerts and AI anomaly detection. If you keep your library, the two work side by side (how).

Setup:

  1. Download ExeWatch for RAD Studio (2.9 MB): one setup for RAD Studio XE8 and later. It puts the SDK on the Library Path and adds an ExeWatch entry to the Project menu
  2. With your project open, choose Project > ExeWatch > Enable ExeWatch Telemetry. It adds ExeWatchConfig.pas and the StartExeWatch and FlushExeWatch calls to your project
  3. Put your API key in EXEWATCH_API_KEY, in ExeWatchConfig.pas
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// REQUIRED: ExeWatchConfig.pas, added by the menu
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
const
  EXEWATCH_API_KEY = 'ew_win_xxx';

// Main file (.dpr), added by the menu
StartExeWatch;
// ... your application ...
FlushExeWatch;

// The customer: read it from your license and pass it
SetExeWatchCustomer('ACME-Corp');

// That's it! Errors are now captured automatically.
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// OPTIONAL: Additional features
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

// Identify the current user
EW.SetUser('user123', 'john@acme.com', 'John Doe');

// Add global tags for context
EW.SetTag('environment', 'production');

// Manual logging
EW.Info('User opened settings', 'UI');
EW.Error('Connection failed', 'DB');

// Breadcrumbs: track actions before errors
EW.AddBreadcrumb('Loading data', 'db');

// Measure performance
EW.StartTiming('database_query');
try
  QueryResults := RunComplexQuery(SQL);
  EW.EndTiming('database_query');
except
  on E: Exception do
  begin
    EW.EndTiming('database_query',
      TJSONObject.Create(TJSONPair.Create('error', E.Message)), False);
    raise;
  end;
end;

Automatic Exception Capture: All unhandled exceptions are automatically logged—no try/except needed. The VCL/FMX hooks capture GUI exceptions, while console app crashes are caught at the system level.

Also included: User identity tracking, global tags, breadcrumbs trail, performance timing, offline persistence, automatic retry, and hardware info collection. Compatible with Delphi XE8+ on Windows Vista / Server 2008 or later, Linux, and Android. macOS / iOS coming soon.

C++Builder SDK

VCL & FMX

First-class support for Embarcadero C++Builder: VCL, FMX and console apps. Your project builds the SDK units itself: no DLL to ship and no import library to link.

Stack traces on Win32 and Win64. Exceptions raised by the RTL or by Delphi code arrive with their function names, in 32-bit and 64-bit executables. The C++ linker’s map has no line numbers, so there are none. An exception you throw from C++ reaches ExeWatch with its message, class, breadcrumbs, user and tags, but no stack trace yet.

Setup:

  1. Download ExeWatch for RAD Studio (2.9 MB): one setup for RAD Studio XE8 and later. It adds an ExeWatch entry to the Project menu
  2. With your C++ project open, choose Project > ExeWatch > Enable ExeWatch Telemetry. It adds ExeWatchConfig.pas and the SDK units to the project, and StartExeWatch(); and FlushExeWatch(); to the main .cpp
  3. Put your API key in EXEWATCH_API_KEY, in ExeWatchConfig.pas
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// REQUIRED: added to your main .cpp by the menu
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include "ExeWatchConfig.hpp"

int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    StartExeWatch();
    // ... Application->Initialize(); CreateForm(...) ...
    Application->Run();
    FlushExeWatch();
    return 0;
}

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// The customer: read it from your license and pass it
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SetExeWatchCustomer(L"ACME-Corp");

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// OPTIONAL: log from your own code
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include "ExeWatchSDKv1.hpp"

EW()->Info("Saving customer", "ui");
try { SaveToDatabase(); }
catch (Exception &E) {
    EW()->ErrorWithException(&E);
    throw;
}

Full feature set: user identity, global tags, breadcrumbs, performance timing, custom metrics, offline persistence, automatic retry, hardware info, all tested from C++. Checked with RAD Studio 12 and 13 (Win32 and Win64). On an older C++Builder, use the DLL SDK tab.

C / C++ SDK

MSVC, MinGW, Clang

Drop-in Windows support for Microsoft Visual C++ (MSVC), MinGW, Clang, and any other Windows C/C++ compiler. The SDK ships a header + a single .c file that implements LoadLibrary + GetProcAddress for you — no import library, no linker step, no toolchain coupling.

Setup:

  1. Download the SDK from your app's API Keys page
  2. Add ExeWatchSDKv1.h + ExeWatchSDKv1.dynload.c to your project
  3. Ship ExeWatchSDKv1DLL_x64.dll alongside your .exe
  4. Call ew_LoadSDK() once, then use ew_* anywhere
// Add ExeWatchSDKv1.dynload.c to your project
// (it handles LoadLibrary + GetProcAddress for you)
#define EW_DYNAMIC_LOAD
#include "ExeWatchSDKv1.h"

int wmain() {
    if (ew_LoadSDK() != EW_OK) {
        fwprintf(stderr, L"DLL not found\n");
        return 1;
    }

    ew_Initialize(L"ew_win_xxx",
                  L"ACME-Corp",
                  L"1.0.0");
    ew_Info(L"Application started", L"startup");

    // ... your app ...

    ew_AddBreadcrumb(EW_BT_HTTP, L"api",
                     L"POST /api/pay", NULL);
    ew_Error(L"Payment declined", L"billing");

    ew_StartTiming(L"render_frame", L"gfx");
    RenderFrame();
    ew_EndTiming(L"render_frame", NULL);

    ew_Shutdown();
    ew_UnloadSDK();
    return 0;
}

Verified compilers: MSVC (Visual Studio 2022 Build Tools, cl /W4 clean), MinGW-w64, Clang for Windows, LLVM-MinGW. Pure extern "C" + __stdcall + wchar_t* ABI — no C++ name mangling, no runtime coupling, nothing to link.

.NET / C# SDK

Windows

Works with WinForms, WPF, console apps, and Windows services. .NET 8.0+ required. Zero NuGet dependencies.

Setup:

  1. Add ExeWatch package to your project
  2. For WinForms apps: also add ExeWatch.WinForms
  3. Call ExeWatchSdk.Initialize(config)
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// REQUIRED: Initialize at startup
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
using ExeWatch;

ExeWatchSdk.Initialize(new ExeWatchConfig
{
    ApiKey = "ew_win_xxx",
    CustomerId = "ACME-Corp"
});

// That's it! Errors are now captured automatically.
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// OPTIONAL: Additional features
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

// Identify the current user
EW.SetUser("user123", "john@acme.com", "John Doe");

// Add global tags for context
EW.SetTag("environment", "production");

// Manual logging
EW.Info("User opened settings", "UI");
EW.Error("Connection failed", "DB");

// Measure performance
EW.StartTiming("database_query");
try
{
    var results = RunQuery(sql);
    EW.EndTiming("database_query");
}
catch (Exception ex)
{
    EW.EndTiming("database_query",
        new Dictionary<string, object> { ["error"] = ex.Message }, false);
    throw;
}

Automatic Exception Capture: All unhandled exceptions are automatically logged. The WinForms hook captures GUI thread exceptions, while AppDomain-level exceptions are caught at the system level.

Also included: User identity tracking, global tags, breadcrumbs trail, performance timing, offline persistence, automatic retry, hardware info collection, and custom metrics (counters & gauges). Requires .NET 8.0+ on Windows.

JavaScript SDK

Web Apps

Setup:

  1. Add script tag to your HTML
  2. Configure with your API key
  3. Start logging!
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// REQUIRED: Add script and configure
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<script>
  window.ewConfig = {
    apiKey: 'ew_web_your_key',
    customerId: 'ACME-Corp'
  };
</script>
<script src="https://exewatch.com/static/js/exewatch.v1.min.js"></script>

// That's it! Errors are now captured automatically.
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// OPTIONAL: Additional features
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

// Identify the current user
ew.setUser({ id: 'user123', email: 'john@acme.com' });

// Add global tags for context
ew.setTag('environment', 'production');

// Manual logging
ew.info('Page loaded', 'UI');
ew.error('API failed', 'api');

// Breadcrumbs: track actions before errors
ew.addBreadcrumb('Clicked checkout', 'ui');

// Measure performance
ew.startTiming('api_call');
try {
    const data = await fetchData();
    ew.endTiming('api_call');
} catch (err) {
    ew.endTiming('api_call', { error: err.message }, false);
    throw err;
}

Automatic Error Capture: All unhandled exceptions and promise rejections are automatically logged—no try/catch needed. The SDK captures errors from any code, including third-party libraries.

Also included: User identity tracking, global tags, breadcrumbs trail, performance timing, persistent device ID across sessions, automatic browser info collection. Works on all modern browsers with a tiny footprint (~5KB).

Python SDK

Windows & Linux

SDK for Django, Flask, FastAPI, CLI tools, and services, installed from PyPI. Python 3.7+, zero external dependencies.

Setup:

  1. Run pip install exewatch-sdk
  2. Call initialize_exewatch()
  3. Use the ew proxy anywhere!
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# REQUIRED: Initialize at startup
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
from exewatch import initialize_exewatch, ew

initialize_exewatch(
    'ew_win_your_key',
    'ACME-Corp',
    app_version='1.0.0'
)

# That's it! Start logging.
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# OPTIONAL: Additional features
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# Identify the current user
ew.set_user('user123', 'john@acme.com', 'John Doe')

# Add global tags for context
ew.set_tag('environment', 'production')

# Manual logging
ew.info('User opened settings', 'UI')
ew.error('Connection failed', 'DB')

# Exception capture
try:
    risky_operation()
except Exception as e:
    ew.error_with_exception(e, 'module')

# Measure performance
ew.start_timing('db_query', 'database')
result = db.execute(sql)
ew.end_timing('db_query')

Full feature set: User identity, global tags, breadcrumbs, performance timing, offline persistence, automatic retry, hardware info collection, custom metrics (counters & gauges), and periodic gauge sampling. Thread-safe with thread-local breadcrumbs.

DLL SDK

Win32 & Win64

The same SDK as a Windows DLL with a plain C interface. Use it when the native Delphi units are not an option.

When to use it:

  • Delphi older than XE8 (back to Delphi 5): the units need XE8, the DLL does not
  • C++Builder older than XE8, or a C++ project where you would rather not build the SDK units
  • Visual C++, MinGW, Clang and any other Windows C/C++ compiler (see the C/C++ tab)
  • Other languages that call Windows DLLs: C#, Rust, Go, Python

What you get:

  • ExeWatchSDKv1DLL.dll (32-bit) and ExeWatchSDKv1DLL_x64.dll (64-bit)
  • ExeWatchSDKv1.h and ExeWatchSDKv1.dynload.c for C and C++, ExeWatchSDKv1Imports.pas for Delphi
  • The whole ew_* API: logs at every level, breadcrumbs, user identity, global tags, timing, custom metrics, offline persistence and automatic retry
  • An extern "C", __stdcall, wchar_t* interface: no name mangling, no runtime coupling, and a version check: a newer DLL works with an older host, a DLL that is too old is refused with an error

How to use it:

  1. Download the DLL files from your app’s API Keys page
  2. Put the DLL next to your .exe and add the header or the import unit to your project
  3. Call ew_Initialize once at startup, ew_Shutdown before exit
// Delphi (any version): ExeWatchSDKv1Imports.pas
uses
  ExeWatchSDKv1Imports;

EWInitialize('ew_win_xxx', 'ACME-Corp', '1.0.0');
EWInfo('Application started');
ew_Shutdown;

// C / C++ (MSVC, MinGW, Clang, C++Builder): load the DLL at run time
#define EW_DYNAMIC_LOAD
#include "ExeWatchSDKv1.h"

ew_LoadSDK();
ew_Initialize(L"ew_win_xxx", L"ACME-Corp", L"1.0.0");
ew_Info(L"Application started", L"startup");
ew_Shutdown();
ew_UnloadSDK();

Stack traces: the DLL captures exceptions raised inside its own code and in a host that runs the same Delphi RTL. A host with another runtime, such as MSVC or Python, gets no stack trace for its own exceptions yet.

Full integration guides

Everything You Need to Understand Your App

Comprehensive data, collected automatically.

Automatic Stack Traces

Every Error and Fatal log includes the full call stack, automatically. No configuration, no extra code. See exactly which function failed and the complete chain of calls that led there.

EDivByZero: Division by zero
  MainForm.ProcessOrder (line 87)
  OrderService.Validate (line 234)
  DBModule.SaveRecord (line 456)

AI-Powered Anomaly Detection

Go beyond fixed thresholds. The AI learns your application's normal behavior and detects anomalies without manual configuration.

  • Spike DetectionUnusual error rates against the historical baseline
  • Pattern LearningDaily and weekly patterns, such as Monday peaks
  • Zero ConfigurationNo threshold tuning, the AI adapts
  • Fewer False PositivesAlerts only when truly unusual
PROError count anomalies
BUSINESSError count + Timing anomalies

Breadcrumbs Trail

Automatic capture of user actions before an error. See the exact sequence of clicks, navigation and API calls that led to the problem.

  1. Click: Save
  2. Navigate: /orders/new
  3. API call: POST /orders
  4. Error: connection refused

Hardware Intelligence

Automatic collection of device specs, to tell whether an issue comes from hardware limits.

  • CPU, RAM i5 / 4 GB, 1.2 GB free
  • Disk SSD, 3% free
  • Monitors 2 × 1920×1080
  • OS, locale Windows 11, it-IT

Health Monitoring

Every app gets a real-time status: Healthy, Degraded or Critical. Get notified by email and Discord when it changes.

Healthy Degraded Critical
  • Error rate, crashes and slow ops
  • Smart anti-flapping protection
  • Customizable thresholds

Structured Logs

5 severity levels. Filter by level, search by message, organize with custom tags.

Debug Info Warning Error Fatal

Performance Timing

Measure how long operations take: database queries, API calls, file operations, any code block.

  • database_query avg 42 ms · P95 180 ms
  • export_pdf avg 260 ms · P95 610 ms
  • Nested timing, category grouping, Min / Max stats

Custom Metrics

Send your own numbers. Track counters (requests, sales) and gauges (CPU, memory, queue size).

  • Counters and gauges
  • Time-series charts
  • Configurable min / max / units
  • Tag-based filtering

Usage Analytics

Understand how your software is used: sessions, active devices, customers and usage patterns over time.

  • Sessions, devices and customers
  • Usage heatmap (hour × day)
  • OS distribution
  • Error rate trend by version

Multi-Customer

Selling to businesses? Track each customer separately, compare behavior, prioritize enterprise clients.

Perfect for B2B software vendors

Release & Tags

Tag events with app version and custom context. Filter by release, environment or feature flag.

v2.5.0 production beta-feature

User Identity

Attach user info to every event: ID, email, name. When a user reports an issue, find their logs instantly.

Filter by user email, see complete sessions

Email Alerts

Rules like “email me if 10+ errors occur in 1 hour”, with level and tag filters and a smart cooldown.

Configurable thresholds and time windows

Offline Persistence

Logs are kept on the device and sent when the connection is back, with automatic retry, so offline sessions show up too.

  • Queue persisted on the device
  • Automatic retry

Timing Alerts

Get notified when operations become too slow. Set thresholds like “alert if 5+ queries exceed 500 ms in 1 hour”.

  • Duration thresholds
  • Wildcard patterns (database_*)
  • Filter by category
  • Email notifications

Names and numbers in the examples are illustrative.

Your AI Agent Reads Production and Fixes the Code

ExeWatchMCP gives Claude Code, Codex and KAI in RAD Studio what your applications report from the field: errors grouped by problem, how long each operation takes, versions, metrics, customers and devices. The agent writes the fix, you review it and ship it, and the next release shows whether it worked.

  1. You

    Ship a release

    Reports carry your application version (the Delphi SDK reads it from the binary), so each release has its own numbers.

  2. ExeWatch

    Collects what happens

    Identical errors are grouped. Errors, timings and devices are broken down per version.

  3. The agent

    Reads it from the editor

    In the tool you already use, through ExeWatchMCP. It weighs how many customers each problem touches.

  4. The agent

    Fixes the code

    It finds the cause in your repository and proposes the change, with the evidence it used.

  5. You

    Review and deploy

    You read the diff, run your tests and ship. The new version starts reporting.

Then back to the second step: the agent compares the new version with the previous one, and tells you if the problem is gone or something new appeared.

Ask in your editor

“Fix the errors of the last week.”
Errors grouped by problem: how often, since when, on which versions and for how many customers, with the stack trace and the breadcrumbs of one example.
“Find what is slow, and why.”
How long each operation takes (median, 95th percentile, maximum), version by version, so a release that slowed something down shows.
“Is this version worse than the previous one?”
Errors and devices per version, and the problems that exist only in the new one.
“Why are there so many orders_failed?”
The metric over time, next to the releases and the errors of the same hours.
“What would you work on first?”
All of it together, ranked by impact, with the customers each problem touches weighing heavily.

Connect it

pip install ExeWatchMCP

# Claude Code
claude mcp add exewatch --env EXEWATCH_API_KEY=ew_api_... -- exewatch-mcp

# Codex
codex mcp add exewatch --env EXEWATCH_API_KEY=ew_api_... -- exewatch-mcp

Delphi and C++Builder. In RAD Studio, register exewatch-mcp as an MCP server of KAI, the AI assistant of the IDE, and ask it without leaving the IDE.

From a test run

In a test with a small invoicing program, Claude Code read the grouped errors and the timings in ExeWatch and fixed three problems in the code: a crash at the end of every run, a division by zero on empty invoices, and a logo redrawn on every page. The slow export went from 261 to 131 ms. It left two for a person to decide: a missing tax rate and a missing data file.

  • Read only. It cannot change or delete anything in ExeWatch.
  • A key for each project. Limited to the applications you choose, and revoked in seconds from the same page where you created it.
  • Personal fields hidden by default. The agent receives no customer names, e-mails or host names, only ids. Log text reaches it as your application wrote it.
  • Not just stack traces. A stack trace is often missing, so the agent also uses breadcrumbs, timings, metrics, versions and devices, and a built-in guide teaches it how ExeWatch works.
  • MIT license. pip install ExeWatchMCP, no dependencies, Python 3.9 or later.
  • Every paid plan. The Hobby plan does not include API access.
  • Nobody copies a stack trace. Delphi and C++Builder developers ask KAI inside RAD Studio. Everyone else asks Claude Code, Codex or any agent that supports MCP.
  • More logging means better fixes. The agent can only use what your application reports. Breadcrumbs, timings and metrics are what it falls back on when a stack trace is missing.

Read the guide

When ExeWatch Makes the Difference

Real scenarios where visibility saves hours of debugging.

  • “It crashes sometimes, but I can’t reproduce it”

    Your customer reports a crash that you can’t reproduce in your environment.

    With ExeWatch: You see the exact sequence of actions (breadcrumbs) leading to the crash, the user’s hardware specs, OS version, and the full error stack trace. You fix it in 10 minutes.

  • “Only this one customer has problems”

    One customer keeps complaining, but everyone else is fine.

    With ExeWatch: Filter logs by customer. See their specific hardware (maybe they have 4GB RAM and others have 16GB), their app version (outdated?), and exactly which features cause issues.

  • “Did the new release introduce bugs?”

    You just deployed version 2.5 and want to make sure everything is stable.

    With ExeWatch: Filter by release tag. Compare error rates between v2.4 and v2.5. See if new users encounter errors immediately or only power users with specific workflows.

  • “Support needs to understand what happened”

    Your support team receives a ticket: “The app didn’t save my work”.

    With ExeWatch: Support searches by user email or customer ID. They see the timeline of events, where the save operation failed, disk space available, and can provide precise answers.

  • “Our web dashboard has JavaScript errors”

    Users complain about features not working, but you don’t see errors in your browser.

    With ExeWatch: The JavaScript SDK captures errors from all browsers, including Safari, Edge, old Chrome versions. You see browser info, screen size, and user actions before the error.

  • “We need to know what happens offline”

    Your app works offline or has intermittent connectivity, but you need visibility when connection is restored.

    With ExeWatch: Logs are persisted locally and automatically sent when connection is available. Nothing is lost. You see complete activity even from offline sessions.

  • “I want to know about problems before customers call”

    You don’t want to check the dashboard constantly, but need to know when things go wrong.

    With ExeWatch: Set up email alerts with custom thresholds. Get notified when error rates spike: “10 errors in 1 hour” triggers an email to your team.

  • “Some operations are slow, but I don’t know which ones”

    Your app feels sluggish sometimes, but you can’t pinpoint the bottleneck.

    With ExeWatch: Instrument key operations with timing. See Avg, P95, and Max duration for each. Get alerted when operations exceed your thresholds (e.g., “5 queries > 500ms in 1 hour”).

  • “Is anyone actually using our software?”

    You shipped your product but have no idea how many customers are active, when they use it, or if usage is growing.

    With ExeWatch: The Usage page shows active sessions, devices, and customers over time with trend deltas. A heatmap reveals when your app is used most (weekday mornings? evenings?). No extra code needed.

  • “A key customer stopped using the product”

    You want to spot customers at risk of churning before they cancel their license.

    With ExeWatch: The Top Customers ranking shows session counts and last active date. Compare 30d vs previous 30d — a customer dropping from 50 to 5 sessions is a red flag you can act on immediately.

Video Tutorials

Learn how to integrate and use ExeWatch

Webinar recordings

Each recording has subtitles you can translate: turn on the captions in the player and pick your language.

Spoken language: English 1 h 48 min

Exewatch: Stop Waiting for Crash Reports and Start Solving Problems

Why a desktop application is a black box once it runs on a customer’s machine, and how ExeWatch gives you visibility in production with two lines of code. It covers the background shipper thread that keeps working offline, breadcrumbs and timings, AI anomaly detection, SDK integration (native Delphi and DLL), GDPR and the on-premise Docker option.

Watch the recording
Spoken language: Spanish 1 h 02 min

Exewatch: Deja de esperar los informes de errores y empieza a resolver problemas

The same webinar topics presented in Spanish: why desktop applications run blind in production, the zero-impact background shipper, breadcrumbs and timings, AI anomaly detection, SDK integration, GDPR and on-premise Docker.

Watch the recording
Spoken language: Italian 1 h 43 min

Monitoraggio Remoto e Diagnostica per Applicazioni VCL con ExeWatch

The recording of the 24 March webinar on ExeWatch: remote monitoring and diagnostics for VCL applications (“Remote Monitoring and Diagnostics for VCL Applications with ExeWatch”).

Watch the recording

Simple, Transparent Pricing

Start free, upgrade when you need more

Four plans: Hobby, Pro, Business, and On Premise.

All of them include every SDK: Delphi, C++Builder, C/C++, .NET/C#, JavaScript, and Python

See Plans and Pricing

Frequently Asked Questions

Everything you need to know about ExeWatch

ExeWatch is an Application Performance Monitoring (APM) platform designed for server, desktop, and web applications built with Delphi, C++Builder, C/C++, .NET/C#, JavaScript, and Python. It provides real-time log aggregation, error tracking, hardware information collection, and breadcrumb trails to help developers quickly identify and fix issues in production.

ExeWatch currently offers native SDKs for Delphi (compatible with Delphi 5 through 13 Florence — VCL, FMX, console apps, services, Windows, Linux, Android), Embarcadero C++Builder and Microsoft Visual C++ (MSVC) on Windows (with MinGW and Clang also verified), .NET/C# (for WinForms, WPF, console apps, and Windows services on .NET 8.0+), JavaScript (for web applications, works on all modern browsers), and Python (3.7+, zero dependencies, Windows and Linux).

ExeWatch captures the stack trace of every exception and shows it in the dashboard with unit, function and line number, in 32-bit and 64-bit Windows executables, Debug or Release. The ExeWatch for RAD Studio setup adds a Project menu entry that links the compiler's map file into your .exe, so there is no map file to ship and no separate exception library to install. C++Builder traces carry function names without line numbers.

Yes. ExeWatch captures stack traces on its own and gathers them from every customer machine in one place, next to logs, timings and hardware info. If the library you use only produces stack traces, ExeWatch gives you much more: breadcrumbs, custom metrics, email alerts and AI anomaly detection on top, and it starts with a free plan. If you keep the library you have, the two coexist: the documentation shows how to forward the stack trace it has already resolved to ExeWatch.

Yes. ExeWatchMCP is an MCP server that gives an AI agent read access to what your applications report: errors grouped by problem, timings, metrics, versions, customers and devices. It works with Claude Code, Codex, any agent that supports MCP, and KAI in RAD Studio. The agent finds the cause in your code and proposes the fix, you review it and deploy, and after the release it can compare the new version with the previous one. It is read only, it uses a key you can limit to some applications and revoke at any time, and by default it does not receive the personal fields ExeWatch stores (customer names, e-mails, host names), although log text reaches it as your application wrote it. It needs a paid plan.

Yes! The Delphi, C++Builder, C/C++, .NET, and Python SDKs store logs locally on disk when there's no internet connection. Once connectivity is restored, all queued logs are automatically sent to the server. This ensures you never lose visibility into what happened during offline sessions.

ExeWatch automatically collects: CPU model and core count, total and available RAM, disk drives with free space, monitor count and resolutions, OS version and build number, timezone and locale settings, and your application version. This helps you understand if issues are related to specific hardware configurations.

Log retention depends on your plan: the free Hobby plan retains logs for 7 days, the Pro plan for 30 days, and the Business plan for 90 days. You can upgrade your plan at any time to increase retention.

Yes! ExeWatch offers a free Hobby plan that includes 1 application, 5,000 events per month, and 7 days of log retention. No credit card required. Perfect for small projects, personal apps, or trying out the platform before upgrading.

Yes! ExeWatch includes email alerts with configurable thresholds. For example, you can set up an alert like "email me if 10 errors occur within 1 hour". You can filter by severity level (warning, error, fatal) and specific tags. A smart cooldown prevents alert fatigue.

Yes! ExeWatch provides performance timing for any operation. Use startTiming/endTiming to measure database queries, API calls, or any code block. The dashboard shows Avg, Min, Max, and P95 statistics. You can also set up timing alerts to get notified when operations exceed duration thresholds (e.g., "alert if 5 database queries exceed 500ms in 1 hour"). Wildcard patterns like database_* let you monitor groups of operations.

When you collect operational data from your end users (even technical data like device info and error logs), most jurisdictions require you to disclose this in a Privacy Policy or Terms of Service. ExeWatch provides a ready-to-use template that you can copy and adapt for your application. It covers what data is collected, where it's stored, and your users' rights. See the Privacy & ToS Guide in our documentation for the full template and compliance tips.

Yes. Data is hosted on EU servers. The SDK collects only technical data (OS, RAM, CPU, hostname, and on Windows the logged-in Windows username). Logs contain only what the developer explicitly sends — no personal data unless you choose to include it. Account owners can export their data, restrict processing, or pseudonymize their account. A Data Processing Agreement (DPA) is available in the account settings.

The SDK does not track end users, browsing behavior, or personal information. It collects only technical device data: operating system, hardware specs, and hostname. On Windows, it also collects the logged-in Windows username to identify which OS session generated the logs — this is especially useful in Terminal Server environments. Log content is entirely controlled by the developer. Data retention depends on the plan (7/30/90 days) and data is automatically deleted upon expiration.

Yes. The core SDK (ExeWatchSDKv1.pas) is framework-independent. For FMX GUI exception capture, use the ExeWatchSDKv1.FMX unit (the ExeWatch for RAD Studio setup installs it with the rest). Works on Windows, Linux, macOS, and Android.

Yes. Include the ExeWatch unit in the package that initializes it (typically the main application). Logging calls from any package will work as long as the SDK has been initialized.

Each Terminal Server session is identified by a unique combination of the Windows username and hostname (e.g. john@TERMSERVER01). This means every user session is tracked as a separate device, giving you clear visibility into per-user behavior on shared servers.

Minimal. All log shipping happens asynchronously on a dedicated background thread. Logging calls return immediately without blocking your application. The SDK uses efficient batching and buffering to minimize network and disk I/O.

ExeWatch provides powerful filtering by device, customer, log level, tag, thread, session, and time range. You can quickly drill down from a high-level overview to a specific device or user session. Alert rules notify you automatically when something needs attention.

No. Breadcrumbs are attached to the next error or fatal log event and sent together as a single event. A log entry with 10 breadcrumbs counts as 1 event toward your plan quota.

Stop Flying Blind

Your users know when something goes wrong. Shouldn't you? Start monitoring your applications today.

Create Free Account