T1 starter · engineering / any team: two data sources gathered in parallel, one model call, one file on disk. Your first taste of « the boring parts run themselves ».
The job
Every morning you reconstruct yesterday from memory. Your git history already knows. This workflow reads the commits since yesterday, stamps the date from a builtin (not from the model’s imagination), and writes the three standup bullets in your tone. If Git fails or the sandbox refuses the read, the workflow records “Git history unavailable” and tells the model to invent no commit facts. This is distinct from an empty successful log.The shape
The file
standup-digest.nika
How it works
1
Two tasks start together
today and history have no incoming edge: the engine runs them
in parallel. Parallelism is the default, not an option you switch on.2
Unavailable history stays visible
on_error.recover carries an explicit unavailable-history message into
outputs.history and the note. It grants no extra filesystem access.3
The digest waits for both
The two
with: bindings make digest the merge point — each
${{ tasks.X.output }} reference IS a data edge. The prompt reads
the bindings (${{ with.today }} · ${{ with.history }}).4
The note lands on disk
nika:write takes an explicit content:. A write without content
writes nothing. The workflow also returns the note via outputs:.Constructs you just used
Make it yours
- Point
--sinceat your sprint cadence (--since=fridayfor Monday standups). - Keep the local model or choose another provider/model available in
nika catalog. - Add a
nika:notifytask to post the note straight into your team channel. See Release notes for the pattern.
Next · Meeting actions
Same tier, one new idea: structured output. The model returns typed
JSON, not prose.