{"id":90506,"date":"2025-08-28T12:02:44","date_gmt":"2025-08-28T19:02:44","guid":{"rendered":"https:\/\/github.blog\/?p=90506"},"modified":"2025-08-28T12:02:45","modified_gmt":"2025-08-28T19:02:45","slug":"how-github-models-can-help-open-source-maintainers-focus-on-what-matters","status":"publish","type":"post","link":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/","title":{"rendered":"How GitHub Models can help open source maintainers focus on what matters"},"content":{"rendered":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><p>Open source runs on passion and persistence. Maintainers are the volunteers who show up to triage issues, review contributions, manage duplicates, and do the quiet work that keeps projects going.<\/p>\n\n\n\n<p>Most don&rsquo;t plan on becoming community managers. But they built something useful, shared it, and stayed when people started depending on it. That&rsquo;s how creators become stewards.<\/p>\n\n\n\n<p>But as your project grows, your time to build shrinks. Instead, you&rsquo;re writing the same &ldquo;this looks like a duplicate of #1234&rdquo; comment, asking for missing reproduction steps, and manually labeling issues. It&rsquo;s necessary work. But it&rsquo;s not what sparked your love for the project or open source.<\/p>\n\n\n\n<p>That&rsquo;s why we built GitHub Models: to help you automate the repetitive parts of project management using AI, right where your code lives and in your workflows, so you can focus on what brought you here in the first place.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-maintainers-told-us\">What maintainers told us<\/h2>\n\n\n\n<p>We surveyed over 500 maintainers of leading open source projects about their AI needs. Here&rsquo;s what they reported:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>60% want help with issue triage &mdash; labeling, categorizing, and managing the flow<\/li>\n\n\n\n<li>30% need duplicate detection &mdash; finding and linking similar issues automatically<\/li>\n\n\n\n<li>10% want spam protection &mdash; filtering out low quality contributions<\/li>\n\n\n\n<li>5% need slop detection &mdash; identifying low quality pull requests that add noise<\/li>\n<\/ul>\n\n\n\n<p>Folks surveyed indicated that they wanted AI to serve as a second pair of eyes and to not intervene unless asked. They also said triaging issues, finding similar issues, helping write minimal reproductions were top of mind. Clustering issues based on topic or feature was also possibly the most important concern to some.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-github-models-github-actions-continuous-maintainer-support\">How GitHub Models + GitHub Actions = Continuous maintainer support<\/h2>\n\n\n\n<p>We&rsquo;re calling this pattern <a href=\"https:\/\/githubnext.com\/projects\/continuous-ai\/\">Continuous AI<\/a> using automated AI workflows to enhance collaboration, just like CI\/CD transformed testing and deployment. With GitHub Models and GitHub Actions, you can start applying it today.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-here-s-how-continuous-ai-can-help-maintainers-you-manage-their-projects\">Here&rsquo;s how Continuous AI can help maintainers (you!) manage their projects<\/h2>\n\n\n\n<p><br>The following examples are designed for you to easily copy and paste into your project. Make sure <a href=\"https:\/\/docs.github.com\/en\/github-models\/about-github-models#enabling-github-models\">GitHub Models is enabled<\/a> for your repository or organization, and then just copy the YAML into your repo&rsquo;s .github\/workflows directory. Customize these code blocks as needed for your project.<br><br>Add permissions: models: read to your workflow YAML, and your action will be able to call models using the built-in GITHUB_TOKEN. No special setup or external keys are required for most projects.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-automatic-issue-deduplication\">Automatic issue deduplication<\/h3>\n\n\n\n<p><strong>Problem:<\/strong> You wake up to three new issues, two of them are describing the same bug. You copy and paste links, close duplicates, and move on&hellip; until it happens again tomorrow.<\/p>\n\n\n\n<p><strong>Solution:<\/strong> Implement GitHub Models and a workflow to automatically check if a new issue is similar to existing ones and post a comment with links.<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>name: Detect duplicate issues\n\non:\n  issues:\n    types: [opened, reopened]\n\npermissions:\n  models: read\n  issues: write\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.issue.number }}\n  cancel-in-progress: true\n\njobs:\n  continuous-triage-dedup:\n    if: ${{ github.event.issue.user.type != 'Bot' }}\n    runs-on: ubuntu-latest\n    steps:\n      - uses: pelikhan\/action-genai-issue-dedup@v0\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          # Optional tuning:\n          # labels: \"auto\"          # compare within matching labels, or \"bug,api\"\n          # count: \"20\"             # how many recent issues to check\n          # since: \"90d\"            # look back window, supports d\/w\/m<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"name: Detect duplicate issues\n\non:\n  issues:\n    types: [opened, reopened]\n\npermissions:\n  models: read\n  issues: write\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.issue.number }}\n  cancel-in-progress: true\n\njobs:\n  continuous-triage-dedup:\n    if: ${{ github.event.issue.user.type != 'Bot' }}\n    runs-on: ubuntu-latest\n    steps:\n      - uses: pelikhan\/action-genai-issue-dedup@v0\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          # Optional tuning:\n          # labels: &quot;auto&quot;          # compare within matching labels, or &quot;bug,api&quot;\n          # count: &quot;20&quot;             # how many recent issues to check\n          # since: &quot;90d&quot;            # look back window, supports d\/w\/m\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p>This keeps your issues organized, reduces triage work, and helps contributors find answers faster. You can adjust <code>labels<\/code>, <code>count<\/code>, and <code>since<\/code> to fine tune what it compares against.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-issue-completeness\">Issue completeness<\/h3>\n\n\n\n<p><strong>Problem:<\/strong> A bug report lands in your repo with no version number, no reproduction steps, and no expected versus actual behavior. You need that information before you can help.<\/p>\n\n\n\n<p><strong>Solution<\/strong>: Automatically detect incomplete issues and ask for the missing details.<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>name: Issue Completeness Check\n\non:\n  issues:\n    types: [opened]\n\npermissions:\n  issues: write\n  models: read\n\njobs:\n  check-completeness:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check issue completeness\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Analyze this GitHub issue for completeness. If missing reproduction steps, version info, or expected\/actual behavior, respond with a friendly request for the missing info. If complete, say so.\n            \n            Title: ${{ github.event.issue.title }}\n            Body: ${{ github.event.issue.body }}\n          system-prompt: You are a helpful assistant that helps analyze GitHub issues for completeness.\n          model: openai\/gpt-4o-mini\n          temperature: 0.2\n\n      - name: Comment on issue\n        if: steps.ai.outputs.response != ''\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: ${{ github.event.issue.number }},\n              body: `${{ steps.ai.outputs.response }}`\n            })<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"name: Issue Completeness Check\n\non:\n  issues:\n    types: [opened]\n\npermissions:\n  issues: write\n  models: read\n\njobs:\n  check-completeness:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check issue completeness\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Analyze this GitHub issue for completeness. If missing reproduction steps, version info, or expected\/actual behavior, respond with a friendly request for the missing info. If complete, say so.\n            \n            Title: ${{ github.event.issue.title }}\n            Body: ${{ github.event.issue.body }}\n          system-prompt: You are a helpful assistant that helps analyze GitHub issues for completeness.\n          model: openai\/gpt-4o-mini\n          temperature: 0.2\n\n      - name: Comment on issue\n        if: steps.ai.outputs.response != ''\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: ${{ github.event.issue.number }},\n              body: `${{ steps.ai.outputs.response }}`\n            })\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p>The bot could respond: <em>&ldquo;Hi! Thanks for reporting this. To help us investigate, could you please provide: 1) Your Node.js version, 2) Steps to reproduce the issue, 3) What you expected to happen versus what actually happened?&rdquo;<\/em><em><br><\/em><em><br><\/em>Or you can take it a step further and ensure the issue is following your contributing guidelines, like <a href=\"https:\/\/github.com\/benbalter\/ai-community-moderator\">ben-balter\/ai-community-moderator<\/a> (MIT License).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"spam-and-slop-detection\">Spam and &ldquo;slop&rdquo; detection<\/h3>\n\n\n\n<p><strong>Problem<\/strong>: You check notifications and find multiple spam pull requests or low effort &ldquo;fix typo&rdquo; issues.<\/p>\n\n\n\n<p><strong>Solution<\/strong>: Use AI to flag suspicious or low quality contributions as they come in.<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>name: Contribution Quality Check\n\non:\n  pull_request:\n    types: [opened]\n  issues:\n    types: [opened]\n\npermissions:\n  pull-requests: write\n  issues: write\n  models: read\n\njobs:\n  quality-check:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Detect spam or low-quality content\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Is this GitHub ${{ github.event_name == 'issues' &amp;&amp; 'issue' || 'pull request' }} spam, AI-generated slop, or low quality?\n            \n            Title: ${{ github.event.issue.title || github.event.pull_request.title }}\n            Body: ${{ github.event.issue.body || github.event.pull_request.body }}\n            \n            Respond with one of: spam, ai-generated, needs-review, or ok\n          system-prompt: You detect spam and low-quality contributions. Be conservative - only flag obvious spam or AI slop.\n          model: openai\/gpt-4o-mini\n          temperature: 0.1\n\n      - name: Apply label if needed\n        if: steps.ai.outputs.response != 'ok'\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            const label = `${{ steps.ai.outputs.response }}`;\n            const number = ${{ github.event.issue.number || github.event.pull_request.number }};\n            \n            if (label &amp;&amp; label !== 'ok') {\n              await github.rest.issues.addLabels({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: number,\n                labels: [label]\n              });\n            }<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"name: Contribution Quality Check\n\non:\n  pull_request:\n    types: [opened]\n  issues:\n    types: [opened]\n\npermissions:\n  pull-requests: write\n  issues: write\n  models: read\n\njobs:\n  quality-check:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Detect spam or low-quality content\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Is this GitHub ${{ github.event_name == 'issues' &amp;&amp; 'issue' || 'pull request' }} spam, AI-generated slop, or low quality?\n            \n            Title: ${{ github.event.issue.title || github.event.pull_request.title }}\n            Body: ${{ github.event.issue.body || github.event.pull_request.body }}\n            \n            Respond with one of: spam, ai-generated, needs-review, or ok\n          system-prompt: You detect spam and low-quality contributions. Be conservative - only flag obvious spam or AI slop.\n          model: openai\/gpt-4o-mini\n          temperature: 0.1\n\n      - name: Apply label if needed\n        if: steps.ai.outputs.response != 'ok'\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            const label = `${{ steps.ai.outputs.response }}`;\n            const number = ${{ github.event.issue.number || github.event.pull_request.number }};\n            \n            if (label &amp;&amp; label !== 'ok') {\n              await github.rest.issues.addLabels({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: number,\n                labels: [label]\n              });\n            }\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p>This workflow auto-screens new issues and new pull requests for spam\/slop\/low-quality, and auto labels them based on an LLM&rsquo;s judgment.<br><br>Tip: If the repo doesn&rsquo;t already have <code>spam<\/code> or <code>needs-review<\/code> labels, <code>addLabels<\/code> will create them with default styling. If you want custom colors or descriptions, pre-create them.<\/p>\n\n\n\n<p>You can also check out these related projects:&nbsp;<a href=\"https:\/\/github.com\/github\/ai-assessment-comment-labeler\" target=\"_blank\" rel=\"noreferrer noopener\">github\/ai-assessment-comment-labeler<\/a>&nbsp;(MIT license) and&nbsp;<a href=\"https:\/\/github.com\/github\/ai-moderator\" target=\"_blank\" rel=\"noreferrer noopener\">github\/ai-moderator<\/a>&nbsp;(MIT license).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"continuous-resolver\">Continuous resolver<\/h3>\n\n\n\n<p><strong>Problem:<\/strong> Your repo has hundreds of open issues, many of them already fixed or outdated. Closing them manually would take hours.<\/p>\n\n\n\n<p><strong>Solution:<\/strong> Run a scheduled workflow that identifies resolved or no-longer-relevant issues and pull requests, and either comments with context or closes them.<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>name: Continuous AI Resolver\n\n\non:\n  schedule:\n    - cron: '0 0 * * 0' # Runs every Sunday at midnight UTC\n  workflow_dispatch:\n\n\npermissions:\n  issues: write\n  pull-requests: write\n\n\njobs:\n  resolver:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run resolver\n        uses: ashleywolf\/continuous-ai-resolver@main\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"name: Continuous AI Resolver\n\n\non:\n  schedule:\n    - cron: '0 0 * * 0' # Runs every Sunday at midnight UTC\n  workflow_dispatch:\n\n\npermissions:\n  issues: write\n  pull-requests: write\n\n\njobs:\n  resolver:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run resolver\n        uses: ashleywolf\/continuous-ai-resolver@main\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p><em><strong>Note<\/strong>: The above code references an existing action in <a href=\"https:\/\/github.com\/ashleywolf\/continuous-ai-resolver\">ashleywolf\/continuous-ai-resolver<\/a> (MIT license).<br><\/em><br>This makes it easier for contributors to find active, relevant work. By automatically identifying and addressing stale issues, you prevent the dreaded &ldquo;issue pileup&rdquo; that discourages new contributors and makes it harder to spot actual problems that need attention.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"new-contributor-onboarding\">New contributor onboarding<\/h3>\n\n\n\n<p><strong>Problem<\/strong>: A first time contributor opens a pull request, but they&rsquo;ve missed key steps from your <code>CONTRIBUTING.md<\/code>.<\/p>\n\n\n\n<p><strong>Solution<\/strong>: Send them a friendly, AI-generated welcome message with links to guidelines and any helpful suggestions.<\/p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>name: Welcome New Contributors\n\non:\n  pull_request:\n    types: [opened]\n\npermissions:\n  pull-requests: write\n  models: read\n\njobs:\n  welcome:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'\n    steps:\n      - name: Generate welcome message\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Write a friendly welcome message for a first-time contributor. Include:\n            1. Thank them for their first PR\n            2. Mention checking CONTRIBUTING.md\n            3. Offer to help if they have questions\n            \n            Keep it brief and encouraging.\n          model: openai\/gpt-4o-mini\n          temperature: 0.7\n\n      - name: Post welcome comment\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            const message = `${{ steps.ai.outputs.response }}`;\n            await github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: ${{ github.event.pull_request.number }},\n              body: message\n            });<\/code><\/pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"name: Welcome New Contributors\n\non:\n  pull_request:\n    types: [opened]\n\npermissions:\n  pull-requests: write\n  models: read\n\njobs:\n  welcome:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'\n    steps:\n      - name: Generate welcome message\n        uses: actions\/ai-inference@v1\n        id: ai\n        with:\n          prompt: |\n            Write a friendly welcome message for a first-time contributor. Include:\n            1. Thank them for their first PR\n            2. Mention checking CONTRIBUTING.md\n            3. Offer to help if they have questions\n            \n            Keep it brief and encouraging.\n          model: openai\/gpt-4o-mini\n          temperature: 0.7\n\n      - name: Post welcome comment\n        uses: actions\/github-script@v7\n        with:\n          script: |\n            const message = `${{ steps.ai.outputs.response }}`;\n            await github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: ${{ github.event.pull_request.number }},\n              body: message\n            });\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"><\/path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"><\/path><\/svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"><\/path><\/svg><\/clipboard-copy><\/div>\n\n\n<p>This makes contributors feel welcome while setting them up for success by reducing rework and improving merge times.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-these\">Why these?<\/h2>\n\n\n\n<p>These examples hit the biggest pain points we hear from maintainers: triage, deduplication, spam handling, backlog cleanup, and onboarding. They&rsquo;re quick to try, safe to run, and easy to tweak. Even one can save you hours per month.<\/p>\n\n\n\n<aside data-color-mode=\"light\" data-dark-theme=\"dark\" data-light-theme=\"light_dimmed\" class=\"wp-block-group post-aside--large p-4 p-md-6 is-style-light-dimmed has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-light-dimmed--2\" style=\"border-top-width:4px\">\n<h3 class=\"wp-block-heading h5-mktg gh-aside-title is-typography-preset-h5\" id=\"h-rate-limits-and-github-model-usage\" style=\"margin-top:0\">Rate limits and GitHub Model usage<\/h3>\n\n\n\n<p>The playground and model API usage are <a href=\"https:\/\/docs.github.com\/en\/github-models\/use-github-models\/prototyping-with-ai-models#rate-limits\">rate limited<\/a> by requests per minute, requests per day, tokens per request, and concurrent requests. If you get rate limited, you will need to wait for your rate limit to reset before you can make more requests.<\/p>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"best-practices\">Best practices&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start with one workflow and expand from there<\/li>\n\n\n\n<li>Keep maintainers in the loop until you trust the automation<\/li>\n\n\n\n<li>Customize prompts so the AI matches your project&rsquo;s tone and style<\/li>\n\n\n\n<li>Monitor results and tweak as needed<\/li>\n\n\n\n<li>Avoid one size fits all automation, unreviewed changes, or anything that spams your contributors<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"get-started-today\">Get started today<\/h2>\n\n\n\n<p>If you&rsquo;re ready to experiment with AI:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enable GitHub Models in your repository settings<\/li>\n\n\n\n<li>Start with the playground to test prompts and models<\/li>\n\n\n\n<li>Save working prompts as .prompt.yml files in your repo<\/li>\n\n\n\n<li>Build your first action using the examples above<\/li>\n\n\n\n<li>Share with the community &mdash; we&rsquo;re all learning together!<\/li>\n<\/ol>\n\n\n\n<p>The more we share what works, the better these tools will get. If you build something useful, add it to the <a href=\"https:\/\/github.com\/githubnext\/awesome-continuous-ai\">Continuous AI Awesome List<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-group post-content-cta has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p>If you&rsquo;re looking for more join the <a href=\"https:\/\/maintainers.github.com\/auth\/signin\">Maintainer Community &gt;<\/a><\/p>\n<\/div>\n<\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding \u2014 saving hours each week.<\/p>\n","protected":false},"author":2019,"featured_media":86325,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"yes","_gh_post_is_no_robots":"","_gh_post_is_featured":"yes","_gh_post_is_excluded":"","_gh_post_is_unlisted":"","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"","_gh_post_sq_img_id":"","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"","_gh_post_recirc_hide":"","_gh_post_recirc_col_1":"","_gh_post_recirc_col_2":"","_gh_post_recirc_col_3":"","_gh_post_recirc_col_4":"","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2},"_wpas_customize_per_network":false,"_links_to":"","_links_to_target":""},"categories":[3332,67],"tags":[3444,2141],"coauthors":[2792],"class_list":["post-90506","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maintainers","category-open-source","tag-github-models","tag-maintainers"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How GitHub Models can help open source maintainers focus on what matters - The GitHub Blog<\/title>\n<meta name=\"description\" content=\"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How GitHub Models can help open source maintainers focus on what matters\" \/>\n<meta property=\"og:description\" content=\"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-28T19:02:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-28T19:02:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ashley Wolf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ashley Wolf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/\"},\"author\":{\"name\":\"Ashley Wolf\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/2ec8eeff2be7c6586e705f0f3f6ad3c9\"},\"headline\":\"How GitHub Models can help open source maintainers focus on what matters\",\"datePublished\":\"2025-08-28T19:02:44+00:00\",\"dateModified\":\"2025-08-28T19:02:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/\"},\"wordCount\":1081,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wallpaper_github_generic_2.png?fit=1920%2C1080\",\"keywords\":[\"GitHub Models\",\"maintainers\"],\"articleSection\":[\"Maintainers\",\"Open Source\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/\",\"name\":\"How GitHub Models can help open source maintainers focus on what matters - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wallpaper_github_generic_2.png?fit=1920%2C1080\",\"datePublished\":\"2025-08-28T19:02:44+00:00\",\"dateModified\":\"2025-08-28T19:02:45+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/2ec8eeff2be7c6586e705f0f3f6ad3c9\"},\"description\":\"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wallpaper_github_generic_2.png?fit=1920%2C1080\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wallpaper_github_generic_2.png?fit=1920%2C1080\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open Source\",\"item\":\"https:\\\/\\\/github.blog\\\/open-source\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Maintainers\",\"item\":\"https:\\\/\\\/github.blog\\\/open-source\\\/maintainers\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"How GitHub Models can help open source maintainers focus on what matters\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/2ec8eeff2be7c6586e705f0f3f6ad3c9\",\"name\":\"Ashley Wolf\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g681325f84d92fb423a8c3c144be99a0a\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g\",\"caption\":\"Ashley Wolf\"},\"description\":\"Director, Open Source Programs at GitHub I work on open source strategy and programs that support maintainers inside GitHub and across the ecosystem. I also serve on the Steering Committee for the TODO Group, where we help organizations use and sustain open source responsibly.\",\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/ashleywolf\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How GitHub Models can help open source maintainers focus on what matters - The GitHub Blog","description":"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/","og_locale":"en_US","og_type":"article","og_title":"How GitHub Models can help open source maintainers focus on what matters","og_description":"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.","og_url":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/","og_site_name":"The GitHub Blog","article_published_time":"2025-08-28T19:02:44+00:00","article_modified_time":"2025-08-28T19:02:45+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png","type":"image\/png"}],"author":"Ashley Wolf","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ashley Wolf","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#article","isPartOf":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/"},"author":{"name":"Ashley Wolf","@id":"https:\/\/github.blog\/#\/schema\/person\/2ec8eeff2be7c6586e705f0f3f6ad3c9"},"headline":"How GitHub Models can help open source maintainers focus on what matters","datePublished":"2025-08-28T19:02:44+00:00","dateModified":"2025-08-28T19:02:45+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/"},"wordCount":1081,"image":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png?fit=1920%2C1080","keywords":["GitHub Models","maintainers"],"articleSection":["Maintainers","Open Source"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/","url":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/","name":"How GitHub Models can help open source maintainers focus on what matters - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png?fit=1920%2C1080","datePublished":"2025-08-28T19:02:44+00:00","dateModified":"2025-08-28T19:02:45+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/2ec8eeff2be7c6586e705f0f3f6ad3c9"},"description":"Learn how GitHub Models helps open source maintainers automate repetitive tasks like issue triage, duplicate detection, and contributor onboarding.","breadcrumb":{"@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png?fit=1920%2C1080","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png?fit=1920%2C1080","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/open-source\/maintainers\/how-github-models-can-help-open-source-maintainers-focus-on-what-matters\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"Open Source","item":"https:\/\/github.blog\/open-source\/"},{"@type":"ListItem","position":3,"name":"Maintainers","item":"https:\/\/github.blog\/open-source\/maintainers\/"},{"@type":"ListItem","position":4,"name":"How GitHub Models can help open source maintainers focus on what matters"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/2ec8eeff2be7c6586e705f0f3f6ad3c9","name":"Ashley Wolf","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g681325f84d92fb423a8c3c144be99a0a","url":"https:\/\/secure.gravatar.com\/avatar\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8ed2adf03872c7e511bfe776ec38c7c3d709f6def9315abda869d4878475400?s=96&d=mm&r=g","caption":"Ashley Wolf"},"description":"Director, Open Source Programs at GitHub I work on open source strategy and programs that support maintainers inside GitHub and across the ecosystem. I also serve on the Steering Committee for the TODO Group, where we help organizations use and sustain open source responsibly.","url":"https:\/\/github.blog\/author\/ashleywolf\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2025\/04\/wallpaper_github_generic_2.png?fit=1920%2C1080","jetpack_shortlink":"https:\/\/wp.me\/pamS32-nxM","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/90506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/2019"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=90506"}],"version-history":[{"count":5,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/90506\/revisions"}],"predecessor-version":[{"id":90543,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/90506\/revisions\/90543"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/86325"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=90506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=90506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=90506"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=90506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}