Repository navigation
GitHub/Vercel notch panel and actions, terminal Claude Code sessions, reply from the notch - #280
Closed
guerraOrzc wants to merge 7 commits into
Closed
guerraOrzc wants to merge 7 commits into
guerraOrzc wants to merge 7 commits into
Conversation
…ide panel - Settings: pick the GitHub repos to watch (up to 20; none = the 10 most recently pushed) and the Vercel scope (personal account or a team). Vercel calls, iPhone actions included, now pass teamId. - Notch: the GitHub / Vercel card title picks the repo or project in focus, as chips in the right card. Alerts still cover every watched item. - Right card: PR lists, default-branch CI and deployment details open in place of the agent pills, which come back on ✕, Esc, a focus change, the island collapsing, or an approval/question. - Vercel list honours the project filter; Vercel stops polling while its pill is off (unless iPhone sync is on); a scope change doesn't alert. - Pulse query moved to GitHubPulse.query(watched:), with tests. - project.pbxproj regenerated with XcodeGen 2.46 (adds SidePanelView.swift). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…right panel - GitHub panel rows: Merge (my non-draft PRs), Approve (reviews asked of me), Re-run failed jobs (failing default-branch CI, latest failed run). - Vercel deployment panel: Open, Redeploy (ready or failed), Promote (ready, not already production). - Every action needs a second "Confirm?" click; the result shows in the panel header and the data refreshes. - ServiceAPI moved out of the PHONE_LINK-only ServiceDetailRunner into ServiceAPI.swift so the notch and the iPhone share one implementation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… → preview - Vercel: builds in progress are kept (amber, "building…"), with Cancel build in their panel; the finished alert fires once per finished deployment, including one that was building. A failed deployment's panel shows Vercel's errorMessage, else the most relevant build-log line. - Claude Code sessions: GitRepoInfo reads the repo and branch from the session's .git (worktrees included); SessionGitHubLinker looks up that branch's open PR and CI while the island is open on the session (GraphQL variables, fork PRs with the same branch name ignored). A chip next to the session name opens a panel with the PR (Merge), the checks (Re-run) and the Vercel preview. - My PRs: a ▲ opens the PR's Vercel preview when one matches its branch. - iPhone: builds in progress read as "Building", not as failures. - Tests: GitRepoInfoTests (+ scripts/test-git-repo-info.sh), SessionBranchInfo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Claude Code sessions run in a terminal (Warp, Terminal, iTerm, Ghostty, kitty, Alacritty, WezTerm, Hyper, Zed) now route to the Claude Code pill, including approval and question cards. The pill says "Claude Code" and its open button brings the terminal forward (ClaudeHost). - Reply panel: continue the focused Claude Code session from the notch with `claude -p --resume` in the background. SessionResumer is shared with the iPhone instructions and keeps the hooks on the same pill and host. - The session branch/PR chip now also shows on the Claude Code pill's card. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Session → PR/CI never ran: the linker skipped integration tasks, and every Claude Code pill is one. The branch chip, its panel and the preview row now work on the Claude Code pill. - Vercel panel: the failure reason is looked up again when a build fails while the panel is open. - Reply panel: the island no longer auto-collapses while it is open, ⌘ + arrows move the text cursor instead of switching pills, and the message goes after "--" so text starting with "-" isn't read as an option. - "No failed run to re-run" shows as a grey notice instead of a success. - A production deployment on the session's branch is labelled Production. - Vercel: a poll answer from the previous team scope is dropped. - Settings: the repository list loads up to 500 repos (5 pages). - Cleanup: unused TurnRecorder.lastSession removed, doc comments fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- New setting (off by default): "Answer questions and permissions from terminal sessions in the notch". Off: terminal sessions still show in the notch, but their questions and permission requests go straight back to the terminal. On: the notch shows them first, as for VS Code. - Approvals and questions from a terminal no longer flip the Claude Code pill back to "VS Code" (the host was dropped on those paths). - A failed reply from the notch shows "⚠ Reply failed: …" as the session's last line instead of only an error sound. - The branch/PR chip now works for every workspace session with a folder, Cursor included. - ClaudeHost no longer depends on AgentTask; new tests (scripts/test-claude-host.sh); deprecated activation call replaced; misplaced doc comment fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts: HookServer notes and approval routing (kept Copilot CLI and Muse Code alongside terminal sessions), the localized "Watching %lld of %lld" label (kept with the repo limit), project.pbxproj regenerated with XcodeGen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 7, 2026
Contributor
Author
|
Split into three PRs, one topic each as CONTRIBUTING asks:
The code is the same as here; #283's branch has exactly this PR's files. |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This draft PR adds three features to the Mac app (
NotchBuddy/):It bundles three topics, which goes against "one topic per PR". They share code: the right-side panel is used by all three, and the shared runner is used by the reply and the iPhone instructions. Splitting them means stacked PRs. Happy to do that if you prefer, along with anything else that should change. Screenshots/GIFs are still to come; they'll be added before this leaves draft.
The iPhone app, the widgets and the Windows/Linux app are untouched; the CoucouPhone scheme still builds. Pill IDs, the bundle ID and
~/.claude/settings.jsonhandling are unchanged.1. GitHub and Vercel in the notch
Settings
/user/repos(owner, collaborator and organization member, archived repos excluded, up to 500 repos).r0…rN, each checked against[A-Za-z0-9._-]./v2/teams.?teamId=through a newVercelAPI.url(_:).In the notch
SidePanelView.swift).actions/runs).PhoneLink/ServiceDetailRunner.swiftinto a sharedServiceAPI.swift, unchanged apart from the team scope.errorMessage, else the most specific error line of its build log (v3/deployments/{id}/events, terminal color codes stripped).#12+ CI dot), or the branch name..git, read as files (GitRepoInfo.swift, nogitprocess); worktrees andgitdir:files are followed.SessionGitHubLinker.swift) passes the repo and branch as GraphQL variables. It keeps only PRs whose head repo is the origin repo, so a fork's same-named branch doesn't match.Behavior changes to existing views (CLAUDE.md asks not to restyle shipped views without being asked, so flagging them here):
VercelDetailView) is replaced by the right-side panel, and every deployment row can be tapped.2. Claude Code sessions started in a terminal
Until now, hook events not coming from VS Code or Cursor were dropped ("Ignored … from WarpTerminal" in
nb.log). Sessions in Warp, Terminal, iTerm, Ghostty, kitty, Alacritty, WezTerm, Hyper and Zed (ClaudeHost.swift, matched on__CFBundleIdentifier, elseTERM_PROGRAM) now route to the existingintegration_claudepill:Questions and permission requests from terminal sessions stay in the terminal by default. The
--askand PermissionRequest hooks hold the request until the notch answers, so showing them in the notch would make the terminal wait. A new setting under the Claude Code hooks, "Answer questions and permissions from terminal sessions in the notch" (off by default), lets terminal users opt into the VS Code behavior. When it is off, the request is answered withaskat once.Like VS Code today, the pill follows the most recently active session.
3. Replying to a session from the notch (GitHub build)
claude -p --resume <session id> -- <text>in the session's folder, in the background, through a newSessionResumer.InstructionRunner(iPhone instructions) now uses the same runner, so it gains terminal support, and the--fix: a message starting with-is never read as an option.AppState.claudeSessions), never from the UI.Not in the App Store build: it can't start
claudeand can't read.gitin the sandbox, so it has neither the reply box nor the session chip.Not done / known limits
Localizable.xcstrings, but no translations are included.Testing
PHONE_LINK), CoucouAppStore (CODE_SIGNING_ALLOWED=NO) and CoucouPhone (iOS Simulator) build on Xcode 27.main.scripts/test-*.shpass, including these new ones:test-claude-host.sh(terminal detection, labels, the setting is off by default);test-git-repo-info.sh(remote URLs, HEAD, config, worktrees);test-github-pulse.sh(alias parsing, repo filtering,SessionBranchInfoincluding the fork case).askimmediately.claude -p --resume <id> -- "--…"continues a session, including a message that starts with--.🤖 Generated with Claude Code