Skip to content

Commit dbf739f

Browse files
committed
Migrate shellescape from github.com/alessio/shellescape to al.essio.dev/pkg/shellescape v1.6.0
The module changed its canonical path in v1.6.0. Update the import in unixOSCommand.go, go.mod files, go.sum checksums, and the Bazel module mapping accordingly.
1 parent a538935 commit dbf739f

38 files changed

Lines changed: 3034 additions & 9 deletions

File tree

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
name: agent-supply-chain-newsletter
3+
description: Generate the Agent Supply Chain newsletter by researching team activity on GitHub and Confluence, then creating a Confluence draft and Gmail draft
4+
argument-hint: "<period e.g. 'February-March 2026'>"
5+
---
6+
7+
Generate the Agent Supply Chain newsletter for the period **$ARGUMENTS** by researching what team members accomplished on GitHub and Confluence, then producing both a Confluence blog post draft and a Gmail draft.
8+
9+
## Step 1: Gather team members
10+
11+
Fetch the current list of agent-supply-chain team members from GitHub:
12+
13+
```bash
14+
gh api orgs/DataDog/teams/agent-supply-chain/members --paginate --jq '.[].login'
15+
```
16+
17+
Ask the user if any members should be excluded (e.g. people who moved teams).
18+
19+
## Step 2: Read past newsletters for format reference
20+
21+
1. Search for the latest blog posts in the ASC1 Confluence space:
22+
- `mcp__claude_ai_Atlassian__searchConfluenceUsingCql` with `cql`: `type = "blogpost" AND space = "ASC1" ORDER BY created DESC` (limit 3)
23+
2. Read the most recent newsletter with `mcp__claude_ai_Atlassian__getConfluencePage` (contentFormat: `markdown`, contentType: `blog`) to match its structure and tone.
24+
25+
The newsletter format is:
26+
- **Header**: greeting, team links (ASC1, ABLD, BARX, ADX spaces), OKR link, support channel link
27+
- **"What's new?"** section organized by sub-team (Agent Developer Experience, Agent Build, Agent Delivery)
28+
- Each item has: a short title, **quantified impact** (time saved, percentage improvement, count), and **links to PRs or docs**
29+
- **"Did you know?"** section with one fun/useful tip
30+
- **Footer**: link to all newsletters, support channel reminder
31+
32+
## Step 3: Research GitHub activity
33+
34+
For each team member, launch background agents (use `run_in_background: true`) to search merged PRs during the period. Split into batches of ~8 members per agent to parallelize.
35+
36+
Each agent should run, for every user:
37+
38+
```bash
39+
# PRs in datadog-agent
40+
gh pr list --repo DataDog/datadog-agent --author USERNAME --state merged --search "merged:START_DATE..END_DATE" --limit 50 --json title,url,mergedAt,labels
41+
42+
# PRs across the DataDog org (catches buildimages, k8s-ops, integrations-core, etc.)
43+
gh search prs --author USERNAME --owner DataDog --merged --limit 20 --json repository,title,url -- "merged:START_DATE..END_DATE"
44+
```
45+
46+
Each agent should return a summary per user, grouped thematically (build improvements, CI/CD, new features, bug fixes, etc.). Skip trivial PRs (version bumps, dependency updates). Focus on items that **impact teams outside Agent Supply Chain**.
47+
48+
## Step 4: Research Confluence activity
49+
50+
Launch a background agent to search for relevant documentation created during the period:
51+
52+
```
53+
mcp__claude_ai_Atlassian__searchConfluenceUsingCql
54+
```
55+
56+
With CQL queries:
57+
- `space = "ASC1" AND lastModified >= "START_DATE" AND lastModified <= "END_DATE" ORDER BY lastModified DESC` (limit 25)
58+
- `space = "ADX" AND lastModified >= "START_DATE" AND lastModified <= "END_DATE" ORDER BY lastModified DESC` (limit 25)
59+
60+
Identify RFCs, design docs, operational reports, and guides that are newsletter-worthy.
61+
62+
## Step 5: Synthesize and write the newsletter
63+
64+
Apply the newsletter guide's filter: **"Is this information impacting a team outside of the Agent Supply Chain group?"** Only include items where the answer is yes.
65+
66+
For each item:
67+
- Provide a **quantifiable improvement** (time saved, percentage change, cost reduction) when available
68+
- Link to the relevant **PR, Confluence page, or documentation**
69+
- Keep descriptions concise (2-4 sentences max per item)
70+
71+
Group items under:
72+
1. **Agent Developer Experience** (CI speed, developer tools, workflows, open source)
73+
2. **Agent Build** (Bazel migration, build system, platform support)
74+
3. **Agent Delivery** (releases, deployments, registries, security)
75+
76+
End with a **"Did you know?"** section highlighting one interesting tool, feature, or tip.
77+
78+
## Step 6: Create outputs
79+
80+
### 6a. Confluence blog post draft
81+
82+
Use `mcp__claude_ai_Atlassian__createConfluencePage` with:
83+
- `cloudId`: `datadoghq.atlassian.net`
84+
- `spaceId`: `4662624793` (ASC1 space)
85+
- `title`: `<Period> - Agent Supply Chain Monthly Update`
86+
- `contentType`: `blog`
87+
- `status`: `draft`
88+
- `contentFormat`: `markdown`
89+
90+
### 6b. Gmail draft
91+
92+
Use `mcp__claude_ai_Gmail__gmail_create_draft` with:
93+
- `to`: `agent-community@datadoghq.com`
94+
- `subject`: `<Period> - Agent Supply Chain Monthly Update`
95+
- `contentType`: `text/html`
96+
- Rich HTML body matching the Confluence content
97+
98+
## Step 7: Present results
99+
100+
Return to the user:
101+
1. Links to both the Confluence draft and Gmail draft
102+
2. A bullet-point summary of the sections covered
103+
3. Remind them to:
104+
- Review both outputs for accuracy
105+
- Send the Gmail to themselves first to verify formatting
106+
- Schedule the final send between **2-4pm CET**, not on a Friday
107+
- Ask for review in `#agent-devx-private` / from Damien Desmarets before publishing

.agents/skills/auto-jira/README.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# auto-jira
2+
3+
Autonomously scans a Jira board backlog for eligible tickets and implements fixes as draft PRs. Once a draft PR is open, the skill moves on to the next ticket — CI, review, and merge are left for humans.
4+
5+
## Usage
6+
7+
```
8+
/auto-jira <BOARD-KEY> [flags]
9+
```
10+
11+
## Flags
12+
13+
| Flag | Required | Default | Description |
14+
|------|----------|---------|-------------|
15+
| `BOARD-KEY` | yes || Jira project key (e.g. `ACTP`, `AGENTCFG`, `CONTINT`) |
16+
| `--max-cards N` | no | `3` | Maximum number of PRs to create in this run |
17+
| `--before-date YYYY-MM-DD` | no | 30 days ago | Only consider tickets created before this date |
18+
| `--exclude word1,word2` | no | none | Skip tickets whose title contains any of these words (case-insensitive, comma-separated) |
19+
20+
## Examples
21+
22+
```
23+
# Scan the AGENTCFG board, up to 3 PRs (defaults)
24+
/auto-jira AGENTCFG
25+
26+
# Up to 5 PRs
27+
/auto-jira AGENTCFG --max-cards 5
28+
29+
# Only older tickets
30+
/auto-jira AGENTCFG --before-date 2026-02-12
31+
32+
# Skip planning/spike tickets
33+
/auto-jira CONTINT --max-cards 2 --exclude RFC,spike,design
34+
35+
# Full example
36+
/auto-jira AGENTCFG --max-cards 5 --before-date 2026-02-12 --exclude nodetreemodel,viper
37+
```
38+
39+
## What it does
40+
41+
For each eligible ticket (up to `--max-cards`), the skill:
42+
43+
1. Queries the board backlog for unassigned tickets in the initial status (first entry of `jira_statuses` in `.ddqa/config.toml`) with no parent issue
44+
2. Evaluates each ticket for feasibility — skips vague, docs-only, or already-fixed issues
45+
3. Claims the ticket (assigns to you)
46+
4. Implements the fix, runs lint and tests, creates a single commit
47+
5. Opens a **draft PR** against `main` titled `[auto-jira][KEY] ...`
48+
6. Posts the PR link as a comment on the Jira ticket
49+
50+
Progress is tracked locally in `AUTO_JIRA.md` (gitignored, never committed).
51+
52+
## Ticket eligibility
53+
54+
A ticket is eligible only if ALL of the following are true:
55+
56+
- Status is the first entry of `jira_statuses` for the team in `.ddqa/config.toml` (typically `To Do`)
57+
- Assignee is empty
58+
- No parent issue
59+
- Created before `--before-date`
60+
- Label `do-not-autosolve` is NOT set
61+
- Title contains none of the `--exclude` words
62+
- Solvable by a code PR (not docs-only, not infra, not cross-team)
63+
- Not already fixed in the codebase
64+
65+
To permanently exclude a ticket from auto-jira, add the `do-not-autosolve` label on the Jira issue.
66+
67+
## Running unattended
68+
69+
For unattended/background operation, consider running Claude with `--dangerously-skip-permissions` to avoid permission prompts:
70+
71+
```bash
72+
claude --dangerously-skip-permissions
73+
```
74+
75+
Then invoke the skill normally: `/auto-jira AGENTCFG --max-cards 5`

0 commit comments

Comments
 (0)