Repository navigation
Closed
Description
Goal
Let projects talk to each other through GitHub issues. When something outside a repository's own T3 agents opens an issue, comments, or edits or closes an issue in a managed repository, that repository's orchestrator finds out. Waking it should cost almost nothing.
Example: an Amine-Thermodynamics agent opens an issue in ePC-SAFT, or comments on one. The ePC-SAFT orchestrator should notice without the owner relaying it.
Owner request and decisions (2026-10-14).
What exists
- Writing across projects already works. In full access, agents can run
gh issue create -R <other repo>andgh issue comment. - A background job already polls each managed repository.
IssueWorkServicerunsrepository-issue-workevery 60 s and reconciles every active repository root. It lists issues in the selected milestones and admits eligible ones. It doesn't notice external comments, edits or new issues outside that admission flow. - T3 knows its own writes, through
issue_changesand the comment receipts and effects. That lets it tell "ours" apart from "external".
Design (decided)
- Scope: managed repositories only, meaning repositories with a repository orchestrator.
- Watcher, with no language model:
- Every ~2 minutes per managed repository, inside the existing scheduler, read issues and issue comments changed since a stored cursor:
GET /repos/{o}/{r}/issues?since=…&state=alland/issues/comments?since=…, with ETag/conditional requests where supported. - Drop T3's own writes for that repository (known comment and issue ids, plus the T3 actor) and bot accounts.
- Every ~2 minutes per managed repository, inside the existing scheduler, read issues and issue comments changed since a stored cursor:
- Inbox: a fork table, one row per external event: repository, issue number, kind (
issue_opened,comment,edited,closed/reopened,labeled/milestoned), author, URL, a short snippet,tagged, created time and read state. - Tagged: the issue has the label
cross-project, or the comment or body mentions@orchestrator. - Delivery to the repository orchestrator:
- Untagged events: stay in the inbox and are mentioned in one line at the orchestrator's next natural turn. They never start a turn.
- Tagged events while the orchestrator is idle: at most one short digest message every 15 minutes, and only when new tagged events exist. For example: "2 tagged external issue events since 14:00 (epc-saft fix(web): show sidebar counts in the caret slot, caret on hover #61 comment by amine-agent, fix(web): flip the sidebar's Don't ask toggle to Ask mode #62 opened). Read them with t3_issue_inbox." It holds no bodies, to stay token-light.
- Tagged events while the orchestrator is running: the same one-line note is delivered at the next safe point. Queue it rather than steering, because Claude's steering interrupts tools.
- MCP tool:
t3_issue_inbox(list unread, read by id, mark read), available to the repository orchestrator and its children. - UI:
- an unread badge on the repository orchestrator's sidebar row;
- an "Inbox" section on the repository's Issues page that lists events with links and marks them read.
- Modularity: fork-owned files behind small hooks. A fork migration numbered after the current ledger.
Not in scope
Webhooks: polling is enough at this scale, and webhooks need a public endpoint. Luna triage: add it only if the rules prove noisy. Mobile. Writing to other repositories, which already works.
Done when
- An issue or comment created in managed repository B by something other than B's own agents appears in B's inbox within a few minutes.
- A tagged event wakes an idle B orchestrator with one short digest at most every 15 minutes.
- Untagged events never start a turn.
- B's own agents' writes never appear.
- The badge and the Issues page Inbox show unread events.
- Tests cover the filter, the cursor, digest throttling and tagging. Live GitHub is verified on a mock repository, not the owner's real ones.
Metadata
Metadata
Assignees
Labels
No labels
Activity
tannerpolley commentedon Oct 14, 2026
Addendum (owner, 2026-10-14): label external issues and raise their priority.
Why a source marker is needed. All agents write to GitHub with the owner's own
ghlogin, so the author can't separate another project's agent, this repository's own agents, or the owner. Cross-project writes therefore carry a source marker.t3_issue_post, creates an issue or comment in any repository.external,from:<project>andpriority: high. It creates missing labels.gh.externalandpriority: high, plusfrom:<project>when the marker names one.tannerpolley commentedon Oct 14, 2026
Scope change (owner, 2026-10-14): no body-edit tracking.
GitHub doesn't log issue body edits. Detecting them meant snapshotting and diffing every open issue, and that was the source of most review defects.
The inbox now reports:
All of these come from GitHub's issue events log and the issue and comment lists. Body text edits are not reported.
Catch-up overflow. If more activity arrived while T3 was offline than one catch-up can page through, the watcher moves its cursor past it. It adds one tagged "missed activity, check GitHub" entry instead of retrying.
Own-change matching. T3's own changes are matched only against real transitions (no-ops are skipped), inside the GitHub request's actual time window.
tannerpolley commentedon Oct 14, 2026
Landed on main (through e8b00b2) and shipped in v2.12.7. Body-edit tracking was dropped by owner decision.