sdk-feature-implementationpor sentry
Implement a feature across Sentry SDK repositories by spawning parallel agents. Use when you have Linear initiatives/projects/issues and want to create draft…
npx skills add https://github.com/getsentry/sdk-skills --skill sdk-feature-implementationSDK Feature Implementation
Implement a feature across Sentry SDK repositories by spawning parallel agents that create draft PRs.
Repo Access
Only operate on repos listed in SDK_REPOS.md. Only repos with Enabled=Yes are included by default. All repos are under the getsentry GitHub org.
Use gh CLI for all GitHub operations (PRs, branches, CI logs). Use Linear MCP for all context gathering and tracking.
Instructions
Step 1: Gather Context
Linear MCP is the primary source for all context gathering. The user needs to provide enough context to know what to implement and where. Accept any of these starting points:
- Linear initiative (ideal) — fetch with
mcp__linear-server__get_initiativeto get the overview, then drill into projects/issues per SDK team - Linear project or issue — extract spec, reference PRs, and target repo from the description
- Spec URL + target repos — user provides directly
- Single repo + description — implement in just one SDK
From the provided context, extract:
- Spec URL — look for links to specs/RFCs in Linear issue/project descriptions
- Reference implementation PRs — look for PR links in Linear issue attachments or descriptions
- Target repos — determine which SDK repos to implement in
- GitHub issue numbers — found in Linear issue attachments (GitHub links are auto-attached)
Context gathering flow:
mcp__linear-server__get_initiative— get initiative overview and linked projectsmcp__linear-server__get_project— get project details for target SDK teamsmcp__linear-server__get_issue— get detailed requirements, spec links, and GitHub issue attachments from each issuemcp__linear-server__list_comments— check for additional context or decisions in issue comments
Linear issues have GitHub issue/PR links as attachments — use these to find the corresponding GitHub issue numbers without needing to search GitHub directly.
Step 2: Fetch and Summarize Spec
If a spec URL was found, use WebFetch to read it. Otherwise, gather requirements from Linear issue descriptions and gh issue view <number> --repo getsentry/<repo-name> for GitHub issue details. Present a concise summary:
- Feature name
- Key requirements (bulleted list)
- SDK-specific considerations
- Breaking changes or deprecations
Ask the user to confirm the summary is accurate before proceeding.
Step 2.5: Identify SDK Dependencies
Hybrid SDKs depend on native SDKs for their platform layers:
- sentry-react-native and sentry-capacitor wrap
@sentry/core(JS) + sentry-cocoa (iOS) + sentry-java (Android) - sentry-dart (Flutter) has its own Dart implementation but uses sentry-cocoa (iOS) and sentry-java (Android) for native crash reporting and trace context in crash envelopes
- sentry-unity and sentry-kotlin-multiplatform also depend on sentry-cocoa and sentry-java
When implementing across both hybrid and native SDKs:
- Implement native SDKs (Cocoa, Java) first — hybrid SDKs can't compile native bridge code until those are released
- JS wrapper SDKs (React Native, Capacitor) may already have the feature via
@sentry/core— check before implementing from scratch. If@sentry/corealready has it, the work is: expose options in SDK types, pass through to native bridge, add tests - Hybrid SDK PRs should note in "Next steps" which native SDK PRs must merge and be released before the hybrid SDK is fully functional
- Only spawn ONE agent per repo. If a repo already has a worktree/branch from a previous run, reuse it
Step 3: Check Implementation State
For each target repo, check for existing PRs:
- First check Linear — issue attachments contain links to GitHub PRs that were auto-linked
- Then check GitHub for PR status using
gh pr list --repo getsentry/<repo-name> --search "<feature-keyword>" --json number,title,state,isDraft,url - For PR details:
gh pr view <number> --repo getsentry/<repo-name> --json state,isDraft,mergeable,statusCheckRollup
Present a matrix:
| SDK Repo | GH Issue | Existing PR | CI Status | Action |
|----------|----------|-------------|-----------|--------|
| sentry-rust | #123 | None | — | Implement |
| sentry-go | #124 | #200 (draft) | Failing | Fix CI |
| sentry-python | #100 | #150 (merged) | — | Skip |
This handles "continue from where you left off" naturally. Ask the user to confirm the action plan.
Step 4: Spawn Implementation Agents
- Read
references/agent-prompt.mdfor the implementation agent prompt template. - Fill in
<repo-name>,<spec-summary>,<reference-prs>,<feature-name>, and<issue-number>for each SDK. - Ask the user before spawning agents. Show them how many agents will be spawned and for which SDKs.
- Spawn agents in parallel. Each agent clones the repo and creates a git worktree internally for isolation.
Step 5: Verify with CI
Local tests should have already passed during implementation. Use CI as final verification.
After agents create draft PRs, check CI status with gh pr view <number> --repo getsentry/<repo-name> --json statusCheckRollup.
If CI fails:
-
Fetch the actual failure logs — don't guess:
gh run list --repo getsentry/<repo-name> --branch feat/<feature-name> --limit 5 gh run view <run-id> --repo getsentry/<repo-name> --log-failed -
Fix the issue directly or spawn a fix agent with the CI error output included in the prompt.
-
The fix should:
- Read the failing files locally in the worktree
- Reproduce and verify the fix locally
- Push fixes with
git push
-
Re-check CI status after the fix.
Expect 2-3 CI fix iterations. Common issues:
- Formatting — Run formatters with resolved dependencies (e.g.,
dart pub getbeforedart format) - Linting — Unnecessary imports, public API exposure for
@internalfunctions - API stability — Some SDKs (Cocoa, Java) have API baseline checks; regenerate if you changed public API
- Doc sync tests — Some SDKs check that all options are documented in sentry-docs; add to allowlist if docs PR is separate
- Changelog — Some SDKs verify changelog entries exist for new features
Run CI-monitoring agents in the background so multiple PRs can be checked in parallel.
Step 5.5: Address Review Feedback
After CI passes, check for automated review feedback (Cursor bot, Danger, Sentry bot, etc.):
gh api repos/getsentry/<repo-name>/pulls/<number>/comments
gh api repos/getsentry/<repo-name>/issues/<number>/comments
- Address valid feedback with code fixes and reply referencing the fix commit
- Reply to false positives with reasoning
- Common automated feedback: missing option allowlists, public API exposure, test coverage gaps
Step 6: Create Documentation PRs
For each SDK implementation, check if sentry-docs needs updates:
- Search sentry-docs for existing documentation related to the feature (e.g., configuration options pages, feature-specific guides, platform includes)
- Add or update documentation as needed — new options, new guides, or updated platform-specific includes
- Create docs PRs following the sentry-docs PR template (
.github/PULL_REQUEST_TEMPLATE.md) - Link docs PRs from the SDK PRs
Create separate docs PRs per SDK — don't bundle multiple platforms into one PR.
Step 7: Collect Results
Once all agents complete and CI passes:
-
Present a results table:
| SDK Repo | GH Issue | Draft PR | CI Status | Docs PR | Notes | |----------|----------|----------|-----------|---------|-------| | sentry-rust | #123 | #456 | Passing | #789 | Ready for review | | sentry-go | #124 | #457 | Failing | — | Test timeout, needs manual fix | -
Link to Linear (if available):
- For each SDK that has a Linear project, use
mcp__linear-server__save_projectto add the PR links to the project description - Note:
mcp__linear-server__query_datais read-only — always usemcp__linear-server__save_projectfor writes
- For each SDK that has a Linear project, use
-
Summary: What was done and what needs manual follow-up.
Notes
- Always confirm with the user before spawning agents — never auto-create without approval
- Use Linear MCP for all context gathering (specs, requirements, issue details, project status). Use
ghCLI for all GitHub operations (PRs, branches, CI logs, pushing code) - Only operate on repos listed in SDK_REPOS.md
- For large rollouts (10+ SDKs), consider batching in groups of 5 to avoid rate limits
- If a reference implementation is not available, the agent should still attempt implementation based on the spec alone, but flag it for extra review
- Implementation agents clone the repo and use
git worktreefor isolated working directories - Run tests locally before creating PRs. CI serves as final verification
- Use the
linear-sdk-rolloutskill first if Linear projects/issues don't exist yet
Example Usage
User: "Implement strict trace continuation across Rust, Go, and Java SDKs"
Response flow:
- Gather context — get initiative, projects, and issues from Linear MCP
- Fetch spec, confirm summary with user
- Check existing PRs — Rust has nothing, Go has a failing draft, Java has nothing
- Confirm plan: spawn 2 new agents (Rust, Java) + 1 fix agent (Go)
- Spawn agents in parallel with worktree isolation
- Monitor CI, fix failures (expect 2-3 iterations)
- Create docs PRs for each SDK
- Present results table, link to Linear