If you can't describe the output as a data shape, you can't tell whether a run was successful. The schema is what makes the skill auditable, composable, and re-runnable across different inputs.
A chemist's view: a reaction has reactants, conditions, products, with stereochemistry, yield, byproducts. A skill is the same. Every field has a type, every output has a shape. If you can't draw it on the back of an envelope, you can't compose it.
Looks fine alone. Breaks the moment a downstream skill needs to consume it. No types, no fields, no audit trail.
A downstream hypothesis-forge skill can iterate over open_gaps and reference state_of_the_art. Every field has a type. The skill is auditable run-by-run.
literature-cartographer.name: literature-cartographer input: a research topic output: a literature review
name: literature-cartographer
input:
topic: string # e.g. "ring resonator biosensor for protein detection"
year_window: [int, int] # e.g. [2010, 2026]
allowed_journals: [string] # optional
output:
foundational_works:
- {authors: string, year: int, contribution: string}
approach_families:
- {name: string, lead_groups: [string], tradeoffs: string}
state_of_the_art:
{metric: string, value: string, group: string, year: int}
open_gaps:
- string
Notice what changed. Every field has a type. The output is consumable by a downstream
hypothesis-forge skill, which can iterate over open_gaps and reference
state_of_the_art when framing its predicted signature. The vibe version was
uncomposable.
Grab the last XRD pattern you identified, or the last reviewer comment you responded to. Write down the schema you'd want — every field with a type. Five minutes. You'll discover at least one field your skill needs that you'd have forgotten.