Releases: speakeasy-api/granary
v1.2.2
1.2.2
Prior art no longer includes the current project
granary plan searches for related prior art when creating a new project. Previously, the just-created project would appear in its own prior art results, which was confusing and unhelpful.
The find_prior_art function now accepts an exclude_id parameter and filters out the current project before returning results. This means prior art suggestions only contain genuinely distinct projects.
Includes tests covering both the exclusion logic and the edge case where the only search match is the excluded project itself.
v1.2.1
1.2.1
Automated release pipeline
Releases are now fully automated using boop. When a PR with changelog fragments merges to main, CI automatically:
- Resolves the next semver version from pending fragments
- Updates
Cargo.tomlandCargo.lock - Commits, tags, and pushes the release
- Builds cross-platform binaries (macOS, Linux, Windows)
- Publishes a GitHub Release with structured release notes
This replaces the previous tag-push workflow, which required manual version bumping and tag creation — a process that was error-prone and led to version drift between Cargo.toml and GitHub releases.
New /shipit developer command
Contributors can now run /shipit in Claude Code to prepare a release PR. It analyzes your branch's changes, determines the appropriate semver bump, records a changelog fragment via boop, and opens a PR — all in one step.
Updated finalize workflow
The finalize skill now delegates to /shipit instead of requiring manual version bumps in Cargo.toml. Version management is fully handled by CI going forward.
v1.2.0
Composable Actions with Registry and Pipelines
This release implements RFC 0001: Composable Actions (Pipelines) — a complete actions system that turns granary into a composable workflow engine. Actions are small, focused TOML definitions that can be used standalone or wired together into multi-step pipelines.
What's new
- Actions registry with namespaced action definitions (
git/worktree-create,agents/claude-work,notify/macos) - Pipeline execution — chain multiple actions into multi-step workflows with output passing between steps
- Template extensions —
{steps.<name>.stdout},{steps.<name>.exit_code},{prev.stdout},{prev.exit_code}for wiring step outputs granary actionCLI —show,run,list,add,remove,installsubcommandsgranary action run— one-shot execution of any action (simple or pipeline) outside the worker/event system, with--dry-runand--set key=valuefor testing- 9 bundled registry actions across
git/,agents/, andnotify/namespaces - Worker pipeline support — workers automatically detect pipeline actions and execute them with per-step stdout capture, log delimiters, and error handling
on_errorper step —stop(default) orcontinueto control pipeline behavior on failures- Runner-action inheritance —
worker start --runnerresolves the runner's backing action, inheriting command/args/env with worker-level overrides
Examples
Pure registry composition — install building blocks, compose locally:
granary action install git/worktree-create
granary action install agents/claude-work
granary action install notify/macos# ~/.granary/actions/worktree-claude.toml
description = "Isolated worktree workflow with Claude"
on = "task.next"
concurrency = 2
[[steps]]
action = "git/worktree-create"
[[steps]]
action = "agents/claude-work"
cwd = "{steps.git/worktree-create.stdout}"
[[steps]]
action = "notify/macos"
on_error = "continue"Multi-agent pipeline — plan with one model, implement with another:
[[steps]]
name = "plan"
command = "claude"
args = ["-p", "$(granary work start {id})\n\nCreate a detailed plan.", "--model", "opus"]
[[steps]]
name = "implement"
command = "claude"
args = ["-p", "Implement this plan:\n\n{steps.plan.stdout}", "--model", "sonnet"]Code review pipeline — generate diff, review, notify:
[[steps]]
action = "git/diff"
[[steps]]
name = "review"
command = "claude"
args = ["-p", "Review this diff:\n\n{prev.stdout}"]
[[steps]]
action = "notify/slack"
[steps.env]
SLACK_MESSAGE = "{steps.review.stdout}"One-shot testing of any action:
granary action run worktree-claude --set id=task-123
granary action run agents/claude-work --set id=task-123 --dry-runInline pipelines in config.toml:
[actions.my-workflow]
description = "Inline pipeline"
[[actions.my-workflow.steps]]
action = "git/worktree-create"
[[actions.my-workflow.steps]]
action = "agents/claude-work"
cwd = "{prev.stdout}"Bundled Registry Actions
| Namespace | Action | Description |
|---|---|---|
git/ |
worktree-create |
Create isolated git worktree, stdout: path |
git/ |
worktree-remove |
Remove a git worktree |
git/ |
diff |
Generate diff output |
agents/ |
claude-work |
Run a task with Claude Code |
agents/ |
codex-work |
Run a task with Codex |
agents/ |
cursor-work |
Run a task with Cursor |
agents/ |
opencode-work |
Run a task with OpenCode |
notify/ |
macos |
macOS system notification |
notify/ |
slack |
Post to Slack webhook |
Full Changelog: v1.1.0...v1.2.0
v1.1.0
What's New
Actions System
Actions are reusable command configurations that can be shared across runners. This release introduces a layered override system for worker configuration.
Define actions as standalone files in ~/.granary/actions/<name>.toml:
command = "claude"
args = ["code", "--task"]
concurrency = 2
on = "task.unblocked"
[env]
CLAUDE_MODEL = "opus"Or inline in ~/.granary/config.toml:
[actions.my-action]
command = "claude"
args = ["code", "--task"]
on = "task.unblocked"Runners can inherit from actions via the action field:
[runners.my-runner]
action = "my-action"
concurrency = 4 # overrides the action's concurrencyOverride chain: action defaults → runner config → CLI arguments.
New CLI Commands
granary config actions— list, add, update, remove, and show actionsgranary worker start --action <name>— start a worker directly from an action
Silo GUI
- Settings screen now has an "Actions" section for managing actions
- Workers screen shows "Available Actions" alongside runners with quick-start buttons
Fully Backwards Compatible
All existing runner configurations and CLI usage continue to work unchanged. The action field on runners is optional and defaults to None.
v1.0.0
Granary v1.0.0
The first stable release of granary — a context hub for agentic work.
Silo: Native GUI
A full desktop app built with Iced. Browse projects, tasks, initiatives, runs, workers, settings, and logs — all without touching the terminal. Ships as Silo.app on macOS.
Trigger-Based Event System
Events now fire via SQLite triggers instead of application-level polling. Atomic claim-based consumption prevents double-processing across consumers. New granary events command for listing, filtering, watching, and draining.
CLI Redesign
- Entity-first subcommands —
run <id> stopinstead ofrun stop <id> - Merged singular/plural —
projectandprojectsare the same command - Forgiving argument resolution — positional-to-flag coercion on creation commands
- Visible aliases on all actions and top-level commands
Global-First Workspaces
Workspaces default to global scope. Named workspaces resolve correctly in daemon worker startup.
granary doctor --fix
Scans workspace and global agent files for granary instructions. --fix auto-injects missing ones.
Output Mode Enforcement
Strict handling of --output across all commands: table, JSON, and prompt modes.
Shared Types Crate
Models extracted into granary-types for reuse across granary, granaryd, and silo. Strongly-typed IDs throughout.
Full Changelog: v0.9.0...v1.0.0
v0.9.0
LLM-First CLI Redesign
Major UX overhaul making granary self-documenting for AI agents.
Highlights
- Self-guiding CLI output - every command's output now serves as a complete tutorial; agents told to "use granary" can discover and complete any workflow by following output alone
granary initagent config injection - automatically injects "use granary" instructions into CLAUDE.md, .cursorrules, .github/copilot-instructions.md, and AGENTS.md (both global and local)granary work- new command for agents to create and manage work sessions with structured contextgranary plan- new planning command for agents to outline approach before execution- Agent file service - new service (1.2k lines) that detects, reads, and updates agent configuration files across all major AI coding tools
- First-run experience - guided onboarding flow for new users
- Integration tests - agent file detection/injection tests and first-run integration tests
Full Changelog: v0.8.0...v0.9.0
v0.8.0
Watch Mode & Organization Move
Highlights
--watchflag - continuous polling mode for 8 list commands (tasks,projects,workers,runs,sessions,initiatives,search,summary) with configurable--intervaland clean terminal refresh- Moved to
speakeasy-apiorg - repository transferred fromdanielkov/granarytospeakeasy-api/granary - Improved getting started docs - added missing plugin install step for Claude Code setup
- Install script fixes - more robust JSON parsing and version extraction in install scripts
Full Changelog: v0.7.0...v0.8.0
v0.7.0
Workers & Daemon System
Major release adding background task execution via a daemon-based worker system.
Highlights
- Worker daemon - Unix socket-based daemon (
granary daemon start/stop/status) that manages background worker processes with automatic lifecycle management - Worker runtime - task execution engine with template variable substitution, event polling, and run tracking
granary worker/granary run- CLI commands for registering workers and viewing run history- Pre-release aware versioning - install scripts filter pre-releases by default;
--toflag andGRANARY_VERSIONfor pinning specific versions - Global config - new
~/.granary/config.tomlfor persistent user preferences - Event system - event poller and filter services for reactive worker triggers
- Table output - new table formatter for richer terminal display
- New DB migrations - tables for workers, runs, polled events, and cursor tracking
- Claude Getting Started docs - documentation for integrating granary with Claude Code
- Comprehensive test suite - daemon integration tests, worker tests, filter tests, template tests, and run service tests (+15k lines)
Full Changelog: v0.6.1...v0.7.0
v0.7.0-alpha.1
Pre-release: Workers & Pre-release Versioning
Alpha preview of the workers system and pre-release version support.
Highlights
- Pre-release aware versioning - install scripts now correctly filter pre-releases;
GRANARY_VERSIONenv var allows pinning to specific versions including pre-releases granary update --to <version>- install a specific version, including pre-releases- Worker daemon (preview) - Unix socket-based daemon for background task execution with worker management, event polling, and run tracking
Full Changelog: v0.6.1...v0.7.0-alpha.1
v0.6.1
Self-Update & Vendored TLS
Highlights
granary update- check for and install new versions directly from the CLI, with 24h cached update checks surfaced in--versionoutputgranary update --check- non-destructive version check against GitHub releases- Vendored TLS - switched to vendored OpenSSL so builds work on musl/Alpine Linux without system TLS dependencies
Full Changelog: v0.5.0...v0.6.1