Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,31 @@ jobs:
- name: Run tests
run: go test ./...

- name: Extract release notes from CHANGELOG.md
env:
TAG_NAME: ${{ github.ref_name }}
run: |
VERSION="${TAG_NAME#v}"
if ! grep -qE "^## \[?${VERSION}\]?" CHANGELOG.md; then
echo "::error::No CHANGELOG.md section found for ${VERSION}. Add a '## [${VERSION}] - YYYY-MM-DD' heading before tagging."
exit 1
fi
NOTES=$(awk -v v="${VERSION}" '
$0 ~ "^## \\[?" v "\\]?" { flag=1; next }
flag && /^## / { exit }
flag && /^\[[^]]*\]: / { next }
flag { print }
' CHANGELOG.md)
{
echo "RELEASE_NOTES<<NOTES_EOF"
echo "$NOTES"
echo "NOTES_EOF"
} >> "$GITHUB_ENV"

- uses: goreleaser/goreleaser-action@v6
with:
version: "~> v2"
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_NOTES: ${{ env.RELEASE_NOTES }}
13 changes: 13 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,21 @@ checksum:

changelog:
sort: asc
groups:
- title: "Features"
regexp: '^.*?feat(\([^)]+\))?!?:.+$'
order: 0
- title: "Bug fixes"
regexp: '^.*?fix(\([^)]+\))?!?:.+$'
order: 1
- title: "Other"
order: 999
filters:
exclude:
- "^docs:"
- "^chore:"
- "^ci:"

release:
header: |
{{ .Env.RELEASE_NOTES }}
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Changelog

All notable changes to agentctl are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Add new work under `## [Unreleased]`. On release, rename the section to the new
version and date, and the release workflow will lift it into the GitHub Release
notes automatically.

## [Unreleased]

## [0.0.1] - 2026-04-11

First tagged release of agentctl — a small Go toolkit for gating, tracing, and
replaying high-risk agent actions.

### Added

- **`agentctl gate`** — deterministic policy evaluation against the action
schema in `pkg/schema`, with YAML policies (see `agentctl.policy.yaml`).
- **`agentctl trace`** — reliable append-only trace storage for every gated
decision, kept in the agentctl home directory.
- **`agentctl replay`** — inspect and replay recorded decisions for incident
review and policy iteration.
- **Local HTTP server and approval workflow** — `agentctl serve` exposes a
local API for gate/trace/replay plus an approval endpoint for escalations.
- **MCP server** (`agentctl mcp`) — expose agentctl to MCP clients.
- **Claude Code hook adapter** — gate tool calls from Claude Code via hooks.
- **VS Code extension** — approvals panel and trace viewer.
- **OpenAPI contract** (`api/openapi.yaml`) and generated JS / Python SDKs
under `sdk/` — the OpenAPI spec is the source of truth for cross-language
clients.
- **Release pipeline** — cross-platform binaries for linux, darwin, windows
across amd64 and arm64, built and published via goreleaser.

[Unreleased]: https://github.com/chocks/agentctl/compare/v0.0.1...HEAD
[0.0.1]: https://github.com/chocks/agentctl/releases/tag/v0.0.1
Loading