[1m[36m> What blocks can you see?[0m

[32m* list_blocks()[0m
[2m    load_data               IO            read a file into a typed data object[0m
[2m    save_data               IO            write a typed data object back out[0m
[2m    code_block              Code          run your own Python on what comes in[0m
[2m    app_block               App           hand data to an external application[0m
[2m    ai.agent                AI            put a question to a model, typed answer back[0m
[2m    subworkflow_block       Subworkflow   run a whole workflow as a single block[0m
[2m    datarouter_block        Process       send items down different paths[0m
[2m    mergecollection_block   Process       concatenate collections into one[0m
[2m    paireditor_block        Process       line two collections up by hand[0m

Nine, and none of them knows anything about plate readers - they are the general
pieces every analysis is built from. Anything specific to your experiment is a
block you write, which is a Python file under blocks/ that the registry picks up
the moment it lands.

I can write those too.
