feat: add jackin daemon and Desktop Agent Hub#317
Open
donbeave wants to merge 23 commits into
Open
Conversation
This was referenced May 16, 2026
Closed
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
320adbe to
c70e85a
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
c70e85a to
f03a9ba
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
…ion-routing Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com> # Conflicts: # docs/src/content/docs/reference/goals/jackin-desktop-agent-hub.mdx # src/runtime/launch.rs
Refresh the consolidated daemon/Desktop branch against main (63 commits). Resolve the sole conflict in src/runtime/launch.rs: restore git_repo_name and is_git_dir helpers in repo_cache.rs (main GC'd them as dead; the workspace repo/branch label-stamping path is their live consumer) and drop the unused confirm_repo_removal_interactive import. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Claude <noreply@anthropic.com>
Strip the host daemon (src/daemon.rs, src/cli/daemon.rs) and the daemon-coupled macOS menu-bar app (desktop/macos) from the consolidated Desktop branch. The daemon was built ahead of the product: the actual target is a CMUX-style native window that embeds libghostty and launches `jackin load` directly, which needs no daemon for v1. Revert the daemon wiring (cli/app/lib/paths) and the launch.rs daemon-socket mount plus the speculative workspace repo/branch label-stamping that only the daemon consumed. The enrichment plane (PR inbox, account status, session discovery, notifications) returns in a later PR when the app needs it; git history preserves the removed implementation. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Claude <noreply@anthropic.com>
Rewrite the Desktop Agent Hub roadmap item around the actual product: a native macOS window modeled on CMUX that embeds libghostty terminal surfaces and a WKWebView browser, with a left sidebar grouping isolated sessions by workspace and per-space top tabs. Each terminal surface runs `jackin load` directly, so v1 depends only on the `jackin` CLI; the host daemon returns later as a pure enrichment plane (PR inbox, account state, attention routing). Remove the daemon-era container-to-host notification bridge (jackin-notify plus its socat dependency in the construct image), and revert the jackin-daemon and agent-attention-prompts roadmap items to their pristine "open — design proposal" state now that the consolidated daemon implementation has been removed. Update the roadmap overview entry to match the reset. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Claude <noreply@anthropic.com>
Start the fresh, window-first macOS app called for by the Desktop Agent Hub design reset. SwiftPM executable (Swift 6, macOS 14+) so it builds and runs from the terminal during early iteration; .app bundling and signing come later. Milestone 1 is intentionally minimal: a SwiftUI WindowGroup with an activation delegate that foregrounds the window under `swift run`. No sidebar, terminal, or CLI wiring yet — those land as separate previewable steps. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Claude <noreply@anthropic.com>
…chor Tie the design reset back to the original Desktop Agent Hub idea: the goal (a native operator control surface for what's running, what needs review, and which accounts are near exhaustion) is unchanged; only the foundation changed. Frame the original menu-bar + daemon prototype as all chrome with no terminal, and the CMUX-style embedded-terminal window as the foundation the original idea was missing. Recast the deferred daemon work as exactly the original control-surface features, layered on the terminal foundation. Replace the v1 implementation list with a previewable milestone checklist that doubles as the in-PR resume anchor (milestone 1 done, awaiting operator preview), and record the concrete libghostty embedding symbols and their experimental status in the open questions. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Claude <noreply@anthropic.com>
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.
Summary
This consolidates the jackin' daemon and Desktop Agent Hub work into one reviewable PR. It introduces the per-user host daemon with a private Unix socket, versioned
daemon/hellohandshake, lifecycle/status/log/warm commands, keep-awake/cache/notification foundations, daemon-backed workspace and running-session discovery, per-session repository/branch/linked-PR correlation, GitHub PR lookup endpoints with DiffsHub URLs, Ghostty/browser action endpoints, account credential-source reporting for Claude/Codex/Amp/Kimi/OpenCode, the first event-route contract, and a native macOS SwiftUI/AppKit Desktop shell that consumes those daemon APIs for menu bar health, active project grouping, workspace counts, PR inboxes, account cards, filtered Desktop views, workspace launch/reconnect actions, and branch/PR visibility in Workspaces and Running Agents.Hard rule / impact callout
The daemon preserves the host-mutation rule: it reads host-side state where needed, but daemon-managed smoothing and command execution stay explicit, scoped, and surfaced through daemon/Desktop contracts. This PR adds host-side daemon lifecycle commands and macOS Desktop code, so reviewers should pay particular attention to socket permissions, launch/control surfaces, and any code path that could mutate host state without an operator-visible action.
What's deferred
jackin-attentionMCP enrichment, waiting/blocked attention state, and native Notification Center click activation remain open;event/subscribecurrently returns a documented poll/click-route contract.daemon/helloremain follow-up work.session/listis still label-backed, now enriched with daemon-owned GitHub PR correlation when repository and branch labels are available.Consolidated PR trail
This PR replaces the narrower stacked PRs so the whole feature can be reviewed and validated together: #283, #306, #307, #308, #310, #311, #312, #313, #314, #315, and #316. Those PRs should stay closed as superseded by this consolidated PR.
Verify locally
Checkout
Paste this first to bypass the
tirithpaste scanner for the rest of the session:export TIRITH=0Then paste the checkout block:
Isolation
Static checks
Rust tests
These tests cover daemon protocol negotiation, Desktop capability exposure, workspace/session discovery, repository branch label derivation from the mounted workspace repo, GitHub PR parsing/filtering, DiffsHub URL derivation, per-session branch-to-PR correlation, Ghostty/browser action contracts, account status caching, event route contracts, macOS notification/script validation, and Docker label stamping.
Docs checks
User smoke
Expected behavior: daemon status reports version, pid, socket path, capabilities, keep-awake/cache/notification adapter state, and the existing console flow still launches workspaces while new launches stamp workspace repository and branch labels for daemon discovery.
macOS Desktop smoke
cd desktop/macos swift run JackinDesktopExpected behavior on macOS with Swift installed: the menu bar item appears, Refresh calls
daemon/hello, Desktop shows daemon-backed health/workspace/session/PR/account data, PR rows expose separate GitHub and DiffsHub actions, Projects includes PR-backed and running-session-backed repositories, Workspaces and Running Agents show repository/branch/linked-PR state when detected, Accounts shows daemon-provided credential-source presence and cache freshness for Claude/Codex/Amp/Kimi/OpenCode, and browser/Ghostty actions route through daemon endpoints. Swift validation is host-dependent and may need to run outside Linux CI/agent environments.Documentation
cd docs bun install --frozen-lockfile bun run devAstro serves at
http://localhost:4321/. Pages to walk:http://localhost:4321/reference/roadmap/jackin-daemon/
UPDATED roadmap page. Check daemon lifecycle, protocol capabilities, security/host-side effects, session/PR contract, event contract, and phase status against the implemented feature.
http://localhost:4321/reference/roadmap/jackin-desktop-agent-hub/
UPDATED roadmap page. Check the Desktop Agent Hub daemon dependency, menu bar/window slices, filters, workspace/session/account actions, branch/PR visibility, and attention routing notes.
http://localhost:4321/reference/goals/jackin-desktop-agent-hub/
UPDATED goal page. Check that the consolidated implementation path matches the current goal framing.
http://localhost:4321/reference/roadmap/
UPDATED roadmap overview. Check that daemon/Desktop items appear in the correct status sections.
Verification performed on this head
cargo fmt --checkcargo clippy --lib -- -D warningscargo test --lib daemon::tests— 26 daemon tests passed.cargo test --lib workspace_repo_labels_reads_mounted_workdir_git_state— 1 runtime launch-label test passed.cargo test --lib load_agent_sets_display_name_label— 1 runtime launch-label test passed.cd docs && bun install --frozen-lockfilecd docs && bun run buildcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun test— 5 tests passed.cd desktop/macos && swift --versionfailed withzsh:1: command not found: swift, soswift run JackinDesktopcould not be executed in this environment.Migration notes
None. The new daemon/Desktop surfaces are additive for pre-release jackin'. New Docker labels are additive on future launches, and existing running containers without those labels still appear through fallback fields.