Decorate a function with @asset_sensor(asset_key=AssetKey([...]), job=downstream_job) to create a sensor that monitors a specific asset for new materialization events
Inside the sensor function, receive the AssetMaterializationEvent and return RunRequest() to trigger the downstream job; return SkipReason('...') if no action is needed for this materialization
Include the sensor in your Definitions object alongside the monitored asset and the downstream job so Dagster can resolve all references at load time
Start the sensor from the Dagster UI or via CLI (dagster sensor start --name my_sensor) so the Dagster daemon begins polling for new materialization events
For multi-asset monitoring, use the @multi_asset_sensor decorator, which accumulates events across multiple asset keys and allows you to emit one RunRequest covering all new materializations since the last cursor advance
Known gotchas
Sensors run on the Dagster daemon process; if the daemon is not running, sensors will not fire even if new materializations occur
The sensor cursor persists materialization event storage IDs to avoid re-processing; calling context.advance_cursor() is required or the sensor will re-evaluate the same events on the next tick
Asset sensors only fire on materializations registered in the Dagster event log; materializations produced by external systems must be reported via the external assets REST API or Python API before an asset sensor will detect them
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp