feat: v9.0.0 — three new agent templates (Discovery, Stakeholder Comms, Launch)
This release adds three new agent templates to the library, bringing the total to four. New templates: - PM Discovery Agent: synthesises customer interviews from Notion or Google Drive, identifies cross-interview themes, scores assumption confidence, generates follow-up questions - PM Stakeholder Comms Agent: detects audience type (executive/investor/stakeholder/board), pulls activity from Linear/Jira/Drive, drafts in audience-appropriate format - PM Launch Agent: end-to-end launch coordination with channel-specific content, calendar, success metrics, and launch checklist Each template follows the established pattern: README, AGENT.md, orchestrate.sh, 2 subagents, connectors with example configs, examples, smoke test. Total file count: 37 new files across 3 templates. Updated README to position library as 4-template collection. Bumped marketplace.json from v8.0.0 to v9.0.0.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# Connectors — PM Stakeholder Communications Agent
|
||||
|
||||
This agent reads from your team's tracking systems to compile stakeholder communications. Set up at least one ticketing connector (Linear or Jira). Google Drive is optional but recommended.
|
||||
|
||||
## Required: Linear OR Jira
|
||||
|
||||
The agent needs to know what you've shipped. Set up whichever ticketing system you use.
|
||||
|
||||
### Linear setup (5 min)
|
||||
|
||||
```bash
|
||||
cd templates/pm-stakeholder-comms-agent/connectors
|
||||
cp linear.example.json linear.json
|
||||
|
||||
# Get your API key
|
||||
# Generate at: https://linear.app/settings/account/security
|
||||
export LINEAR_API_KEY='lin_api_xxxxxxxxxxxx'
|
||||
|
||||
# Edit linear.json — update workspace_url and team_id
|
||||
```
|
||||
|
||||
### Jira setup (5 min)
|
||||
|
||||
```bash
|
||||
cd templates/pm-stakeholder-comms-agent/connectors
|
||||
cp jira.example.json jira.json
|
||||
|
||||
# Get your API token
|
||||
# Generate at: https://id.atlassian.com/manage-profile/security/api-tokens
|
||||
export JIRA_EMAIL='you@company.com'
|
||||
export JIRA_API_TOKEN='ATATT3xFfGF0...'
|
||||
|
||||
# Edit jira.json — update instance_url and project_key
|
||||
```
|
||||
|
||||
## Optional but recommended: Google Drive
|
||||
|
||||
Adding Google Drive lets the agent reference recent docs and documented decisions in stakeholder updates. Without it, the agent only has access to ticketing system activity.
|
||||
|
||||
```bash
|
||||
cd templates/pm-stakeholder-comms-agent/connectors
|
||||
cp google-drive.example.json google-drive.json
|
||||
|
||||
# Set up service account (see pm-discovery-agent/connectors/README.md for detailed steps)
|
||||
export GOOGLE_APPLICATION_CREDENTIALS='/path/to/service-account.json'
|
||||
|
||||
# Edit google-drive.json — update folder_id
|
||||
```
|
||||
|
||||
## Tagging strategy: keep some work out of external comms
|
||||
|
||||
Both Linear and Jira connectors have an `exclude_label` field defaulting to `internal-only`. Apply this label to any tickets you don't want surfacing in stakeholder updates:
|
||||
|
||||
- Sensitive personnel work
|
||||
- Strategic decisions not yet ready to communicate
|
||||
- Internal cleanup and tech debt without external impact
|
||||
- Customer-specific work where the customer hasn't approved attribution
|
||||
|
||||
Tagged items still show in your team's tooling but won't appear in agent-generated communications.
|
||||
|
||||
## Security notes
|
||||
|
||||
- Credentials live in environment variables, never in the JSON files
|
||||
- Use read-only credentials where possible — the agent only needs to read activity
|
||||
- Both ticketing system tokens and Google service account keys can be regenerated; rotate every 90 days
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"connector_name": "google-drive",
|
||||
"version": "1.0.0",
|
||||
"description": "Optional Google Drive connector for the PM Stakeholder Communications Agent. Pulls recent docs and decisions from a Drive folder for inclusion in stakeholder updates.",
|
||||
|
||||
"configuration": {
|
||||
"folder_id": "FOLDER_ID_HERE",
|
||||
"include_subfolders": true,
|
||||
"file_types": ["application/vnd.google-apps.document"],
|
||||
"default_period_filter": "modifiedTime > '30 days ago'",
|
||||
"exclude_filename_patterns": ["DRAFT", "WIP", "scratch"],
|
||||
"rate_limit_requests_per_minute": 60
|
||||
},
|
||||
|
||||
"credentials": {
|
||||
"auth_method": "service_account",
|
||||
"service_account_key_path_env_var": "GOOGLE_APPLICATION_CREDENTIALS"
|
||||
},
|
||||
|
||||
"available_operations": [
|
||||
{
|
||||
"name": "list_recent_docs",
|
||||
"description": "Get docs modified in the specified period",
|
||||
"filters": ["modifiedAfter", "modifiedBefore", "name_contains"],
|
||||
"max_results": 30
|
||||
},
|
||||
{
|
||||
"name": "get_doc_summary",
|
||||
"description": "Get a brief summary of a specific doc (title, last modified, brief content extract)",
|
||||
"required_input": "file_id"
|
||||
}
|
||||
],
|
||||
|
||||
"_setup_instructions": [
|
||||
"1. Set up a Google Cloud project and service account (see google-drive.example.json in pm-discovery-agent for full steps)",
|
||||
"2. Set GOOGLE_APPLICATION_CREDENTIALS environment variable",
|
||||
"3. Find the folder ID where your team's docs and decisions live",
|
||||
"4. Share that folder with the service account email (Viewer access)",
|
||||
"5. Update folder_id in this file",
|
||||
"6. Save as 'google-drive.json'",
|
||||
"7. Test: bash orchestrate.sh --audience executive --period 'last 30 days' --dry-run"
|
||||
],
|
||||
|
||||
"_note": "This connector is optional. The agent works fine with just Linear/Jira data. Adding Google Drive enriches communications with recent docs and documented decisions, but isn't required."
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"connector_name": "jira",
|
||||
"version": "1.0.0",
|
||||
"description": "Jira connector for the PM Stakeholder Communications Agent. Provides access to recently completed issues and current sprint progress for inclusion in stakeholder updates.",
|
||||
|
||||
"configuration": {
|
||||
"instance_url": "https://your-domain.atlassian.net",
|
||||
"project_key": "PROJ",
|
||||
"default_jql_for_shipped": "project = PROJ AND status = Done AND resolved >= -30d ORDER BY resolved DESC",
|
||||
"default_jql_for_in_progress": "project = PROJ AND status in (\"In Progress\", \"In Review\") ORDER BY priority DESC",
|
||||
"exclude_label": "internal-only",
|
||||
"rate_limit_requests_per_minute": 100
|
||||
},
|
||||
|
||||
"credentials": {
|
||||
"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_recently_shipped",
|
||||
"description": "Get all issues completed in the specified period",
|
||||
"default_jql": "project = PROJ AND status = Done AND resolved >= -30d ORDER BY resolved DESC",
|
||||
"max_results": 100
|
||||
},
|
||||
{
|
||||
"name": "search_in_progress",
|
||||
"description": "Get current in-progress issues for context",
|
||||
"default_jql": "project = PROJ AND status in (\"In Progress\", \"In Review\") ORDER BY priority DESC"
|
||||
},
|
||||
{
|
||||
"name": "get_issue_summary",
|
||||
"description": "Get a brief summary of a specific issue",
|
||||
"required_input": "issue_key"
|
||||
}
|
||||
],
|
||||
|
||||
"_setup_instructions": [
|
||||
"1. Generate a Jira API token at https://id.atlassian.com/manage-profile/security/api-tokens",
|
||||
"2. Set JIRA_EMAIL and JIRA_API_TOKEN environment variables",
|
||||
"3. Update instance_url and project_key in this file",
|
||||
"4. Customise the JQL filters if your team uses different statuses",
|
||||
"5. Save as 'jira.json'",
|
||||
"6. Test: bash orchestrate.sh --audience executive --period 'last 30 days' --dry-run"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"connector_name": "linear",
|
||||
"version": "1.0.0",
|
||||
"description": "Linear connector for the PM Stakeholder Communications Agent. Provides access to recently shipped issues and current sprint progress for inclusion in stakeholder updates.",
|
||||
|
||||
"configuration": {
|
||||
"workspace_url": "https://linear.app/your-workspace-name",
|
||||
"team_id": "TEAM_ID_HERE",
|
||||
"default_period_filter": "last_30_days",
|
||||
"include_closed_issues": true,
|
||||
"include_in_progress_issues": true,
|
||||
"exclude_label": "internal-only",
|
||||
"rate_limit_requests_per_minute": 60
|
||||
},
|
||||
|
||||
"credentials": {
|
||||
"api_key_env_var": "LINEAR_API_KEY",
|
||||
"api_key_placeholder": "lin_api_xxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
},
|
||||
|
||||
"available_operations": [
|
||||
{
|
||||
"name": "list_recently_shipped",
|
||||
"description": "Get all issues completed in the specified period",
|
||||
"filters": ["completed_after", "completed_before", "team_id", "project", "label", "exclude_label"],
|
||||
"max_results": 100
|
||||
},
|
||||
{
|
||||
"name": "list_in_progress",
|
||||
"description": "Get current in-progress and ready issues for context on what's coming next",
|
||||
"filters": ["team_id", "project", "label"]
|
||||
},
|
||||
{
|
||||
"name": "get_issue_summary",
|
||||
"description": "Get a brief summary of a specific issue for inclusion in updates",
|
||||
"required_input": "issue_id"
|
||||
}
|
||||
],
|
||||
|
||||
"_setup_instructions": [
|
||||
"1. Generate a Linear API key at https://linear.app/settings/account/security",
|
||||
"2. Set LINEAR_API_KEY environment variable",
|
||||
"3. Find your team ID (see linear.example.json in pm-sprint-agent template for command)",
|
||||
"4. Update team_id and workspace_url in this file",
|
||||
"5. Save as 'linear.json'",
|
||||
"6. Test: bash orchestrate.sh --audience executive --period 'last 30 days' --dry-run"
|
||||
],
|
||||
|
||||
"_note_on_internal_only_label": "The exclude_label 'internal-only' lets you tag tickets that should not appear in any external communications. Useful for sensitive work or items not ready to communicate externally."
|
||||
}
|
||||
Reference in New Issue
Block a user