Skip to main content

Where to start

Put mnfst run in front of the command that starts your app. The SDK then starts before any of your code, with no manifest() call.

What Manifest covers

Manifest heals a recoverable request with a JSON or form body up to 256 KiB. The SDK records every other request without healing it. In Python, the SDK sees httpx, httpx2 and requests. In Node, the SDK sees the global fetch and the http and https modules, so it sees Axios too. In PHP, the SDK sees the Laravel Http facade, Guzzle, Symfony HttpClient, CakePHP and WordPress. It records a library with its own raw curl_* client but never heals it. The PHP SDK needs the opentelemetry extension, so it cannot run on shared hosting. Laravel Vapor and Bref need a Lambda layer that includes the extension. Without a writable temporary folder on the server, the SDK stops recording but keeps healing. In Hermes, the plugin sees tool calls to MCP servers reached over HTTP. A failed tool call shows the status 418 in the dashboard. This code stands for a failed tool call, never for a real API answer. The SDK retries a patched request once. A retry can repeat a side effect of the first request, so send an idempotency key when the API accepts one. A script that exits with process.exit(), os._exit() or a signal can lose its last requests, so let it end on its own. A PHP worker such as Laravel Octane or queue:work sends its requests only when it restarts.

Check your install

Each doctor command checks the install and the key. Run it in the folder and the environment of your app:
Outside Next.js, the Node command warns “Loads before your app” when your app calls manifest(). Check the setup screen instead. When the setup screen shows “Waiting for your first request”, check that:
  • MNFST_KEY is set where the app runs
  • the app restarted after you set it
  • Manifest starts before the first API request
  • in PHP, the opentelemetry extension is active.
When the setup screen shows “Connected. Waiting for a failing request”, the install works. To open the dashboard now, send a JSON request that your API rejects with 400, 404 or 422.