T1 starter · every office job — the first example with
infer.schema: — the model doesn’t get to answer in prose. It returns
the JSON shape you declared, or the engine rejects it.
The job
The meeting ended an hour ago and nobody remembers who owns what. The transcript is sitting in a file. This workflow extracts every action item as{owner, task, due} — typed, validated, importable by whatever
tracker you use.
The shape
The file
t1-meeting-actions.nika.yaml
How it works
A required, typed input
transcript_path is declared with type: string · required: true —
the engine validates inputs before any task runs, and the workflow
becomes callable with a real contract.The schema IS the contract
infer.schema: is standard JSON Schema. The model must return a
matching object — on violation the engine rejects (and may retry).
Downstream tasks index into it directly: ${{ tasks.extract.output.actions }}.Constructs you just used
| Construct | Where | Reference |
|---|---|---|
typed vars: | transcript_path | YAML syntax |
infer.schema: | extract | The 4 verbs |
| schema-path indexing | save.args.content | Bindings |
nika:log | trace | Builtins |
Make it yours
- Add
dueto therequired:list if your team always sets deadlines. - Chain a
nika:notifytask that posts each owner their items. - Swap the transcript file for a
nika:fetchof your meeting tool’s export API — the schema doesn’t change.
Next · Price watch
The next starter has zero model calls — pure tools, bindings and one
CEL comparison.