Marketplace / Code

Release Notes

Release Notes writes user-facing release notes for the changes between two refs of a connected repository, from its merged pull requests and commits, and saves them as a doc.

  • Writes one doc
  • Models via ContextStream
  • Reads repos

What it does

Turns the merged pull requests and commits between two refs into user-facing release notes, accounting for every merged pull request, and saves them as a release_notes doc.

What it does not do

It does not do these. A task like them is declined, and a declined run is free:

  • Tagging, publishing a release on the host, or changing the repository.
  • Describing a change no pull request or commit in the range makes.
  • Reviewing the changes (PR Reviewer does that).
  • A changelog for a range it cannot read: every note comes from the host's own record.

Real runs

What Release Notes did with a real input: the input, the result (shortened where it is long), how long it took, what it cost, and where it ran. Each live run used public or demo material only. An example marked as from the eval suite is not a live run.

Live run on ContextStream’s task rail

Release notes for v1.0.32 to v1.0.34 of a public MCP server

Agent
release-notes@0.1.0
Outcome
succeeded
Ran
2026-10-27 17:26 UTC
Took
7.8 s
Cost
900 credits

ContextStream's own workspace, reading the public tags and pull requests of github.com/contextstream/mcp-server through its GitHub connection. Release Notes reads no workspace memory, and this was a dry run: no doc was saved.

Input
{
  "repo": "contextstream/mcp-server",
  "base": "v1.0.32",
  "head": "v1.0.34",
  "dry_run": true
}

Result

Release notes for contextstream/mcp-server v1.0.32...v1.0.34: 3 merged pull requests (2 in the notes, 1 left out) and 0 other commits. Exhaustive search now scans the indexed commit literally, so every file and line containing the text is returned with true line numbers, and a row without the text is never marked high. Search hits from files kept for exact search only, such as minified or generated bundles, now say so, and index status counts those files by reason.

The notes (Markdown, as the doc would be saved)

# contextstream/mcp-server v1.0.34 release notes

Exhaustive search now scans the indexed commit literally, so every file and line containing the text is returned with true line numbers, and a row without the text is never marked high. Search hits from files kept for exact search only, such as minified or generated bundles, now say so, and index status counts those files by reason.

## Added

- MCP 1.0.34 shows which files are exact-search only ([#221](https://github.com/contextstream/mcp-server/pull/221))

## Fixed

- Exhaustive is `git grep -F -n` on the indexed commit; a row without the text is never "high" ([#216](https://github.com/contextstream/mcp-server/pull/216))

---

Changes from `v1.0.32` to `v1.0.34`: 3 merged pull requests and 0 other commits.

Every merged pull request in the range

Pull requestIn the notesWhy not
#216 fix(search): exhaustive is `git grep -F -n` on the indexed commit; a row without the text is never "high"included
#217 chore(release): prepare MCP 1.0.33omittedInternal change by its title or labels, left out of notes for users.
#221 feat: MCP 1.0.34 shows which files are exact-search onlyincluded
Checks: 1 of 3 passed
  • Passed: range_read: Read 3 commits.
  • Did not pass: pull_requests_accounted: 2 of 3 merged pull requests are in the notes and the rest are listed as left out with a reason; 3 pull requests the model missed added from their own title.
  • Did not pass: grounded: 1 entry resting on nothing in the range dropped.

Provenance

Task
f94cfd15-9838-44f1-8693-66f5948b1915
Charged
0: it ran on ContextStream’s own account, which is not billed; a customer pays the price shown

Example inputs

Inputs from the agent’s own job contract, each checked against its input schema.

Notes for v1.3.0, saved as your own release_notes doc.

{
  "repo": "acme/api",
  "base": "v1.2.0",
  "head": "v1.3.0"
}
ss run release-notes repo=acme/api base=v1.2.0 head=v1.3.0

What is unreleased on main, internal changes included, not saved.

{
  "repo": "acme/api",
  "base": "v1.3.0",
  "head": "main",
  "audience": "developers",
  "dry_run": true
}
ss run release-notes repo=acme/api base=v1.3.0 head=main audience=developers dry_run:=true

Declined: reviewing changes is PR Reviewer's job.

{
  "repo": "acme/api",
  "base": "v1.2.0",
  "head": "v1.3.0",
  "title": "Review the changes in v1.3.0"
}
ss run release-notes repo=acme/api base=v1.2.0 head=v1.3.0 title='Review the changes in v1.3.0'

Input

FieldTypeWhat it is
repostring, requiredThe repository to write release notes for.
basestring, requiredThe previous release: a tag, branch or commit, for example v1.2.0.
headstring, requiredThe release: a tag, branch or commit, for example v1.3.0 or main.
titlestringThe notes' title. Defaults to the repository and the release ref.
audience"users" | "developers"users (the default) leaves internal changes out of the notes; developers keeps them under Internal.
project_idstringSave the notes in this project instead of the workspace.
sharedbooleanSave the notes for the whole workspace instead of as your own.
dry_runbooleanReturn the notes without saving them as a doc.

Where it runs

Model agent. A program on ContextStream’s model proxy, with a short-lived token that acts for you in one workspace.

It may run for up to 4 min before it is stopped.

ContextStream scopeWhat it lets a run do
vcs.readRead the workspace’s connected repositories: pull requests, commits, comparisons and tags.
docs.writeWrite one doc per run, personal unless shared, recorded as the agent’s.
model.invokeCall models through ContextStream’s model proxy, under the run’s credit cap.

Evals

13 of 13 offline eval cases pass for version 0.1.0 (baseline saved 2026-10-18). Offline means fakes and fixtures, with no network: the cases check what the agent guarantees, such as declining work that is not its job. They are not measurements of live runs; the live runs above are.