Changelog draft for the week of Oct 12
23 issues completed this week; 9 lines made the changelog after 14 internal issues were left out.
Every Friday: the issues completed in Linear this week, filtered to what customers will notice and rewritten as a short changelog ready to edit.
What lands on your board
23 issues completed this week; 9 lines made the changelog after 14 internal issues were left out.
The list of issues completed this week is not a changelog. Half of it is internal work, and the rest is titled for the people who built it, not the people who will use it.
Every Friday the agent takes the week's completed issues, drops internal ones by label, merges issues from the same project into one line, and rewrites the rest in plain second person: what you can do now that you could not before. Product managers get a draft to edit instead of a list to translate.
Query issues(filter: { completedAt: { gt: "-P7D" }, team: { key: { in: ["ENG", "WEB"] } } }, first: 200) with identifier title description labels { nodes { name } } project { name } parent { identifier } url. Linear accepts ISO 8601 durations like -P7D as dates relative to now.
Leave out issues labelled internal, chore, tech-debt or infra, and sub-issues whose parent is also on the list. Small fixes stay in: they are often what a customer wrote in about.
New for capabilities that did not exist, Improved for changes to something that did, Fixed for bugs. Issues from the same project become one line.
Each line says what changed for the user, without issue IDs, code names or team names: "Duplicate a dashboard from its menu, filters included." Keep the identifiers behind each line in a separate list for your reference.
Markdown with a dated heading and at most 10 lines across the three sections. Name the plan or flag for anything that not every customer gets.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/linear-weekly-changelog/install | shAsk Claude Code:
promptRun the linear-weekly-changelog skillOr paste the prompt instead of installing:
promptUsing the Linear GraphQL API (or the Linear MCP server), list issues completed in the last 7 days (completedAt greater than -P7D) for teams ENG and WEB, with title, description, labels, project and parent. Drop internal work (labels internal, chore, tech-debt, infra) and sub-issues whose parent is in the list. Write a customer-facing changelog in Markdown with New, Improved and Fixed sections, at most 10 lines, each saying what the user can now do in plain second-person language, with no issue IDs or internal names. Note anything behind a plan or feature flag. After the changelog, list the Linear identifiers behind each line and how many issues you left out.Fridays at 14:00, from cron on any machine where Claude Code is signed in:
crontab0 14 * * 5 claude -p "Run the linear-weekly-changelog skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: linear-weekly-changelog
description: "Every Friday: the issues completed in Linear this week, filtered to what customers will notice and rewritten as a short changelog ready to edit. Use when the user asks for this, or when it runs on a schedule."
---
# Linear weekly changelog
Every Friday: the issues completed in Linear this week, filtered to what customers will notice and rewritten as a short changelog ready to edit.
The list of issues completed this week is not a changelog. Half of it is internal work, and the rest is titled for the people who built it, not the people who will use it.
Every Friday the agent takes the week's completed issues, drops internal ones by label, merges issues from the same project into one line, and rewrites the rest in plain second person: what you can do now that you could not before. Product managers get a draft to edit instead of a list to translate.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- Read access to the teams whose work belongs in the changelog.
- The Linear MCP server or connector, or a read-only Linear API key in `LINEAR_API_KEY`.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Collect completed issues** (Linear): Query `issues(filter: { completedAt: { gt: "-P7D" }, team: { key: { in: ["ENG", "WEB"] } } }, first: 200)` with `identifier title description labels { nodes { name } } project { name } parent { identifier } url`. Linear accepts ISO 8601 durations like `-P7D` as dates relative to now.
2. **Drop what customers never see**: Leave out issues labelled `internal`, `chore`, `tech-debt` or `infra`, and sub-issues whose parent is also on the list. Small fixes stay in: they are often what a customer wrote in about.
3. **Group and merge**: New for capabilities that did not exist, Improved for changes to something that did, Fixed for bugs. Issues from the same project become one line.
4. **Rewrite for customers**: Each line says what changed for the user, without issue IDs, code names or team names: "Duplicate a dashboard from its menu, filters included." Keep the identifiers behind each line in a separate list for your reference.
5. **Hand over the draft**: Markdown with a dated heading and at most 10 lines across the three sections. Name the plan or flag for anything that not every customer gets.
## Route B: the browser
### What you need
- Signed in to Linear with read access to the ENG and WEB teams; guests see only the teams they were invited to.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://linear.app/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Open the team's issues**: In the sidebar, open the first team (ENG) and click **Issues**, then the **All** tab so completed issues are included. Do the same for WEB afterwards, or use the **Issues** entry at the top of the sidebar for all teams at once.
2. **Filter to this week's completed work**: Click **Filter**, add `Status` is `Completed`, then add `Completed date` and pick the option for the past week. Add `Labels` is not `internal`, `chore`, `tech-debt`, `infra`. In **View options**, group by `Project` and show `Labels` and `Parent`.
3. **Read the list**: Open any issue whose title does not explain the change and read the description. Skip sub-issues whose parent is also in the list. Note each issue's identifier and project.
4. **Write the changelog**: Sort into New, Improved and Fixed, merge issues from the same project into one line, and rewrite each in plain second person without identifiers, code names or team names. Keep the identifiers in a separate list.
5. **Record what was left out**: Remove the label filter for a moment and read the count in the view header, so the draft can say how many internal issues were skipped.
Note: The issue list loads more rows as you scroll; a team that completes more than a couple of hundred issues a week is better served by the API route or a CSV export from Settings > Administration > Import / Export.
## The report
- A Markdown changelog for the week, with **New**, **Improved** and **Fixed** sections.
- One line per change, in customer language.
- **Left out**: how many internal issues were skipped, so you can check nothing public was dropped.
- **Sources**: the Linear identifiers behind each line.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "linear-weekly-changelog/<date of this run, e.g. 2026-10-16>",
"item_key": "linear-weekly-changelog",
"project": "Acme",
"source": "Linear weekly changelog skill",
"kind": "update",
"title": "Changelog draft for the week of Oct 12",
"summary": "23 issues completed this week; **9 lines** made the changelog after 14 internal issues were left out.",
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Section",
"Change"
],
"rows": [
[
"New",
"Duplicate a dashboard from its menu, filters included"
],
[
"New",
"Schedule a report to arrive by email (Business plan)"
],
[
"Improved",
"Search finds customers by phone number"
],
[
"Improved",
"The invoice list loads 50 rows at a time instead of 20"
],
[
"Improved",
"Team invites stay valid for 14 days instead of 3"
],
[
"Fixed",
"Charts no longer show a gap at midnight in your time zone"
],
[
"Fixed",
"CSV imports accept files saved by Excel on a Mac"
],
[
"Fixed",
"The Save button stays visible while you scroll long forms"
],
[
"Fixed",
"Email digests no longer arrive twice after an address change"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Scheduled reports are Business-only, so that line names the plan.",
"tone": "info"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Fridays at 14:00 (`0 14 * * 5`). From cron, with the agent signed in on that machine:
```bash
0 14 * * 5 claude -p "Run the linear-weekly-changelog skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/linear-weekly-changelog#schedule
Source: https://briefkin.dev/skills/linear-weekly-changelog
Read access to the teams whose work belongs in the changelog.
The Linear MCP server or connector, or a read-only Linear API key in LINEAR_API_KEY.
https://mcp.linear.app/mcp. Add Linear from Claude's connector directory, or run claude mcp add --transport http linear https://mcp.linear.app/mcp in Claude Code, and sign in with OAuth.LINEAR_API_KEY, and send it as the Authorization header with no Bearer prefix. For a workspace bot, an OAuth app with the read scope does the same job.When you create the key, give it Read access and only the teams in the report; it then can't create or edit issues.
No, it drafts. Paste it into your changelog page, help center or release email after a read-through. If your changelog lives in a docs repo, you can ask the agent to open a pull request with the draft as a separate step.
Linear does not know what is deployed. If you ship behind flags or on a release train, add a label such as released when it goes out and filter on that label instead of completedAt.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the Linear pages themselves: the agent opens linear.app in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.