AGPL-3.0-or-later · forever.

showcase · tier 4 · research

CEO Monday brief

Market + repo pulse + KPI sheet gathered in parallel, jq sums the revenue, thinking model writes.

The ping ends with the run’s own cost line. The workflow reports its own bill. · conformance-gated in nika-spec ↗ · re-proven at every push

The whole file

10 tasks · 7 waves · the plan falls out of the bindings, nothing is scheduled by hand.

t4-ceo-monday-brief.nika.yamlsource
nika: v1workflow:  id: ceo-monday-brief  description: "news + repo pulse + KPIs → thinking synthesis → dated brief + cost ping"model: ollama/qwen3.5:4b   # local default · the synthesis task below overrides to a stronger modelvars:  watch_query: "AI workflow engines"  kpi_csv: "./finance/kpis.csv"secrets:  founders_webhook:    source: env    key: FOUNDERS_WEBHOOK_URL    egress:                       # sanction the one send · the secret IS the URL      - to: "nika:notify"        host_from_self: truetasks:  # ── branch 1 · market signal ──  news:    invoke:      tool: "nika:fetch"      args:        url: "https://hn.algolia.com/api/v1/search?query=${{ vars.watch_query }}"        mode: jq        jq: ".hits[:10] | map(.title)"  # ── branch 2 · engineering pulse ──  pulse:    exec:      command: ["git", "shortlog", "-sn", "--since=1 week ago"]  # ── branch 3 · the numbers ──  kpi_raw:    invoke:      tool: "nika:read"      args: { path: "${{ vars.kpi_csv }}" }  kpis:    with:      csv: ${{ tasks.kpi_raw.output }}    invoke:      tool: "nika:convert"      args:        input: "${{ with.csv }}"        from: csv        to: json        has_header: true  revenue:    with:      kpis: ${{ tasks.kpis.output }}    invoke:      tool: "nika:jq"      args:        input: "${{ with.kpis }}"        expression: "map(.weekly_revenue | tonumber) | add"  # ── synthesis · with a thinking budget ──  brief:    with:                              # the three branches join here · four value edges      news: ${{ tasks.news.output }}      pulse: ${{ tasks.pulse.output }}      kpis: ${{ tasks.kpis.output }}      revenue: ${{ tasks.revenue.output }}    infer:      model: anthropic/claude-sonnet-4-6   # per-task override · thinking budget      prompt: |        Market signal · ${{ with.news }}        Engineering pulse · ${{ with.pulse }}        KPIs · ${{ with.kpis }}        Revenue (summed) · ${{ with.revenue }}        Write my Monday brief · 5 sections · market · product ·        numbers · risks · the ONE decision this week needs.      thinking:        enabled: true        budget_tokens: 10000  stamp:    invoke:      tool: "nika:date"      args: { op: now }    output:      day: ".[:10]"                  # nika:date returns the ISO string itself · slice YYYY-MM-DD  save:    with:      day: ${{ tasks.stamp.day }}      brief: ${{ tasks.brief.output }}    invoke:      tool: "nika:write"      args:        path: "./briefs/${{ with.day }}-monday.md"        content: "${{ with.brief }}"        create_dirs: true  # ── the run reports its own bill ──  bill:    after:      save: succeeded                # state, no data · read the meter once the brief landed    invoke:      tool: "nika:inspect"      args: { view: cost }  ping:    with:      day: ${{ tasks.stamp.day }}    # hoisted once · the body AND the cleanup below read this binding      cost: ${{ tasks.bill.output.total_usd }}    invoke:      tool: "nika:notify"      args:        channel: webhook        target: "${{ secrets.founders_webhook }}"        message: "Monday brief ready · briefs/${{ with.day }}-monday.md · run cost $${{ with.cost }}"        severity: info    on_finally:      - invoke:          tool: "nika:emit"          args:            event_type: "brief.monday.run"            payload:              day: "${{ with.day }}"   # the parent's own binding · cleanup never reads a sibling taskoutputs:  brief: ${{ tasks.brief.output }}  cost_usd: ${{ tasks.bill.output.total_usd }}

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

11 declared edges · 7 waves · the plan falls out of the bindings