Skip to content

Release Notes

Quickstart

Draft release notes for a project and print the result. ReleasePreparationWorkflow.execute is an async coroutine, so drive it with asyncio.run (or await it inside an existing event loop):

import asyncio

from attune.workflows import ReleasePreparationWorkflow


async def main() -> None:
    workflow = ReleasePreparationWorkflow()
    result = await workflow.execute(path=".")

    print(result.success)          # True on a completed run
    print(result.summary)          # readiness score + go/no-go
    print(result.final_output)     # the synthesized report + changelog


asyncio.run(main())

depth defaults to "standard", so execute(path=".") is equivalent. Use "quick" for a fast pass or "deep" for the fullest treatment.

Tasks

Draft release notes from the CLI

Goal: draft a changelog and get a go/no-go recommendation without writing any Python.

Steps:

# Default depth (standard) at the project root:
attune workflow run release-notes --path .

# Deep advisory, JSON output:
attune workflow run release-notes --path . --depth deep --json

Verify: the slug is release-notes. --path / -p defaults to the current directory; --depth accepts quick, standard, or deep; --json / -j emits machine-readable output. Use attune workflow info release-notes to confirm registration. The report includes a readiness score, the drafted changelog, and prioritized next steps — this is advice, not a gate.

Draft release notes from Python

Goal: wire the advisory into a release hook or pipeline and act on the result.

Steps:

import asyncio

from attune.workflows import ReleasePreparationWorkflow


async def main() -> None:
    workflow = ReleasePreparationWorkflow()
    result = await workflow.execute(path=".", depth="deep")

    if not result.success:
        print("advisory failed:", result.error)
        return

    print(result.final_output)     # synthesized report + changelog
    for action in result.suggestions:
        print(action)


asyncio.run(main())

Verify: execute is a coroutine — await it. A completed run returns success=True with the report in final_output; a failure returns success=False with a populated error. metadata echoes the path, depth, and max_turns.

Keep the advisory cheap

Goal: run the advisory at the lowest cost.

Steps:

import asyncio

from attune.workflows import ReleasePreparationWorkflow


async def main() -> None:
    workflow = ReleasePreparationWorkflow()
    result = await workflow.execute(path=".", depth="quick")
    print(result.summary)


asyncio.run(main())

Verify: quick uses the smallest agent-turn budget (10) and the lowest cap ($2). To let a deep pre-release run finish without a cap, export ATTUNE_MAX_BUDGET_USD=0. Subscription users pay no per-request cost regardless.

Reference

Release-notes' public surface is the ReleasePreparationWorkflow class, re-exported from attune.workflows. WorkflowResult comes from attune.workflows as well.

ReleasePreparationWorkflowattune.workflows.release_prep

Symbol Purpose
ReleasePreparationWorkflow() Construct the workflow. Takes no special constructor arguments.
ReleasePreparationWorkflow.execute(**kwargs) Async. Draft release notes + advisory. Honors path (str, required) and depth ("quick" / "standard" / "deep", default "standard"). Returns a WorkflowResult.
ReleasePreparationWorkflow.name The registered slug, "release-notes".
ReleasePreparationWorkflow.stages ["agent-prep"]; the stage runs at the CAPABLE model tier.

Depth → turns and budget

Depth Max turns Budget cap Use when
quick 10 $2 A fast pass for an early read.
standard 20 $10 The default — balanced coverage and cost.
deep 40 $25 The fullest treatment before a major release.

The four subagents

Subagent Role
health-checker Runs tests, checks dependency/lock status, verifies CI.
security-scanner Flags vulnerabilities, secrets, eval/exec, path traversal.
changelog-generator Drafts a Keep a Changelog section from git log.
release-assessor Judges overall readiness and gives a go/no-go.

WorkflowResult fields read after a run

Field Type Meaning
success bool Whether the run completed.
final_output Any The synthesized report — a serialized report when findings parse, else the raw markdown.
summary str \| None Readiness score + go/no-go overview.
suggestions list[NextAction] Prioritized next steps, including blockers.
cost_report CostReport Cost / usage for the run.
provider str The provider that served the run ("anthropic").
metadata dict Echoes path, depth, and max_turns; carries SDK error fields on failure.
error str \| None Failure reason. (error_type and transient exist on WorkflowResult but this workflow's failure path leaves them unset.)

Entry points

Surface Invocation
MCP tool release_notes(path=<p>) — changelog draft + go/no-go advisory (reached via the /release skill).
CLI attune workflow run release-notes --path <p> [--depth quick\|standard\|deep] [--json].
Python await ReleasePreparationWorkflow().execute(path=<p>, depth=<d>).