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
20 changes: 20 additions & 0 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "agent-pool",
"description": "Expert pool — delegate questions and tasks to domain specialists via a mixture-of-experts model",
"author": {
"name": "Cameron Sjo",
"url": "https://github.com/cameronsjo"
},
"repository": "https://github.com/cameronsjo/agent-pool",
"license": "MIT",
"keywords": [
"agent-pool",
"experts",
"mixture-of-experts",
"delegation",
"multi-agent",
"mcp",
"concierge",
"architect"
]
}
22 changes: 22 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,25 @@ jobs:
name: coverage-report
path: coverage.out
retention-days: 7

build:
runs-on: ubuntu-latest
strategy:
matrix:
goos: [linux, darwin]
goarch: [amd64, arm64]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: "0"
run: |
mkdir -p bin
go build -ldflags="-s -w" -o bin/agent-pool-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/agent-pool
Comment thread
coderabbitai[bot] marked this conversation as resolved.
56 changes: 56 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
goos: [linux, darwin]
goarch: [amd64, arm64]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: "0"
run: |
mkdir -p dist
go build -ldflags="-s -w" -o dist/agent-pool-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/agent-pool

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: agent-pool-${{ matrix.goos }}-${{ matrix.goarch }}
path: dist/agent-pool-*

release:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true

- name: Create release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: dist/agent-pool-*
File renamed without changes.
99 changes: 91 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,97 @@
# Changelog

All notable changes to this project will be 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).
All notable changes to Agent Pool are documented here.

## [Unreleased]

### Added
## [0.9.0] — 2026-04-07

Formulas and operational hardening.

- Formula parsing (`internal/formula/`) with TOML templates, DAG validation
- `instantiate_formula` architect MCP tool for bulk task creation
- Config hot-reload via fsnotify on `pool.toml`
- `EventConfigReloaded` event type
- `formulas/` directory in pool structure
Comment on lines +7 to +15

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check if v0.9.0 is tagged in the repository.

# Expected: Either a v0.9.0 tag exists (confirming release) or no tag exists (suggesting premature release marking).
git tag -l 'v0.9*'

Repository: cameronsjo/agent-pool

Length of output: 47


Move v0.9.0 to [Unreleased] or create the release tag.

The v0.9.0 entry is marked as released on 2026-04-07, but no v0.9.0 git tag exists in the repository. This inconsistency must be resolved: either move the v0.9.0 section to [Unreleased] (if this is still in-progress work), or create and push the v0.9.0 release tag if the release is finalized. Also update the PR title/description if v0.9.0 is the actual target instead of v0.8.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` around lines 7 - 15, The CHANGELOG entry header "## [0.9.0] —
2026-04-07" is inconsistent with the repository (no v0.9.0 tag); either move
that section to an "[Unreleased]" heading (rename the header to "##
[Unreleased]" and keep the 0.9.0 content) or create and push the v0.9.0 git tag
to match the release (create annotated tag "v0.9.0", push it to origin). Also
ensure the PR title/description references the correct target (v0.9.0 vs v0.8)
so the change matches the chosen action.


## [0.8.0] — 2026-04-06

Researcher role for knowledge curation and enrichment.

- Researcher MCP tools: `enrich_state`, `write_expert_state`, `promote_pattern`, `read_expert_state`, `read_expert_logs`, `list_experts` (researcher variant)
- Daemon curation scheduling with configurable intervals
- Pattern promotion: durable patterns graduate from `state.md` to `identity.md`
- Researcher identity and prompt assembly
- Claude Code plugin: added `pool-research` skill

## [0.7.0] — 2026-04-06

Shared experts and multi-pool foundations.

- `~/.agent-pool/experts/` for cross-project shared experts
- `shared.include` config in `pool.toml`
- Project overlay via `shared-state/{name}/` for pool-specific context
- Shared expert directory resolution in mail routing
- `list_experts` tool returns both pool-scoped and shared experts

## [0.6.0] — 2026-04-05

Daemon lifecycle and observability, driven by dogfooding.

- Unix domain socket for CLI-to-daemon communication
- `agent-pool stop` — graceful shutdown via socket
- `agent-pool status` — daemon health and task summary
- `agent-pool watch` — live event stream
- Structured event bus (`internal/daemon/events.go`)
- Graceful drain on SIGINT/SIGTERM with configurable timeout
- `daemon.log` file output by default

## [0.5.0] — 2026-04-04

Concierge plugin — user-facing interface for the pool.

- Concierge MCP tools: `dispatch`, `collect`, `ask_expert`, `submit_plan`, `check_status`, `list_experts`
- Claude Code plugin with skills: `pool-ask`, `pool-build`, `pool-status`
- `.mcp.json` for auto-registering concierge MCP server
- `concierge-identity.md` role prompt
- Non-blocking `dispatch` + `collect` pattern for parallel expert queries

## [0.4.0] — 2026-04-03

Architect role — contracts, verification, and task delegation.

- Architect MCP tools: `define_contract`, `send_task`, `verify_result`, `amend_contract`
- Versioned contract specs in `contracts/` directory
- Human approval gate (`internal/approval/`) for architect-proposed changes
- Role-aware MCP server (different tool sets per role)

## [0.3.0] — 2026-04-02

Task board with dependency DAG.

- `internal/taskboard/` — DAG-based task tracking
- Dependency evaluation (`EvaluateDeps`) with cycle detection
- Task states: pending, blocked, active, completed, failed, cancelled
- Cancel propagation through dependency chains
- Session timeout and health checks

## [0.2.0] — 2026-04-01

MCP server and state management.

- Expert MCP tools: `read_state`, `update_state`, `append_error`, `send_response`, `recall`, `search_index`
- Mail composition and routing via MCP
- Expert spawning with `claude -p` integration
- Pre-tool-use hooks for code ownership guards
- CLI wiring for `agent-pool mcp` subcommand

## [0.1.0] — 2026-03-31

Expert lifecycle — the foundation.

- Project scaffold with Go module, directory structure, and Makefile
- Pool config parser (`pool.toml`)
- CLI entry point with `start`, `version`, and `help` commands
- Mail parsing with YAML frontmatter
- Filesystem-based message routing (postoffice model)
- Expert session spawning with identity, state, and error context
- Log capture and task indexing
- At-least-once delivery with crash-safe inbox handling
- `Spawner` interface for test injection
15 changes: 10 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Agent Pool builds ON Claude Code via external interfaces — it does NOT modify
- **CLI**: `claude -p --output-format stream-json --model sonnet --allowedTools "..."`
- **MCP server**: `agent-pool mcp --pool {name} --expert {name}` (experts) or `--role {architect|concierge}` (built-in roles)
- **Hooks**: Stop → flush, PreToolUse → code ownership guard
- **Plugin**: `plugin/` — skills (`pool-ask`, `pool-build`, `pool-status`) + `.mcp.json` for concierge
- **Plugin**: repo root — skills (`pool-ask`, `pool-build`, `pool-status`, `pool-research`) + `.mcp.json` for concierge

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Verify the plugin.json structure and check for skill file existence.

echo "=== Current plugin.json content ==="
cat .claude-plugin/plugin.json

echo -e "\n=== Checking for skill files ==="
fd --type f --extension md . skills/

Repository: cameronsjo/agent-pool

Length of output: 693


Critical: Plugin manifest missing skills registration.

The documentation claims four skills (pool-ask, pool-build, pool-status, pool-research) are available, but .claude-plugin/plugin.json is missing the "skills" field required to register them with Claude Code. Without explicit skill registration in the manifest, Claude Code won't surface these skills regardless of the existence of skill files in the skills/ directory.

🔧 Proposed fix to register skills in the manifest

Add the skills field to .claude-plugin/plugin.json:

 {
   "name": "agent-pool",
   "description": "Expert pool — delegate questions and tasks to domain specialists via a mixture-of-experts model",
   "author": {
     "name": "Cameron Sjo",
     "url": "https://github.com/cameronsjo"
   },
   "repository": "https://github.com/cameronsjo/agent-pool",
   "license": "MIT",
+  "skills": [
+    "pool-ask",
+    "pool-build",
+    "pool-status",
+    "pool-research"
+  ],
   "keywords": [
     "agent-pool",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` at line 43, Add a "skills" array to the plugin manifest
(plugin.json) registering the four skill IDs so Claude Code can surface them;
specifically update the manifest used for the plugin to include a top-level
"skills" field containing "pool-ask", "pool-build", "pool-status", and
"pool-research" (and ensure any concierge .mcp.json reference remains
unchanged), validate the manifest JSON after adding the "skills" entry so the
file stays syntactically correct and tooling recognizes the registered skills.

- **Env vars**: `AGENT_POOL_NAME`, `AGENT_POOL_EXPERT`, `AGENT_POOL_TASK_ID`

## Project Structure
Expand All @@ -57,7 +57,10 @@ internal/
mail/ Message parsing, routing, delivery
mcp/ MCP server (stdio, per-role tool sets)
taskboard/ DAG-based task tracking with dependency evaluation
plugin/ Claude Code plugin (skills, MCP config, identity)
skills/ Claude Code plugin skills (pool-ask, pool-build, pool-status, pool-research)
.claude-plugin/ Plugin manifest for marketplace
.mcp.json MCP server config for concierge role
concierge-identity.md Concierge role identity
docs/
plans/ Architecture and development plans
prompts/ Version-specific development prompts
Expand All @@ -77,16 +80,18 @@ make check # vet + lint + test

## Implementation Status

**v0.5 complete** — through Concierge Plugin. See `docs/plans/architecture.md` § Implementation Phasing for full v0.1–v0.8 roadmap.
**v0.9 complete** — through Formulas + Polish. See `docs/plans/architecture.md` § Implementation Phasing for full roadmap.

| Version | Milestone | Key Additions |
|---------|-----------|---------------|
| v0.2 | MCP + State | Expert tools, mail routing, spawning, hooks |
| v0.3 | Task Board | DAG dependencies, cancel/handoff, session timeout |
| v0.4 | Architect | Contracts, approval gate, task delegation, verification |
| v0.5 | Concierge | Concierge MCP tools, plugin scaffold, read/write path flows |

Next: **v0.6** — Researcher + Curation
| v0.6 | Daemon Lifecycle | Unix socket, stop/status/watch, graceful drain |
| v0.7 | Shared Experts | Cross-project knowledge, multi-pool, project overlays |
| v0.8 | Researcher | Curation, pattern promotion, cold-start seeding |
| v0.9 | Formulas | Workflow templates, config hot-reload, hardening |

## Code Conventions

Expand Down
49 changes: 30 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,26 +31,37 @@ Four roles coordinate the work:
make build
ln -sf $(pwd)/bin/agent-pool ~/bin/agent-pool

# Create a pool inside your project
# Initialize a pool in your project
cd ~/Projects/my-project
mkdir -p .agent-pool/{postoffice,contracts,concierge/inbox,architect/inbox}
mkdir -p .agent-pool/experts/backend/{inbox,logs}
agent-pool init

# Configure
cat > .agent-pool/pool.toml << 'EOF'
[pool]
name = "my-project"
project_dir = "~/Projects/my-project"
# Add experts
agent-pool add backend
agent-pool add frontend --model opus

[architect]
model = "opus"
# Start the daemon
agent-pool start

[experts.backend]
model = "sonnet"
EOF
# Check daemon status
agent-pool status

# Start the daemon (auto-discovers .agent-pool/ from cwd)
agent-pool start
# Stop gracefully
agent-pool stop
```

### Claude Code Plugin

Install from the marketplace:

```bash
/plugin marketplace add cameronsjo/workbench
/plugin install agent-pool@cameronsjo
```

Or point to a local build:

```bash
/plugin install /path/to/agent-pool
```

## Architecture
Expand Down Expand Up @@ -110,10 +121,10 @@ make check # vet + lint + test
| **v0.3** | Complete | Task board — dependency DAG, cancellation, health checks |
| **v0.4** | Complete | Architect — contracts, verification loop, role-aware MCP |
| **v0.5** | Complete | Concierge plugin — MCP tools, skills, read/write path flows |
| v0.6 | Next | Daemon lifecycle — unix socket, stop/status/watch, graceful drain |
| v0.7 | Planned | Shared experts — cross-project knowledge, multi-pool |
| v0.8 | Planned | Researcher — curation, cold-start seeding |
| v0.9 | Planned | Formulas — workflow templates, operational hardening |
| **v0.6** | Complete | Daemon lifecycle — unix socket, stop/status/watch, graceful drain |
| **v0.7** | Complete | Shared experts — cross-project knowledge, multi-pool |
| **v0.8** | Complete | Researcher — curation, cold-start seeding, pattern promotion |
| **v0.9** | Complete | Formulas — workflow templates, config hot-reload |

## License

Expand Down
Loading
Loading