AGPL-3.0-or-later · forever.

showcase · tier 4 · research

Deep research brief

A fast model writes the plan, an agent works the web inside hard budgets, a thinking model writes the brief.

“Get me up to speed by Thursday” becomes a pipeline you can audit end to end. · conformance-gated in nika-spec ↗ · re-proven at every push

The whole file

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

t4-deep-research-brief.nika.yamlsource
nika: v1workflow:  id: deep-research-brief  description: "plan → budgeted research agent → thinking synthesis → brief on disk"model: ollama/qwen3.5:4b   # local default · per-task overrides below pick stronger modelsvars:  topic:    type: string    required: true    description: "What to research"tasks:  plan:    infer:      model: anthropic/claude-haiku-4-5    # planning is a fast-model job      prompt: "Break '${{ vars.topic }}' into 4 sharp research queries · no overlap."      schema:        type: object        required: [queries]        properties:          queries:            type: array            items: { type: string }  investigate:    with:      plan_queries: ${{ tasks.plan.output.queries }}    agent:      system: |        You are a rigorous researcher. Work the queries one by one ·        fetch sources · keep verbatim quotes · note what each source        actually supports. Call nika:done when the plan is exhausted.      prompt: "Research plan · ${{ with.plan_queries }}"      tools:        - "nika:fetch"                 # the web        - "nika:write"                 # scratch notes        - "nika:done"                  # the loop-completion sentinel      max_turns: 25      max_tokens_total: 150000      schema:        type: object        required: [findings, sources]        properties:          findings:            type: array            items: { type: string }          sources:            type: array            items: { type: string }  brief:    with:      investigate_findings: ${{ tasks.investigate.output.findings }}      investigate_sources: ${{ tasks.investigate.output.sources }}    infer:      prompt: |        Findings · ${{ with.investigate_findings }}        Sources · ${{ with.investigate_sources }}        Write the executive brief · what's true · what's contested ·        what it means · what to do. Two pages max.      thinking:        enabled: true        budget_tokens: 8000  save:    with:      brief: ${{ tasks.brief.output }}    invoke:      tool: "nika:write"      args:        path: "./research/${{ vars.topic }}.md"        content: "${{ with.brief }}"        create_dirs: trueoutputs:  brief: ${{ tasks.brief.output }}  sources:    value: ${{ tasks.investigate.output.sources }}    description: "Every source the agent actually used"

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

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