A single page that lists open, parentless work across organizations Wizard can reach on your behalf — Goals, Problems, Bugs, HR cards, and other issue types — in the team's shared priority order, with attention signals for work that concerns you.
Open it at: https://wizard.holdex.io/notifications
The board uses GitHub App authorization (not the same login as invoices or calendar).
/notifications.Use Sign out on the page to clear the App session.
Each row is an open parentless issue: nothing linked above it in GitHub's parent–child hierarchy. A quiet Goal with no activity still appears; it is on the board because the work is open, not because something is unread.
For each item the board shows:
Expanding a row lists your non-done threads for that item: activity on the item itself, plus child threads that roll up to it (e.g. a PR that closes a Problem under the Goal, or a sub-issue under the Goal). Roots are resolved when a signal is raised; older thread rows without roots stay invisible under the Goal until something new raises on them.
Preferences (toolbar) can turn on Expand all items. Visible rows that have threads then start open; quiet rows stay closed. You can still collapse any row. The choice stays on this browser only. Default is off: items start collapsed.
If the same PR closes work under two Goals, it appears under both. Mark done or read on either Goal clears that thread everywhere — there is one notification state per person per thread.
| Dot | Meaning |
|---|---|
| Filled | Unread signal; colour follows the loudest class (Direct → Participating → Watching) |
| Hollow | Only read signals remain (row stays, dimmed) |
| None | Nothing waiting for you on this item |
Colours today: Direct (primary), Participating (amber), Watching (slate).
Each expanded line shows a short summary (who + what) and how long ago the signal was raised, and links to the thread on GitHub. A thread that is closed or merged on GitHub carries that word before its summary; an open thread carries nothing. The word comes from the events Wizard handles, so a thread with no event since this shipped shows none. Hover or focus lights the whole line. The trailing icons toggle read / unread (envelope), open the subscription menu (bell / bell-off / eye), mark done (check), and copy AI prompt (sparkles). Opening the thread / item from the board marks read. Read dims the line with a hollow dot; the item stays in its ranked place. Mark done removes that thread from the expand list and shows a short Undo toast; after it dismisses, the thread stays gone. Clear all at the top of the expanded list marks every thread under that item done at once — the item stays in its ranked place with no dot. A single Undo toast restores those threads while it is visible.
Copy AI prompt puts a predefined prompt template plus a link to that thread on your clipboard, ready to paste into an AI tool — it never changes read or done state, and never includes the actual comment text.
The subscription menu is one of three states, per thread — it only affects threads you already have a row for:
| State | Delivers |
|---|---|
| Subscribe (default) | Every signal class |
| Mute | Direct only |
| Watch outcome | Direct, plus closed / reopened / merged |
Direct — a mention, assignment, or review request — always reaches you no matter which state is set; muting or watching outcome only ever narrows Participating/Watching, never Direct.
With the Wizard browser extension installed, the same state is written to GitHub's own subscription for that thread, from any open github.com tab (within a few seconds) or on your next GitHub page load. Until then the bell icon carries a small dot. Subscribe maps to Subscribed, Mute to Unsubscribed, Watch outcome to Custom (closed and reopened, plus merged on a PR). Changing a subscription on GitHub with the extension's own buttons updates the board the same way. Without the extension, the board keeps its setting and GitHub is left unchanged.
Reading a thread's subscription from GitHub also gives you a board row for
that thread if you had none: a subscribed state on GitHub means you took
part in the thread or subscribed to it yourself. The row starts read and
carries no signal, so it marks nothing until one arrives.
When an item's body has an ETA: DD-MMM-YYYY line (the # Deadline section
Goals and Bugs already use), the board shows it next to the item's org/repo.
Its colour is a hint, nothing else — it never changes the item's rank or
raises a signal:
| Colour | Meaning |
|---|---|
| Plain | No ETA, far off, or ETA: undefined |
| Yellow | Due within a few days |
| Orange | Due today |
| Red | Past due |
[DRAFT] items show their ETA in plain text; it never tints, whatever its
value.
Raised by Wizard from GitHub App webhooks in orgs where the App is installed.
Direct — aimed at you: mention, assign, review requested (from you, or
from a team you belong to); or (as PR author)
changes requested / a comment-only review. Mentions on draft PRs still raise.
Editing a body or comment raises again only when your @handle is newly added.
Participating — activity on a thread you authored, are assigned to, or have already commented on (including submitting a review): someone else comments (conversation or inline review), or approves your PR. Draft PR conversation / approve stays quiet. Comment edits do not raise Participating. Commenting or reviewing still counts as participation even when that action raised no signal for you.
Watching — lifecycle on a thread you follow: opened, closed, reopened, or merged (non-draft PRs). You follow a thread when you are assigned to it, or when your subscription on it is Subscribe or Watch outcome. Assignees of a parent Goal are not notified for a child PR yet.
Signals are stored per person. The actor who did the action does not get a
signal for their own action. Bot accounts and logins in the org whitelist’s
excludedUsers list do not receive signals.
Needs me shows items assigned to you, plus any item that still has an
uncleared signal for you (filled unread or hollow read), in the same ranked
order. Marking a thread read does not drop it from the filtered list — Clear
or done does, unless you are still assigned. Quiet items you are not assigned
to stay hidden. Turn it off to see the full board again. The filter is in the
URL (?needs-me=1), so it survives refresh and can be shared.
Types lists every GitHub Issue Type currently on your board (Goal, Bug,
HR, and so on — issues with no type set show as Untyped), each with how
many items carry it. Uncheck a type to drop every item of that type from the
board entirely; check it again to bring it back. It combines with Needs me —
both narrow the same list, neither reorders it. The hidden set is in the URL
(?hide-types=...), so it survives refresh and can be shared.
Assignees lists everyone currently assigned to something on your board,
each with how many items carry them. Uncheck a name to hide their items —
an item with more than one assignee only drops once every one of its
assignees is hidden, so hiding a co-assignee never hides an item you're also
on. Unassigned pins under All, same treatment — uncheck it to hide
unclaimed items, the same way unchecking a name hides theirs. It combines
with Needs me and Types — all three narrow the same list, none reorders it.
The hidden set is in the URL (?hide-assignees=...), so it survives refresh
and can be shared.
Known Holdex team members sort to the top of the list, ahead of everyone else (alphabetical within each group), so you don't have to scroll through every org member to find who you're looking for. Type in the search box at the top to narrow the list by name — All and Unassigned stay pinned above it and are never filtered out by a search. The All checkbox toggles every entry at once, Unassigned included, regardless of the search box — useful for isolating a couple of people by unchecking All, then checking just those names back on, instead of unchecking everyone else one at a time. The Types filter has the same search box and All control. Both lists scroll internally past a couple hundred pixels rather than growing the page.
Use Coverage to see which organizations (and repositories) Wizard can look at for you. Compare that to what you use day to day — if something is missing, the board is not looking there (install or access gap), not necessarily that the work does not exist.
Refresh coverage in that dialog re-queries GitHub Search for every covered org and updates the cached item list. Day to day, the page also refreshes covered orgs in the background; use it when an org or repo you expect is missing. While a refresh is running, the Coverage button is disabled and shows a spinner.
The subtitle under Items shows when the item list was last fetched, when its cache expires (items are cached for up to 10 minutes — hover the subtitle for exactly what that means), when Wizard last accepted a signal event (pipeline heartbeat across the team, not only your open threads), and — when someone has set the shared order — when that order last changed and by whom.
Marks poll every few seconds from Wizard's own signal store, so a new mention or review request appears without a reload and without moving any row. The list of items itself is not refreshed on that cadence, and nothing refreshes it in the background on a timer either — once its cache expires, it just stays as-is until the next time this page is loaded or reloaded, which then fetches fresh data for whatever expired. Use Refresh coverage in Coverage to fetch now instead of waiting on that.
There is one cross-organization ranked order for the whole team. Ranked items appear first, in that order. Everything else is unranked (newest updated first), under an unranked separator when both sides are present.
Nothing on the board reorders rows by urgency, assignee, signal class, or how late an ETA is. Position is importance; the dot is separate.
Managers (isManager: true in Holdex team-members config) see reorder controls
on each row:
| Control | Effect |
|---|---|
| Send to top | First among ranked items |
| Send to bottom | Last among ranked items |
| Set position | Place at a chosen 1-based slot in the ranked list |
| De-rank | Remove from the shared order (item joins unranked while it stays open) |
Promoting an unranked item with top / bottom / set position inserts it into the ranked list at that place. Non-managers see the same sorted list but cannot change the order.
Closing an issue removes it from the open Search results, so it leaves your board list. Its place in the shared order is kept until a manager de-ranks it (so a reopen can return to the same slot). Those ids are not listed separately on the board yet — if you need to clear a closed item from the order, reopening it (or using a later cleanup) and de-ranking may be required until a dedicated management surface exists.
The product intent and fuller behaviour are described in the Goal Spec
contextual GitHub notifications
(in the monorepo at docs/specs/contextual-github-notifications-presence-based.md).