Define a Pydantic-based config class by subclassing dagster.Config and use it as the type annotation for the config parameter in the @op or @asset function signature
Access config values inside the op body via the config parameter; Dagster validates the provided YAML or dict against the Config class at launch time and raises an error for missing required fields
Pass config at runtime by providing RunConfig(ops={'op_name': {'config': {'field': 'value'}}}) when calling job.execute_in_process() or when submitting a run via the GraphQL API
Use dagster.Field with a default value and description to make config fields optional and self-documenting; these appear in the Dagster UI Launchpad with inline documentation
Define job-level config by using a separate Config class attached to the job and access it via context.op_config inside ops that are part of that job
Known gotchas
Config values are serialized to YAML for storage in the run record; complex Python objects (e.g., datetimes, custom classes) must be represented as strings or primitives and parsed inside the op body
Changing the Config class schema between runs that share a run config (e.g., scheduled runs using a stored run config) causes validation failures if new required fields are added without providing defaults
Op config and resource config are separate namespaces; passing an op config value in the resources section of RunConfig (or vice versa) silently ignores the value rather than raising an error
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