-
Notifications
You must be signed in to change notification settings - Fork 296
chore: update projectops docs #19387
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
6c63bf6
update projectops docs
mnkiefer 25755e0
Delete deep-research-report.md
mnkiefer 1e41994
Merge branch 'main' into better-project-ops
mnkiefer 9c0a641
Merge branch 'main' into better-project-ops
pelikhan 442e231
Merge branch 'main' into better-project-ops
mnkiefer 195b414
Merge branch 'main' into better-project-ops
mnkiefer 022e2e6
fix: correct invalid anchor link for add-comment in project-ops docs …
Copilot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,134 +1,132 @@ | ||
| --- | ||
| title: ProjectOps | ||
| description: Automate GitHub Projects board management with AI-powered workflows (triage, routing, and field updates) | ||
| description: Automate GitHub Projects with agentic routing, field updates, and controlled write operations | ||
| sidebar: | ||
| badge: { text: 'Event-triggered', variant: 'success' } | ||
| --- | ||
|
|
||
| ProjectOps automates [GitHub Projects](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects) management using AI-powered workflows. | ||
| ProjectOps helps teams run project operations with less manual upkeep. | ||
|
|
||
| When a new issue or pull request arrives, the agent analyzes it and determines where it belongs, what status to set, which fields to update (priority, effort, etc.), and whether to create or update project structures. | ||
| It builds on [GitHub Projects](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects), which provides the core planning and tracking layer for issues and pull requests, and adds support for judgment-heavy decisions. | ||
|
|
||
| Safe outputs handle all project operations in separate, scoped jobs with minimal permissions - the agent job never sees the Projects token, ensuring secure automation. | ||
| It uses a clear control model: the agent reads project state through GitHub tools (`tools.github` with the `projects` toolset), and write actions run through [safe-outputs](/gh-aw/reference/safe-outputs/). | ||
| ProjectOps is most useful when you want context-aware routing and field updates; for simple, rule-based transitions, [built-in automations](https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-built-in-automations) are usually enough. | ||
|
|
||
| In practice, this gives teams faster triage decisions, cleaner board state, stronger planning signals across related issues and pull requests, and more decision-ready status updates. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| 1. **Create a Project**: Before you wire up a workflow, you must first create the Project in the GitHub UI (user or organization level). Keep the Project URL handy (you'll need to reference it in your workflow instructions). | ||
| 1. **Create a Projects board** and copy the project URL. | ||
| 2. **Create PAT** by following instructions for [`GH_AW_PROJECT_GITHUB_TOKEN`](/gh-aw/reference/auth-projects/). | ||
| 3. **Define your field contract** up front (for example: Status, Priority, Team, Iteration, Target Date). See [Understanding fields](https://docs.github.com/en/issues/planning-and-tracking-with-projects/understanding-fields). | ||
|
|
||
| ## How it works | ||
|
|
||
| A practical way to adopt ProjectOps is to start with read-only MCP/GitHub analysis, then gradually add targeted write operations as workflow confidence and policy maturity increase. | ||
|
|
||
| ProjectOps combines two capability layers: | ||
| - **GitHub tools (`tools.github` + `projects` toolset)** for reading and analyzing project state. | ||
| - **Safe outputs** for controlled write operations, including: | ||
| - **[`update-project`](/gh-aw/reference/safe-outputs/#project-board-updates-update-project)** — use when you want to add issues/PRs to a project or update fields (status, priority, owner, dates, custom values). | ||
| - **[`create-project-status-update`](/gh-aw/reference/safe-outputs/#project-status-updates-create-project-status-update)** — use when you want a stakeholder-facing summary in the project Updates tab (weekly health, blockers, risks, next decisions). | ||
| - **[`create-project`](/gh-aw/reference/safe-outputs/#project-creation-create-project)** — use when automation needs to bootstrap a new board for an initiative or team. | ||
| - **[`add-comment`](/gh-aw/reference/safe-outputs/#comment-creation-add-comment)** — use when you want to explain routing decisions or request missing info on the triggering issue/PR. | ||
|
|
||
| Let's look at examples of these in action, starting with the [Project Board Summarizer](#project-board-summarizer) (read-only analysis), then moving to controlled write operations with the [Project Board Maintainer](#project-board-maintainer) example. | ||
|
|
||
| ### Project Board Summarizer | ||
|
|
||
| 2. Add **Additional Authentication** to your workflow: See [Authentication (Projects)](/gh-aw/reference/auth-projects/) for setup instructions. | ||
| Start with a regular project review that summarizes changes, flags blockers, and suggests updates without applying changes. | ||
|
|
||
| ## Example: Smart Issue Triage | ||
| Our project board might look like this: | ||
|
|
||
| This example demonstrates intelligent issue routing to project boards with AI-powered content analysis: | ||
| <picture> | ||
| <source media="(prefers-color-scheme: dark)" srcSet="/gh-aw/images/projectops-read-board_dark.png" /> | ||
| <img alt="Example GitHub Projects board used for Project Board Summarizer" src="/gh-aw/images/projectops-read-board_light.png" /> | ||
| </picture> | ||
|
|
||
| ```aw wrap | ||
| --- | ||
| on: | ||
| issues: | ||
| types: [opened] | ||
| schedule: | ||
| - cron: "0 14 * * 1" | ||
| permissions: | ||
| contents: read | ||
| actions: read | ||
| tools: | ||
| github: | ||
| toolsets: [default, projects] | ||
| github-token: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN }} | ||
| safe-outputs: | ||
| update-project: | ||
| max: 1 | ||
| github-token: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN }} | ||
| add-comment: | ||
| max: 1 | ||
| github-token: ${{ secrets.GH_AW_READ_PROJECT_TOKEN }} | ||
| --- | ||
|
|
||
| # Smart Issue Triage with Project Tracking | ||
|
|
||
| When a new issue is created, analyze it and add to the appropriate project board. | ||
|
|
||
| Examine the issue title and description to determine its type: | ||
| - Bug reports → Add to "Bug Triage" project, status: "Needs Triage", priority: based on severity | ||
| - Feature requests → Add to "Feature Roadmap" project, status: "Proposed" | ||
| - Documentation issues → Add to "Docs Improvements" project, status: "Todo" | ||
| - Performance issues → Add to "Performance Optimization" project, priority: "High" | ||
|
|
||
| After adding to project board, comment on the issue confirming where it was added. | ||
| ``` | ||
|
|
||
| This workflow creates an intelligent triage system that automatically organizes new issues onto appropriate project boards with relevant status and priority fields. | ||
|
|
||
| ## Available Safe Outputs | ||
|
|
||
| ProjectOps workflows leverage these safe outputs for project management operations: | ||
|
|
||
| ### Core Operations | ||
|
|
||
| - **[`create-project`](/gh-aw/reference/safe-outputs/#project-creation-create-project)** - Create new GitHub Projects V2 boards with custom configuration | ||
| - **[`update-project`](/gh-aw/reference/safe-outputs/#project-board-updates-update-project)** - Add issues/PRs to projects, update fields (status, priority, custom fields), and manage project views | ||
| - **[`create-project-status-update`](/gh-aw/reference/safe-outputs/#project-status-updates-create-project-status-update)** - Post status updates to project boards with progress summaries and health indicators | ||
|
|
||
| Each safe output operates in a separate job with minimal, scoped permissions. See the [Safe Outputs Reference](/gh-aw/reference/safe-outputs/) for complete configuration options and examples. | ||
|
|
||
| ## Key Capabilities | ||
| # Project Board Summarizer | ||
|
|
||
| **Project Creation and Management** | ||
| Review [project 1](https://github.com/orgs/my-mona-org/projects/1). | ||
|
|
||
| - Create new Projects V2 boards programmatically | ||
| - Add issues and pull requests to projects with duplicate prevention | ||
| - Update project status with automated progress summaries | ||
| Return only: | ||
|
|
||
| **Field Management** | ||
| - New this week | ||
| - Blocked + why | ||
| - Stale/inconsistent fields | ||
| - Top 3 human actions | ||
|
|
||
| - Set status, priority, effort, and sprint fields | ||
| - Update custom date fields (start date, end date) for timeline tracking | ||
| - Support for TEXT, DATE, NUMBER, ITERATION, and SINGLE_SELECT field types | ||
| - Automatic field option creation for single-select fields | ||
|
|
||
| **View Configuration** | ||
|
|
||
| - Automatically create project views (table, board, roadmap) | ||
| - Configure view filters and visible fields | ||
| - Support for swimlane grouping by custom fields | ||
|
|
||
| **Orchestration & Monitoring** | ||
|
|
||
| - Use Projects as a shared dashboard across runs/workflows | ||
| - Post status updates with health indicators | ||
| - Coordinate work across repositories and workflows (optionally with an orchestrator/worker setup) | ||
|
|
||
| See the [Safe Outputs reference](/gh-aw/reference/safe-outputs/#project-board-updates-update-project) for project field and view configuration. | ||
| Read-only. Do not update the project. | ||
| ``` | ||
|
|
||
| ## Authentication for Project Operations | ||
| Running this workflow generates a concise summary of project status. We can find this in the GitHub Actions agent run output: | ||
| <picture> | ||
| <source media="(prefers-color-scheme: dark)" srcSet="/gh-aw/images/projectops-read-summary_dark.png" /> | ||
| <img alt="Workflow summary output generated by Project Board Summarizer" src="/gh-aw/images/projectops-read-summary_light.png" /> | ||
| </picture> | ||
|
|
||
| Project operations require additional authentication since the default `GITHUB_TOKEN` lacks necessary permissions for the Projects API. See [Authentication (Projects)](/gh-aw/reference/auth-projects/). | ||
| ### Project Board Maintainer | ||
|
|
||
| ## When to Use ProjectOps | ||
| Let's write an agentic workflow that applies changes to a project board, starting with issue triage. | ||
|
|
||
| ProjectOps complements [GitHub's built-in Projects automation](https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-built-in-automations) with AI-powered intelligence: | ||
| This workflow runs on new issues, analyzes issue content and context, and decides whether to add the issue to the project board and how to set key fields. | ||
|
|
||
| - **Content-based routing** - Analyze issue content to determine which project board and what priority (native automation only supports label/status triggers) | ||
| - **Multi-issue coordination** - Add related issues/PRs to projects and apply consistent tracking labels | ||
| - **Dynamic field assignment** - Set priority, effort, and custom fields based on AI analysis | ||
| - **Automated project creation** - Create new project boards programmatically based on initiative needs | ||
| - **Status tracking** - Generate automated progress summaries with health indicators | ||
| ```aw wrap | ||
| --- | ||
| on: | ||
| issues: | ||
| types: [opened] | ||
| permissions: | ||
| contents: read | ||
| actions: read | ||
| tools: | ||
| github: | ||
| toolsets: [default, projects] | ||
| github-token: ${{ secrets.READ_PROJECT_GITHUB_TOKEN }} | ||
| safe-outputs: | ||
| update-project: | ||
| project: https://github.com/orgs/ORG/projects/123456 | ||
| max: 1 | ||
| github-token: ${{ secrets.WRITE_PROJECT_GITHUB_TOKEN }} | ||
| add-comment: | ||
| max: 1 | ||
| --- | ||
|
|
||
| ## Common Challenges | ||
| # Intelligent Issue Triage | ||
|
|
||
| **Permission Errors**: Project operations require `projects: write` permission via a PAT. Default `GITHUB_TOKEN` lacks Projects v2 access. | ||
| Analyze each new issue and decide whether it belongs on the portfolio board. | ||
|
|
||
| **Field Name Mismatches**: Custom field names are case-sensitive. Use exact field names as defined in project settings. Field names are automatically normalized (e.g., `story_points` matches `Story Points`). | ||
| Set structured fields only from allowed values: | ||
| - Status: Needs Triage | Proposed | In Progress | Blocked | ||
| - Priority: Low | Medium | High | ||
| - Team: Platform | Docs | Product | ||
|
|
||
| **Token Scope**: Default `GITHUB_TOKEN` cannot access Projects. See [Authentication (Projects)](/gh-aw/reference/auth-projects/) for setup. | ||
| Post a short comment explaining your routing decision and any uncertainty. | ||
| ``` | ||
|
|
||
| **Project URL Format**: Use full project URLs (e.g., `https://github.com/orgs/myorg/projects/42`), not project numbers alone. | ||
| ## Best practices | ||
|
|
||
| **Field Type Detection**: Ensure field types match expected formats (dates as `YYYY-MM-DD`, numbers as integers, single-select as exact option values). | ||
| In production, keep the loop simple: issue arrives, agent classifies and proposes/sets fields, safe outputs apply allowed writes, and humans review high-impact changes and exceptions. | ||
|
|
||
| ## Additional Resources | ||
| - **Auto-apply** low-risk hygiene (add item, set initial status/team). | ||
| - **Suggest-only** commitments (priority/date/iteration changes). | ||
| - **Always gate** cross-team or cross-repo impact. | ||
| - Use `max` caps, allowlists, and explicit approvals to control writes. | ||
| - Keep single-select values exact to avoid field drift. | ||
| - If you only need simple event-based transitions, prefer [built-in GitHub Project workflows](https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-built-in-automations). | ||
|
|
||
| - [Authentication (Projects)](/gh-aw/reference/auth-projects/) - Project-specific authentication setup | ||
| - [Safe Outputs Reference](/gh-aw/reference/safe-outputs/) - Complete safe output configuration and API details | ||
| - [Projects & Monitoring](/gh-aw/patterns/monitoring/) - Design pattern guide | ||
| - [Orchestration](/gh-aw/patterns/orchestration/) - Design pattern guide | ||
| - [Trigger Events](/gh-aw/reference/triggers/) - Event trigger configuration options | ||
| - [IssueOps](/gh-aw/patterns/issue-ops/) - Related issue automation patterns | ||
| - [Authentication Reference](/gh-aw/reference/auth/) - All tokens and secrets | ||
| References: [Authentication (Projects)](/gh-aw/reference/auth-projects/), [Safe Outputs Reference](/gh-aw/reference/safe-outputs/), [Projects & Monitoring](/gh-aw/patterns/monitoring/), and [IssueOps](/gh-aw/patterns/issue-ops/). | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.