Skip to main content
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 --since at your sprint cadence (--since=friday for Monday standups).
  • Keep the local model or choose another provider/model available in nika catalog.
  • Add a nika:notify task 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.