This guide covers workflows, responsibilities, and tooling for repository reviewers, maintainers, and administrators.
| Team | Scope | Responsibilities |
|---|---|---|
@awslabs/agent-plugins-admins |
Everything | Repo settings, CI/CD, schemas, tooling, CODEOWNERS, releases |
@awslabs/agent-plugins-maintainers |
Everything (default reviewers) | PR review, triage, community engagement |
Admins own all configuration and infrastructure files explicitly. Both teams are defined in CODEOWNERS on the default * pattern.
Each plugin has its own GitHub team that owns its plugin directory. Plugin teams are created with @awslabs/agent-plugins-writers as the parent team. Once the parent team accepts the request, the plugin team gains write access to the repository.
Onboarding a new plugin team:
-
Create a GitHub team named
agent-plugins-<plugin-name>(e.g.,agent-plugins-deploy-on-aws) -
Set the parent team to
@awslabs/agent-plugins-writers -
The contributor adds a CODEOWNERS entry for the plugin directory:
plugins/<plugin-name> @awslabs/agent-plugins-admins @awslabs/agent-plugins-maintainers @awslabs/agent-plugins-<plugin-name> -
An admin accepts the parent team request
Current plugin teams:
| Team | Plugin directory |
|---|---|
@awslabs/agent-plugins-deploy-on-aws |
plugins/deploy-on-aws/ |
| View | Link |
|---|---|
| Open PRs with all checks passing | status:success |
| Open PRs needing review | review:required |
| Open PRs with failing checks | status:failure |
| PRs blocked from merge | label:do-not-merge |
| Stale PRs | label:stale |
| Backlog PRs (exempt from staleness) | label:backlog |
When reviewing a PR, verify:
- CI is green - All required GitHub Actions checks pass (build, lint, security scanners, CodeQL)
- PR title - Follows conventional commits format (
fix:,feat:,chore:, etc.). Enforced by CI. - Contributor statement - PR body includes the license contribution acknowledgment. Enforced by CI (exempts
awslabs-mcpanddependabot[bot]). - Design quality - For plugin changes, use the review checklist in Design Guidelines
- Versioning - Plugin version changes follow semantic versioning. Breaking changes require a major bump, new features a minor bump, bug fixes a patch bump.
- New plugins - PRs that add a new directory under
plugins/must also include:- A CODEOWNERS entry for the plugin directory (see Plugin Teams)
- An entry in the marketplace manifest (
.claude-plugin/marketplace.json) - An entry in the plugin listing table in
README.md - The
new-pluginlabel on the PR
- Security - No secrets, credentials, or sensitive data in the diff. Security scanners (Bandit, SemGrep, Gitleaks, Checkov, Grype) run in CI.
- PRs require passing status checks before merge
- The
do-not-mergelabel blocks merging (enforced by the merge-prevention workflow) - The
HALT_MERGESrepository variable can block all merges or allow only a specific PR number:0(default) - all merges allowed-1- all merges blocked<PR number>- only that PR may merge
| Label | Purpose |
|---|---|
do-not-merge |
Blocks PR from merging (CI-enforced) |
new-plugin |
PR adds a new plugin to the repository |
backlog |
Exempts PR/issue from stale automation |
stale |
Auto-applied to inactive PRs/issues |
enhancement |
Feature request |
bug |
Bug report |
help wanted |
Good for external contributors |
The stale workflow runs daily:
| Item | Stale after | Closed after |
|---|---|---|
| Pull requests | 14 days inactive | 2 days after stale |
| Issues | 60 days inactive | 7 days after stale |
Add the backlog label to exempt an item from staleness.
The repository provides issue templates for:
- Bug reports - Structured reproduction steps
- Feature requests - Use case and proposed solution
- Documentation - Doc improvements or gaps
- RFCs - Larger proposals requiring discussion
Triage incoming issues by applying appropriate labels and assigning to the relevant team.
All workflows are in .github/workflows/:
| Workflow | Trigger | Purpose |
|---|---|---|
build.yml |
PR, push to main | Full build (mise run build: lint + format check + security) |
pull-request-lint.yml |
PR | Conventional commit title validation, contributor statement check |
merge-prevention.yml |
PR, merge queue | do-not-merge label and HALT_MERGES enforcement |
security-scanners.yml |
PR, push to main | Bandit, SemGrep, Gitleaks, Checkov, Grype |
codeql.yml |
PR, push to main, schedule | GitHub CodeQL analysis |
dependency-review.yml |
PR | Dependency vulnerability review |
scorecard-analysis.yml |
Push to main, schedule | OpenSSF Scorecard |
stale.yml |
Daily cron | Stale PR/issue management |
Releases follow semantic versioning. Version numbers are tracked in plugin manifests (plugin.json).
When preparing a release:
- Ensure all CI checks pass on
main - Verify plugin manifest versions are updated
- Run a full build locally:
mise run build - Tag the release following the versioning convention
- Security vulnerability reports go through AWS vulnerability reporting, not public GitHub issues
- See SECURITY.md for the full policy
- Security scanners run on every PR and push to
main - Gitleaks baseline (
.gitleaks-baseline.json) tracks known false positives - see Development Guide for handling