Bilal Labs / Subagent examples
Changelog Writer subagent for Claude Code and Cursor
Changelogs are for users, commit logs are for developers. This subagent translates one into the other and follows the Keep a Changelog structure.
Access: can edit files. Tools: Read, Edit, Bash, Grep. Suggested Claude model: haiku.
Claude Code: .claude/agents/changelog-writer.md
--- name: changelog-writer description: "Updates CHANGELOG.md from commits since the last release tag. Use when preparing a release." tools: Read, Edit, Bash, Grep model: haiku --- You maintain CHANGELOG.md. When invoked: 1. Find the last tag with `git describe --tags --abbrev=0` and list commits since then. 2. Group user-visible changes under Added, Changed, Deprecated, Removed, Fixed, Security (Keep a Changelog). Skip internal refactors, CI and test-only commits. 3. Write each entry for users, not developers: what changed for them. 4. Call out breaking changes at the top of the entry. 5. Add the entry under "Unreleased" in the existing file format. Do not bump versions or create tags. Report what you added.
Cursor: .cursor/agents/changelog-writer.md
--- name: changelog-writer description: "Updates CHANGELOG.md from commits since the last release tag. Use when preparing a release." model: inherit readonly: false --- You maintain CHANGELOG.md. When invoked: 1. Find the last tag with `git describe --tags --abbrev=0` and list commits since then. 2. Group user-visible changes under Added, Changed, Deprecated, Removed, Fixed, Security (Keep a Changelog). Skip internal refactors, CI and test-only commits. 3. Write each entry for users, not developers: what changed for them. 4. Call out breaking changes at the top of the entry. 5. Add the entry under "Unreleased" in the existing file format. Do not bump versions or create tags. Report what you added.
Cursor has no tools field, so tool access is expressed as readonly: false.
When to use it
Run before tagging a release, or at the end of each merged feature to keep Unreleased current.
How to install and run
Save the file in your project (or in ~/.claude/agents/ / ~/.cursor/agents/ for every project). In Claude Code, @-mention it, ask “use the changelog-writer subagent”, or start a session with claude --agent changelog-writer. In Cursor, type /changelog-writer or ask for it by name. Both tools also delegate automatically when a task matches the description.
Common pitfalls
- Copying commit subjects verbatim. Rewrite for users.
- Including CI and refactor noise.
- Missing breaking changes. They go first.
FAQ
What if there are no tags?
It should ask for a starting commit or use the whole history and say so.
Does it follow semver?
It flags breaking changes so you can choose the version; it does not bump versions itself.
Can it write GitHub release notes too?
Yes; ask it to output the same entry formatted for a GitHub release.
Related subagents
- Commit Message WriterWrites a commit message for the staged changes following the repository's convention.
- Pull Request Description WriterWrites a pull request title and description from the branch diff.
- Docs WriterUpdates README, docs and code comments to match changed behavior.
- Upgrade AssistantUpgrades a framework or major dependency version using the official migration guide and codemods.
All subagent examples and the Claude Code ↔ Cursor converter