AGPL-3.0-or-later · forever.

showcase · tier 1 · builders

Standup digest

Reads yesterday’s commits, stamps the date from a builtin, and writes your three bullets.

Every morning: the note is already written. You glance, you tweak one word, you go. · conformance-gated in nika-spec ↗ · re-proven at every push

  • 4tasksthe plan falls out of the bindings
  • 3wavesparallel by construction
  • 3verbs exercisedinvoke · exec · infer
  • T1the tierbuilders

The whole file

4 tasks · 3 waves

The plan falls out of the bindings, nothing is scheduled by hand.

standup-digest.nika.yamlsource
nika: v1workflow:  id: standup-digest  description: "Read yesterday's commits, write today's standup note"model: ollama/qwen3.5:4b   # local · zero key · swap for groq/llama-3.3-70b (a fast one-liner job)permits:  tools: ["nika:date", "nika:write"]  exec: ["git"]              # the ONE program this workflow may run  fs: { write: ["out/standup-note.md"] }tasks:  # No deps between these two → the engine runs them in parallel.  today:    invoke:      tool: "nika:date"      args: { op: now }  history:    exec:      command: ["git", "log", "--since=yesterday", "--oneline", "--no-merges"]  digest:    with:      today: ${{ tasks.today.output }}      history: ${{ tasks.history.output }}    infer:      max_tokens: 400          # a standup note is short · the ceiling says so      prompt: |        Date · ${{ with.today }}        Commits since yesterday ·        ${{ with.history }}        Write my standup note · 3 bullets · done / doing / blocked.        Plain words · no fluff. If there are no commits, say so in one line.  save:    with:      digest: ${{ tasks.digest.output }}    invoke:      tool: "nika:write"      args:        path: out/standup-note.md        create_dirs: true        content: "${{ with.digest }}"outputs:  note: ${{ tasks.digest.output }}

audited · 4 tasks · 3 waves · permits declarednika 0.106.1

nika inspect · engine 0.106.1 · vendored graph, never re-derived

3 declared edges · 3 waves · the plan falls out of the bindings