Files
Reinier van der LeerandClaude Fable 5 5e548164e1 feat(blocks): Add GitHub notification management blocks (#13634)
### Why / What / How

**Why:** We have GitHub trigger and repo/issue/PR blocks, but no way for
agents to work with the user's GitHub notification inbox — e.g.
inbox-zero automations, notification triage, or surfacing review
requests. GitHub's Notifications API is poll-only (no webhook events
exist for it), so inbox automations run as scheduled graphs using
regular blocks.

**What:** Adds six blocks covering the [GitHub Notifications REST
API](https://docs.github.com/en/rest/activity/notifications): listing
notifications and getting / marking read / marking done / unsubscribing
from notification threads, plus mark-all-as-read. Also adds a
`GithubGetUserInfoBlock` and extends `GithubListPRReviewersBlock` with
review status info, enabling agents to determine whether the account's
user is (still) involved in a PR (example use case: auto-archiving stale
review-request notifications).

**How:** New `notifications.py` in the GitHub blocks package, following
the existing block conventions there. Notification endpoints live under
`/notifications` rather than `/repos/...`, so the blocks use
`get_api(credentials, convert_urls=False)` with absolute URLs. API
responses are normalized into a shared `NotificationItem` shape whose
`thread_id` chains into the per-thread blocks and whose `subject_url` is
converted best-effort from the API URL to the corresponding github.com
page URL. Notification blocks use the minimal `notifications` OAuth
scope.

### Changes 🏗️

- Add `GithubListNotificationsBlock`: lists the inbox with include-read
/ participating-only / `since` / `before` filters and optional repo
scoping; yields the full list plus each notification individually
- Add `GithubGetNotificationThreadBlock`: fetches one thread and exposes
title, reason, unread, subject type/URL, and repository as separate
outputs
- Add `GithubMarkNotificationsAsReadBlock`: marks all notifications as
read, optionally repo-scoped, with optional `last_read_at` cutoff
- Add `GithubMarkNotificationThreadAsReadBlock` and
`GithubMarkNotificationThreadAsDoneBlock`: per-thread read / done
- Add `GithubUnsubscribeNotificationThreadBlock`: mutes a thread
- Add `GithubGetUserInfoBlock`: fetches info on a given user, or the
authenticated user if no username is given
- Extend `GithubListPRReviewersBlock`: new `include_past_reviewers`
toggle (default off) to also list users who already submitted a review,
plus `review_requested` / `has_reviewed` / `review_state` fields on each
reviewer item; the extra API call is gated behind the toggle so existing
graphs are unaffected
- Refactor: hoist `GITHUB_API_URL` constant into `_api.py` and reuse it

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] `poetry run pytest backend/blocks/test/test_block.py` — full block
suite passes, including schema validation + mocked execution of all
new/changed blocks
- [x] `poetry run pytest backend/blocks/github/test_github_blocks.py` —
passes
- [ ] Live-run the List / Mark as read blocks against a real GitHub
account (not done — mocked execution only)

<details>
  <summary>Example test plan</summary>
  
  - [ ] Create from scratch and execute an agent with at least 3 blocks
- [ ] Import an agent from file upload, and confirm it executes
correctly
  - [ ] Upload agent to marketplace
- [ ] Import an agent from marketplace and confirm it executes correctly
  - [ ] Edit an agent from monitor, and confirm it executes correctly
</details>

#### For configuration changes:

- [x] `.env.default` is updated or already compatible with my changes
- [x] `docker-compose.yml` is updated or already compatible with my
changes
- [x] I have included a list of my configuration changes in the PR
description (under **Changes**)

<details>
  <summary>Examples of configuration changes</summary>

  - Changing ports
  - Adding new services that need to communicate with each other
  - Secrets or environment variable changes
  - New or infrastructure changes such as databases
</details>

---------

Co-authored-by: Claude Fable 5 <[email protected]>
2026-09-02 17:09:09 +00:00

12 KiB

GitHub Issues

Blocks for managing GitHub issues including creating, reading, listing, commenting, labeling, and assigning issues programmatically.

Github Add Label

What it is

A block that adds a label to a GitHub issue or pull request for categorization and organization.

How it works

The block takes the GitHub credentials, the URL of the issue or pull request, and the label to be added as inputs. It then sends a request to the GitHub API to add the label to the specified issue or pull request.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue or pull request str Yes
label Label to add to the issue or pull request str Yes

Outputs

Output Description Type
error Error message if the label addition failed str
status Status of the label addition operation str

Possible use case

Automatically categorizing issues based on their content or assigning priority labels to newly created issues.


Github Assign Issue

What it is

A block that assigns a GitHub user to an issue for task ownership and tracking.

How it works

The block takes the GitHub credentials, the URL of the issue, and the username of the person to be assigned as inputs. It then sends a request to the GitHub API to assign the specified user to the issue.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue str Yes
assignee Username to assign to the issue str Yes

Outputs

Output Description Type
error Error message if the issue assignment failed str
status Status of the issue assignment operation str

Possible use case

Automatically assigning new issues to team members based on their expertise or workload.


Github Comment

What it is

A block that posts comments on GitHub issues or pull requests using the GitHub API.

How it works

The block takes the GitHub credentials, the URL of the issue or pull request, and the comment text as inputs. It then sends a request to the GitHub API to post the comment on the specified issue or pull request.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue or pull request str Yes
comment Comment to post on the issue or pull request str Yes

Outputs

Output Description Type
error Error message if the comment posting failed str
id ID of the created comment int
url URL to the comment on GitHub str

Possible use case

Automating responses to issues in a GitHub repository, such as thanking contributors for their submissions or providing status updates on reported bugs.


Github List Comments

What it is

A block that retrieves all comments from a GitHub issue or pull request, including comment metadata and content.

How it works

This block retrieves all comments from a GitHub issue or pull request via the GitHub API. It authenticates using your GitHub credentials and fetches the complete comment history, returning both individual comments and a list of all comments with their metadata.

Each comment includes the comment ID, body text, author username, and a direct URL to the comment on GitHub.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue or pull request str Yes
limit Maximum number of comments to fetch int No
since Only include comments updated after the given ISO 8601 timestamp str No

Outputs

Output Description Type
error Error message if the operation failed str
comment Comments with their ID, body, user, and URL Comment
comments List of comments with their ID, body, user, and URL List[CommentItem]

Possible use case

Conversation Analysis: Extract all comments from an issue to analyze the discussion or generate a summary of the conversation.

Comment Monitoring: Track all responses on specific issues to monitor team communication or customer feedback.

Audit Trails: Collect comment history for compliance or documentation purposes.


Github List Issues

What it is

A block that retrieves a list of issues from a GitHub repository with their titles and URLs.

How it works

The block takes the GitHub credentials and repository URL as inputs. It then sends a request to the GitHub API to fetch the list of issues and returns their details.

Inputs

Input Description Type Required
repo_url URL of the GitHub repository str Yes
state Only include issues in this state "open" | "closed" | "all" No
include_pull_requests Whether to also include pull requests in the results. The GitHub API considers every pull request an issue. bool No
labels Only include issues that have all of these labels List[str] No
limit Maximum number of issues to fetch int No
assignee Only include issues assigned to this user. Use 'none' for unassigned issues, or '*' for issues with any assignee. str No
creator Only include issues created by this user str No
mentioned Only include issues in which this user is mentioned str No
milestone Only include issues in this milestone, by milestone number. Use 'none' for issues without a milestone, or '*' for issues with any milestone. str No
sort What to sort the issues by "created" | "updated" | "comments" No
direction Sort direction "asc" | "desc" No
since Only include issues updated after the given ISO 8601 timestamp str No

Outputs

Output Description Type
error Error message if the operation failed str
issue Issues with their title and URL Issue
issues List of issues with their title and URL List[IssueItem]

Possible use case

Creating a summary of open issues for a project status report or displaying them on a project management dashboard.


Github Make Issue

What it is

A block that creates new issues on GitHub repositories with a title and body content.

How it works

The block takes the GitHub credentials, repository URL, issue title, and issue body as inputs. It then sends a request to the GitHub API to create a new issue with the provided information.

Inputs

Input Description Type Required
repo_url URL of the GitHub repository str Yes
title Title of the issue str Yes
body Body of the issue str Yes

Outputs

Output Description Type
error Error message if the issue creation failed str
number Number of the created issue int
url URL of the created issue str

Possible use case

Automatically creating issues for bug reports or feature requests submitted through an external system or form.


Github Read Issue

What it is

A block that retrieves information about a specific GitHub issue, including its title, body content, and creator.

How it works

The block takes the GitHub credentials and the issue URL as inputs. It then sends a request to the GitHub API to fetch the issue's details and returns the relevant information.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue str Yes

Outputs

Output Description Type
error Error message if reading the issue failed str
title Title of the issue str
body Body of the issue str
user User who created the issue str

Possible use case

Gathering information about reported issues for analysis or to display on a dashboard.


Github Remove Label

What it is

A block that removes a label from a GitHub issue or pull request.

How it works

The block takes the GitHub credentials, the URL of the issue or pull request, and the label to be removed as inputs. It then sends a request to the GitHub API to remove the label from the specified issue or pull request.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue or pull request str Yes
label Label to remove from the issue or pull request str Yes

Outputs

Output Description Type
error Error message if the label removal failed str
status Status of the label removal operation str

Possible use case

Updating the status of issues as they progress through a workflow, such as removing a "In Progress" label when an issue is completed.


Github Unassign Issue

What it is

A block that removes a user's assignment from a GitHub issue.

How it works

The block takes the GitHub credentials, the URL of the issue, and the username of the person to be unassigned as inputs. It then sends a request to the GitHub API to remove the specified user's assignment from the issue.

Inputs

Input Description Type Required
issue_url URL of the GitHub issue str Yes
assignee Username to unassign from the issue str Yes

Outputs

Output Description Type
error Error message if the issue unassignment failed str
status Status of the issue unassignment operation str

Possible use case

Automatically unassigning issues that have been inactive for a certain period or when reassigning workload among team members.


Github Update Comment

What it is

A block that updates an existing comment on a GitHub issue or pull request.

How it works

This block updates an existing comment on a GitHub issue or pull request. You can identify the comment to update using either the direct comment URL, or a combination of the issue URL and comment ID. The block sends a PATCH request to the GitHub API to replace the comment's content.

The updated comment retains its original author and timestamp context while replacing the body text with your new content.

Inputs

Input Description Type Required
comment_url URL of the GitHub comment str No
issue_url URL of the GitHub issue or pull request str No
comment_id ID of the GitHub comment str No
comment Comment to update str Yes

Outputs

Output Description Type
error Error message if the comment update failed str
id ID of the updated comment int
url URL to the comment on GitHub str

Possible use case

Status Updates: Modify a pinned status comment to reflect current progress on an issue.

Bot Maintenance: Update automated bot comments with new information instead of creating duplicate comments.

Error Corrections: Fix typos or incorrect information in previously posted comments.