# SPDX-License-Identifier: Apache-2.0 # © SuperNovae Studio · nika.sh/library nika: daily-brief # local model · your notes never leave model: ollama/qwen3.5:4b # the file IS the blast radius permits: fs: { read: [ ./notes/* ], write: [ ./brief.md ] } tools: [ "nika:read", "nika:assert", "nika:write" ] tasks: notes: { invoke: { tool: "nika:read", args: { path: ./notes/today.md } } } inbox: { invoke: { tool: "nika:read", args: { path: ./notes/inbox.md } } } calendar: { invoke: { tool: "nika:read", args: { path: ./notes/calendar.md } } } triage: timeout: "600s" with: inbox: ${{ tasks.inbox.output }} infer: { prompt: "Reply with the single most urgent item, at most 10 words, no preface: ${{ with.inbox }}", max_tokens: 4096 } agenda: timeout: "600s" with: calendar: ${{ tasks.calendar.output }} infer: { prompt: "Reply with three bullets, at most 8 words each, no preface: ${{ with.calendar }}", max_tokens: 4096 } draft: timeout: "600s" with: notes: ${{ tasks.notes.output }} triage: ${{ tasks.triage.output }} agenda: ${{ tasks.agenda.output }} infer: prompt: "Write the morning brief as three short bullets, no preface. Notes: ${{ with.notes }} Urgent: ${{ with.triage }} Plan: ${{ with.agenda }}" max_tokens: 6144 verify: with: draft: ${{ tasks.draft.output }} invoke: tool: "nika:assert" args: condition: "${{ size(with.draft) > 0 }}" message: "Empty brief. Increase max_tokens or change model." save: after: { verify: success } with: draft: ${{ tasks.draft.output }} invoke: tool: "nika:write" args: { path: ./brief.md, content: "${{ with.draft }}" } outputs: brief: "${{ tasks.draft.output }}"