feat: v8.0.0 — first agent template (PM Sprint Agent) following Anthropic's agent template architecture

- Added templates/pm-sprint-agent/ directory with full agent template
  - AGENT.md system prompt with explicit step-by-step workflow
  - 2 subagents: capacity-analyst and risk-scorer
  - 2 connectors: linear and jira (with example configs)
  - Symlinked skills from main library: sprint-planning, sprint-brief
  - orchestrate.sh end-to-end workflow script
  - examples/ folder with input and output examples
  - tests/ folder with smoke test
- Updated README to position skills as building blocks for agent templates
- Added Anthropic agent templates announcement reference (May 5, 2026)
- Bumped marketplace.json to v8.0.0
- Listed 7 candidate agent templates this library supports

This is the first agent template in the library. More to follow.
This commit is contained in:
mohitagw15856
2026-05-05 23:26:08 +01:00
parent bd38a36468
commit e5377ca61a
18 changed files with 1756 additions and 0 deletions
@@ -0,0 +1,107 @@
# Connectors — Setup Guide
This folder contains the connector configurations for the PM Sprint Agent. Connectors provide governed access to your team's data sources — they are how the agent reaches Linear, Jira, Slack, and other systems without holding credentials in prompts.
## What's in this folder
- `linear.example.json` — Linear connector configuration template
- `jira.example.json` — Jira connector configuration template (use this if your team uses Jira)
- `slack.example.json` — Slack connector for posting summaries (coming soon)
## How to set up a connector
You only need to set up the connector for the ticketing system your team uses. Skip the others.
### Linear setup (5 minutes)
1. Generate a Linear API key:
- Go to https://linear.app/settings/account/security
- Click "Create Key"
- Copy the key (starts with `lin_api_`)
2. Set the environment variable:
```bash
export LINEAR_API_KEY='lin_api_xxxxxxxxxxxxxxxxxxxxxxxx'
```
To make this permanent, add the line to your `~/.zshrc` or `~/.bashrc`.
3. Find your team ID:
```bash
curl -H "Authorization: $LINEAR_API_KEY" \
https://api.linear.app/graphql \
-d '{"query": "{ teams { nodes { id name } } }"}'
```
You'll get a JSON response with all your teams and their IDs.
4. Copy the example config and customise:
```bash
cp linear.example.json linear.json
```
Edit `linear.json` and update:
- `workspace_url` — your Linear workspace URL
- `team_id` — the team ID from step 3
5. Test:
```bash
cd ../ # back to pm-sprint-agent root
bash orchestrate.sh --dry-run --sprint-goal "test"
```
### Jira setup (5 minutes)
1. Generate a Jira API token:
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Give it a label (e.g., "PM Sprint Agent")
- Copy the token
2. Set environment variables:
```bash
export JIRA_EMAIL='you@yourcompany.com'
export JIRA_API_TOKEN='ATATT3xFfGF0...'
```
3. Find your project key and board ID:
- **Project key**: visible in any issue URL (e.g., "PROJ" from `your-domain.atlassian.net/browse/PROJ-123`)
- **Board ID**: navigate to your board, the URL contains `boards/{ID}` (e.g., 123)
4. Copy the example config and customise:
```bash
cp jira.example.json jira.json
```
Edit `jira.json` and update:
- `instance_url` — your Atlassian instance URL
- `project_key` — your project key from step 3
- `board_id` — your board ID from step 3
5. Test:
```bash
cd ../
bash orchestrate.sh --dry-run --sprint-goal "test"
```
## Building a connector for another system
If your team uses a ticketing system that's not in this folder (Shortcut, Asana, ClickUp, GitHub Issues), you can build a connector by following the same pattern.
A connector needs three things:
1. **A configuration file** (`{name}.json`) defining the data source URL, credentials, and available operations
2. **An API client** that the orchestration script can call to fetch data
3. **A mapping** from the source's data model to the standard fields the agent expects (issue ID, title, story points, status, assignee, dependencies)
The cleanest place to start is to copy `linear.example.json` or `jira.example.json` and modify it for your system.
If you build a connector for a new system, consider raising a PR back to the main pm-claude-skills repo so others can use it.
## Security notes
**Credentials live in environment variables, not in the JSON files.** The connector configs reference environment variable names, not the actual credentials. This means you can commit your `linear.json` or `jira.json` to source control without leaking credentials — but make sure your `LINEAR_API_KEY` or `JIRA_API_TOKEN` are stored securely (use a password manager or `.env` file with `.gitignore`).
**Rotate API keys periodically.** Both Linear and Jira allow you to revoke and regenerate API keys. Do this every 90 days as a security best practice.
**Use scoped permissions.** Where possible, generate API keys with only the permissions the agent needs (read-only access to issues, sprints, and team data — not write access).
@@ -0,0 +1,73 @@
{
"connector_name": "jira",
"version": "1.0.0",
"description": "Jira connector for the PM Sprint Agent template. Provides governed access to issues, sprints, and boards.",
"configuration": {
"instance_url": "https://your-domain.atlassian.net",
"project_key": "PROJ",
"board_id": 123,
"default_jql_filter": "status in (\"To Do\", \"Open\", \"Backlog\") AND sprint is EMPTY",
"include_subtasks": false,
"rate_limit_requests_per_minute": 100
},
"credentials": {
"_comment": "Jira uses email + API token for authentication. Generate an API token at https://id.atlassian.com/manage-profile/security/api-tokens",
"auth_email_env_var": "JIRA_EMAIL",
"api_token_env_var": "JIRA_API_TOKEN",
"auth_email_placeholder": "your-email@yourcompany.com",
"api_token_placeholder": "ATATT3xFfGF0..."
},
"available_operations": [
{
"name": "search_issues",
"description": "Search for issues using JQL (Jira Query Language)",
"default_jql": "project = PROJ AND status in (\"To Do\", \"Open\", \"Backlog\") AND sprint is EMPTY ORDER BY priority DESC, created DESC",
"max_results": 200
},
{
"name": "get_issue_details",
"description": "Fetch detailed information about a specific issue",
"required_input": "issue_key",
"fields": ["summary", "description", "status", "priority", "assignee", "story_points", "labels", "components", "issuelinks"]
},
{
"name": "get_sprint_velocity",
"description": "Calculate average story points completed per sprint over the last N sprints",
"default_lookback": 3
},
{
"name": "list_sprints",
"description": "Get past, current, and upcoming sprints for the configured board",
"filters": ["state"]
},
{
"name": "get_team_members",
"description": "Get list of team members with their roles",
"default_role_filter": "developer"
}
],
"permissions_required": [
"Browse Projects",
"View Issues",
"View Sprints",
"View Project Roles"
],
"_setup_instructions": [
"1. Generate a Jira API token at https://id.atlassian.com/manage-profile/security/api-tokens",
"2. Set environment variables: export JIRA_EMAIL='you@company.com' && export JIRA_API_TOKEN='ATATT3xFfGF0...'",
"3. Find your project key (visible in the URL when viewing a project, e.g., 'PROJ' from 'jira.com/browse/PROJ-123')",
"4. Find your board ID: navigate to your board, look at the URL ('boards/123' = board ID 123)",
"5. Update instance_url, project_key, and board_id in this file",
"6. Save this file as 'jira.json' (without the .example)",
"7. Test the connection: bash orchestrate.sh --dry-run --sprint-goal 'test'"
],
"_jql_notes": "The default JQL filter pulls items in the project's backlog that aren't already assigned to a sprint. Customise the JQL if your team uses different statuses, custom fields, or specific epic filters.",
"_rate_limit_notes": "Jira Cloud's REST API is rate limited per-account. Standard rate is 100 requests per minute. The agent uses approximately 10-15 API calls per sprint plan."
}
@@ -0,0 +1,67 @@
{
"connector_name": "linear",
"version": "1.0.0",
"description": "Linear connector for the PM Sprint Agent template. Provides governed access to issues, projects, and cycles.",
"configuration": {
"workspace_url": "https://linear.app/your-workspace-name",
"team_id": "TEAM_ID_HERE",
"default_project_filter": "active",
"default_state_filter": ["backlog", "ready"],
"include_archived": false,
"rate_limit_requests_per_minute": 60
},
"credentials": {
"_comment": "Replace these with your actual Linear API credentials. Generate a personal API key at https://linear.app/settings/account/security",
"api_key_env_var": "LINEAR_API_KEY",
"api_key_placeholder": "lin_api_xxxxxxxxxxxxxxxxxxxxxxxx"
},
"available_operations": [
{
"name": "list_open_issues",
"description": "Get all open issues in the team's backlog and ready states",
"filters": ["team_id", "state", "label", "priority", "assignee", "project"],
"max_results": 200
},
{
"name": "get_issue_details",
"description": "Fetch detailed information about a specific issue including comments, dependencies, and history",
"required_input": "issue_id"
},
{
"name": "get_team_velocity",
"description": "Calculate average story points completed per cycle over the last N cycles",
"default_lookback": 3
},
{
"name": "get_team_capacity_calendar",
"description": "Read team PTO and out-of-office calendar entries",
"lookback_days": 14
},
{
"name": "list_cycles",
"description": "Get past, current, and upcoming cycles for the team",
"filters": ["status"]
}
],
"permissions_required": [
"issues:read",
"teams:read",
"cycles:read",
"users:read"
],
"_setup_instructions": [
"1. Generate a Linear API key at https://linear.app/settings/account/security (workspace admin scope is sufficient)",
"2. Set the LINEAR_API_KEY environment variable: export LINEAR_API_KEY='lin_api_xxxxx...'",
"3. Find your team ID by running: curl -H 'Authorization: $LINEAR_API_KEY' https://api.linear.app/graphql -d '{\"query\": \"{ teams { nodes { id name } } }\"}'",
"4. Update workspace_url and team_id in this file",
"5. Save this file as 'linear.json' (without the .example)",
"6. Test the connection: bash orchestrate.sh --dry-run --sprint-goal 'test'"
],
"_rate_limit_notes": "Linear's API is rate limited to 60 requests per minute for personal API keys. The agent uses approximately 8-12 API calls per sprint plan, so rate limits are unlikely to be hit unless running multiple plans in parallel."
}