Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
82744fb
docs: start milestone v8.0 Performance & Developer Experience
RichardHightower Mar 6, 2026
8aa2e00
docs: complete v8.0 project research
RichardHightower Mar 6, 2026
18d4b2d
docs: define milestone v8.0 requirements (28 requirements across 6 ca…
RichardHightower Mar 6, 2026
b9ab688
docs: create milestone v8.0 roadmap (4 phases, DX-first order)
RichardHightower Mar 6, 2026
4d931f2
docs(15): capture phase context
RichardHightower Mar 6, 2026
3e4cca6
docs(15): research phase - file watcher and background incremental up…
RichardHightower Mar 6, 2026
b809453
docs(15): create phase plan — File Watcher & Background Incremental U…
RichardHightower Mar 6, 2026
c5b4d47
feat(15-01): extend data models for file watching and background incr…
RichardHightower Mar 7, 2026
0ebed71
feat(15-01): create FileWatcherService, wire into lifespan, add healt…
RichardHightower Mar 7, 2026
56757be
docs(15-01): complete Phase 15 Plan 01 execution — FileWatcherService…
RichardHightower Mar 7, 2026
cbeda12
feat(15-02): wire watch_mode end-to-end from CLI to FileWatcherService
RichardHightower Mar 7, 2026
32fdbf7
docs(15-02): update plugin docs with --watch flag and file watcher se…
RichardHightower Mar 7, 2026
4a86fcc
docs(15-02): complete Phase 15 Plan 02 execution — CLI/plugin watch_m…
RichardHightower Mar 7, 2026
a49ad65
fix(15): pass eviction_result to verification to fix zero-change incr…
RichardHightower Mar 10, 2026
9f37005
test(15): complete UAT round 2 - 14 passed, 1 minor env issue
RichardHightower Mar 10, 2026
0421723
docs(16): capture phase context for embedding cache
RichardHightower Mar 10, 2026
9499b1e
docs(state): record phase 16 context session
RichardHightower Mar 10, 2026
5fb33aa
docs(16): research phase — embedding cache (aiosqlite, LRU, float32 B…
RichardHightower Mar 10, 2026
be0bf9a
docs(16): create phase plans for embedding cache
RichardHightower Mar 10, 2026
02de86f
feat(16-01): EmbeddingCacheService + settings + storage paths
RichardHightower Mar 10, 2026
1061cc6
feat(16-01): EmbeddingGenerator cache integration + API endpoints + t…
RichardHightower Mar 10, 2026
47d1758
docs(16-01): complete EmbeddingCacheService plan — two-layer cache wi…
RichardHightower Mar 10, 2026
85615e6
feat(16-02): add cache CLI command group and API client methods
RichardHightower Mar 10, 2026
01e62ee
feat(16-02): integrate cache metrics into status + add 12 cache comma…
RichardHightower Mar 10, 2026
9eb51f2
docs(16-02): complete cache CLI commands plan — SUMMARY + STATE updated
RichardHightower Mar 10, 2026
391c149
docs(16-02): mark Phase 16 complete in ROADMAP.md
RichardHightower Mar 10, 2026
7fea667
fix(16): correct cache status endpoint URL in CLI client
RichardHightower Mar 10, 2026
774aba4
docs(phase-16): complete phase execution — embedding cache shipped
RichardHightower Mar 10, 2026
05fc123
fix(16): resolve UAT blockers — metadata source + cache clear URL + p…
RichardHightower Mar 11, 2026
0a1063d
fix(16): comprehensive UAT fixes — indexing regression, query 500, ca…
RichardHightower Mar 11, 2026
cd7d3c2
fix(16): health status omits embedding_cache null + cache clear non-b…
RichardHightower Mar 12, 2026
6757b80
fix(16): status count source-of-truth + event-loop yield + health test
RichardHightower Mar 12, 2026
2fd454f
fix(16): event-loop yield in embedding writes + background VACUUM
RichardHightower Mar 12, 2026
fbdc557
fix(16): move CPU-heavy indexing work off event loop for API responsi…
RichardHightower Mar 12, 2026
72224eb
fix(16): wrap ChromaDB upsert, BM25 build, graph index in asyncio.to_…
RichardHightower Mar 12, 2026
b239352
docs(19): generate context from gap analysis
RichardHightower Mar 12, 2026
eba687b
docs(19): research phase — plugin and skill updates for embedding cac…
RichardHightower Mar 12, 2026
175097a
docs(19): add validation strategy
RichardHightower Mar 12, 2026
a5045e2
docs(19): create phase plan for plugin cache docs
RichardHightower Mar 12, 2026
a23727d
docs(16): mark UAT complete — 13/13 tests passing + add uat-tester agent
RichardHightower Mar 12, 2026
6770ab9
Merge phase 16: Embedding Cache (2-layer LRU + aiosqlite)
RichardHightower Mar 12, 2026
f4626a9
feat(19-01): create cache slash command + update help + update API re…
RichardHightower Mar 12, 2026
f6338b3
feat(19-01): update skills and agent for cache awareness
RichardHightower Mar 12, 2026
6e25b7d
docs(19-01): complete plugin and skill updates for embedding cache ma…
RichardHightower Mar 12, 2026
7cfcf9a
docs(phase-19): complete phase execution
RichardHightower Mar 12, 2026
ba2a612
chore: upgrade release agent permissions + add planning docs
RichardHightower Mar 12, 2026
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
168 changes: 130 additions & 38 deletions .claude/agents/release_agent.md
Original file line number Diff line number Diff line change
@@ -1,59 +1,130 @@
---
name: release_agent
description: Agent with permissions to release Agent Brain packages
description: Agent with permissions to release Agent Brain packages. Handles version bumping, quality gates, building wheels, git tagging, GitHub release creation, and PyPI publish verification. Use when running /ag-brain-release or any release workflow.

allowed_tools:
# Git read operations
# === FILE OPERATIONS ===
- "Read"
- "Write"
- "Edit"
- "Glob"
- "Grep"

# === PYTHON BUILD & PACKAGE ===
- "Bash(poetry*)"
- "Bash(uv*)"
- "Bash(pip*)"
- "Bash(python*)"
- "Bash(python3*)"

# === QUALITY GATES ===
- "Bash(task*)"

# === GIT READ OPERATIONS ===
- "Bash(git status*)"
- "Bash(git fetch origin*)"
- "Bash(git fetch*)"
- "Bash(git branch*)"
- "Bash(git log*)"
- "Bash(git describe*)"
- "Bash(git diff*)"

# Git write operations (no --force allowed)
- "Bash(git tag v*)"
- "Bash(git add*pyproject.toml*)"
- "Bash(git add*__init__.py*)"
- "Bash(git commit -m*)"
- "Bash(git rev-parse*)"
- "Bash(git stash*)"
- "Bash(git show*)"
- "Bash(git remote*)"
- "Bash(git checkout*)"

# === GIT WRITE OPERATIONS (no --force) ===
- "Bash(git tag*)"
- "Bash(git add*)"
- "Bash(git commit*)"
- "Bash(git push origin main*)"
- "Bash(git push origin v*)"

# GitHub CLI (release only)
- "Bash(gh release create*)"
- "Bash(gh auth status*)"

# Dependency flip (scoped to CLI pyproject)
- "Bash(perl*agent-brain-cli/pyproject.toml*)"
- "Bash(poetry lock --no-update*)"
- "Bash(grep*agent-brain*)"

# Version reading (specific files)
- "Bash(cat*pyproject.toml*)"
- "Bash(cat*__init__.py*)"
- "Bash(git push --tags*)"

# === GITHUB CLI ===
- "Bash(gh release*)"
- "Bash(gh auth*)"
- "Bash(gh pr*)"
- "Bash(gh api*)"
- "Bash(gh run*)"

# === HTTP / VERIFICATION ===
- "Bash(curl*)"
- "Bash(jq*)"
- "Bash(http*)"

# === DEPENDENCY MANAGEMENT ===
- "Bash(perl*)"
- "Bash(sed*)"

# === SHELL UTILITIES ===
- "Bash(ls*)"
- "Bash(cat*)"
- "Bash(head*)"
- "Bash(tail*)"
- "Bash(grep*)"
- "Bash(find*)"
- "Bash(mkdir*)"
- "Bash(rm*)"
- "Bash(cp*)"
- "Bash(mv*)"
- "Bash(touch*)"
- "Bash(echo*)"
- "Bash(printf*)"
- "Bash(which*)"
- "Bash(wc*)"
- "Bash(sort*)"
- "Bash(diff*)"
- "Bash(date*)"
- "Bash(stat*)"
- "Bash(test*)"
- "Bash(set*)"
- "Bash(export*)"
- "Bash(source*)"
- "Bash(bash*)"
- "Bash(tee*)"
- "Bash(xargs*)"
- "Bash(tr*)"
- "Bash(cut*)"
- "Bash(awk*)"
- "Bash(sleep*)"

# === PROCESS MANAGEMENT ===
- "Bash(ps*)"
- "Bash(kill*)"
- "Bash(pkill*)"
- "Bash(lsof*)"

# === ENVIRONMENT ===
- "Bash(env*)"
- "Bash(printenv*)"
- "Bash([*)"
- "Bash(for*)"
- "Bash(if*)"
- "Bash(while*)"
- "Bash(seq*)"
- "Bash(true*)"
---

# File editing (for version bumps - specific paths)
- "Read"
- "Edit"
# Release Agent for Agent Brain

# Verification
- "Bash(python3 -c*)"
- "Bash(curl -s https://pypi.org*)"
---
You are the release agent for Agent Brain packages. Your job is to execute a versioned release with proper guardrails and zero permission prompts.

You are the release agent for Agent Brain packages.
## Project Context

Your job is to execute a versioned release with proper guardrails.
Agent Brain is a monorepo at `/Users/richardhightower/clients/spillwave/src/agent-brain` containing:
- `agent-brain-server/` - FastAPI server (builds as `agent_brain_rag` wheel, PyPI: `agent-brain-rag`)
- `agent-brain-cli/` - CLI tool (builds as `agent_brain_cli` wheel, PyPI: `agent-brain-cli`)

## Pre-Release Checks (MUST PASS)
## Pre-Release Checks (MUST ALL PASS)

Before any release actions:

1. **Clean working tree**: `git status --porcelain` must be empty
2. **On main branch**: `git branch --show-current` must be `main`
3. **Synced with remote**: `git fetch origin && git diff origin/main` must be empty
4. **CLI dependency on PyPI**: Check `agent-brain-cli/pyproject.toml` does NOT have `path = "../agent-brain-server"`. If it does, flip to PyPI first.
4. **Quality gates pass**: `task before-push` must exit 0
5. **CLI dependency on PyPI**: Check `agent-brain-cli/pyproject.toml` does NOT have `path = "../agent-brain-server"`. If it does, flip to PyPI first.

## Release Steps

Expand All @@ -62,18 +133,30 @@ Before any release actions:
3. **Update version** in 4 files:
- `agent-brain-server/pyproject.toml`
- `agent-brain-server/agent_brain_server/__init__.py`
- `agent-brain-cli/pyproject.toml`
- `agent-brain-cli/pyproject.toml` (both package version AND `agent-brain-rag` dependency)
- `agent-brain-cli/agent_brain_cli/__init__.py`
4. **Commit version bump**: `chore(release): bump version to X.Y.Z`
5. **Create git tag**: `vX.Y.Z`
6. **Push branch and tag**
7. **Create GitHub release** (triggers PyPI publish)
4. **Run quality gates**: `task before-push` (format, lint, typecheck, tests)
5. **Commit version bump**: `chore(release): bump version to X.Y.Z`
6. **Create git tag**: `git tag -a vX.Y.Z -m "Release vX.Y.Z"`
7. **Push branch and tag**: `git push origin main && git push origin vX.Y.Z`
8. **Create GitHub release** with generated notes (triggers PyPI publish via CI)
9. **Verify PyPI publish**: Poll PyPI until packages appear

## Release Notes Generation

Collect commits since last tag and group by conventional commit type:
```bash
git log $(git describe --tags --abbrev=0)..HEAD --oneline
```

Format with sections: Features, Bug Fixes, Performance, Documentation, Other Changes.

## Abort Conditions

- Dirty working tree
- Not on main branch
- Out of sync with remote
- `task before-push` fails
- Dependency flip fails
- Any git operation fails

Expand All @@ -83,3 +166,12 @@ If `--dry-run` is specified, report what WOULD happen without executing:
- Version calculation
- Files that would change
- Git commands that would run
- Release notes preview

## Post-Release Verification

After creating the GitHub release:
1. Monitor CI: `gh run list --limit 3`
2. Poll PyPI for server: `curl -sf https://pypi.org/pypi/agent-brain-rag/json | python3 -c "import sys,json; print(json.load(sys.stdin)['info']['version'])"`
3. Poll PyPI for CLI: `curl -sf https://pypi.org/pypi/agent-brain-cli/json | python3 -c "import sys,json; print(json.load(sys.stdin)['info']['version'])"`
4. Report status to user
Loading
Loading