Skip to content

Add local vault, agent setup, simplified control panel, and macOS distribution - #232

Open
0thernet wants to merge 25 commits into
mainfrom
codex/ghostget-desktop-distribution-vault
Open

Add local vault, agent setup, simplified control panel, and macOS distribution#232
0thernet wants to merge 25 commits into
mainfrom
codex/ghostget-desktop-distribution-vault

Conversation

@0thernet

@0thernet 0thernet commented Sep 11, 2026

Copy link
Copy Markdown
Member

Ghostget now has a simpler native control panel for accounts, activity, approvals, access, and Vault, with agent setup in the sidebar footer. Account setup starts with common services; advanced connection details are optional. The activity table retains searchable, filterable, virtualized cursor loading. Production, Direct, and inert marketing previews share the same UI.

The new ghostget setup --json protocol lets an agent inspect setup and request a specific service without granting itself access. Optional native Chrome discovery returns bounded profile/service hints from cookie metadata; it does not decrypt cookies, verify login, or connect accounts. Cancellation, timeout, app generation, consent revision, and process cleanup are explicit boundaries.

Local passwords and tokens live in macOS Keychain. Optional 1Password access is restricted to a dedicated vault and selected fields. An agent may use an expiring grant for one exact HTTPS GET and receive selected JSON fields; native secret entry and the agent protocol never return plaintext credentials. Lock, revocation, approvals, and durable request metadata remain visible in the app.

A separate macOS pipeline builds, signs, verifies, attests, and publishes an immutable desktop prerelease while preserving the canonical five-asset CLI release. Public desktop downloads require Developer ID signing and notarization. The white ghost emoji now appears in the app, native icon, website, social card, and marketing previews, with reviewed asset provenance.

Secure entry runs in a separately identified, sealed native helper app. It completes AppKit launch before displaying the secure field. The helper accepts only its fixed private protocol beneath the exact live credential, control, and outer GUI ancestors; launching the helper normally or the protocol on the outer GUI fails closed. Existing preview Keychain entries and ACLs remain untouched.

The shared Agent Skill description now fits the standard 1,024-character limit (869 after YAML folding, retaining the required Beeper CLI/Desktop distinction); its detailed body is unchanged. Browserbase/Stagehand research proposes future onboarding and authoring improvements, without adding a runtime dependency.

Validation:

  • Current head: 1ae3ce200c8cfaaac664a460dfc024eb3201f62a, integrated with main af759ce and LinkedIn 1.36.3. Independent impact and diff reviews cover the helper identity, custody, strict bundle layout, nested signing order, entitlements, and verification boundaries.
  • In the complete package/install/native/archive sequence on 2c7c59d, the real packaged secure-entry Cancel button was clicked through native accessibility, followed by normal app close. Durable CANCELLED, zero items/grants, terminated helper processes, and removed control custody all passed. No secret was entered or read. The receipt binds both executable hashes and the runtime inventory.
  • All five packaged entry rejection cases passed. Focused JavaScript coverage passed 26 distinct tests; distribution coverage passed 14 tests with 877 assertions; Rust coverage passed 11 tests with one explicitly ignored, unchanged disposable Keychain test. Desktop typechecking passed.
  • Twelve Direct scenarios and five inert marketing frames passed on the unchanged UI/assets. Two final clean build/pack pairs produce identical 574-file archives: 11,692,794 compressed and 22,649,672 payload bytes. The final focused release checks passed 63 tests / 7,185 assertions. Four current-source homepage views passed at desktop/mobile widths in light/dark mode, with keyboard, layout, exact asset and joined-cleanup checks; all nine current UI/site captures were visually reviewed. The preceding provider join passed 272 tests / 10,217 assertions, including eight production-script execution cases. CI on the preceding head exposed a real cancellation-order race and a missing skill discovery phrase. Both are repaired and independently reviewed; the skill checks pass, and a deterministic cancellation regression is added without changing existing lifecycle assertions or deadlines. Full helper and seven-file provider checks await resolution of a terminal-wrapper approval rejection. Fresh CI run 34702093792 passed all ten jobs; CodeQL 34702091959 passed all three languages. Strict read-only admission bound all nine source-job checkout logs to current merge 4116826 and tree b6e11acb against base af759ce. The deterministic regression and both original helper lifecycle cases executed and passed in Linux CI. Final local/native qualification remains pending; source admission does not replace it. The preceding immutable canonical 0.18.2 release is published.

The owner confirmed active Apple Developer Program membership. Signed desktop publication awaits the Developer ID and notarization credentials in the protected environment. Live 1Password qualification is not claimed. Browser form filling and passkey automation are not implemented. Local app policy does not sandbox arbitrary code running as the same OS user.

@vercel

vercel Bot commented Sep 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
ghostget Ready Ready Preview Sep 12, 2026 6:38pm UTC

Request Review

@0thernet 0thernet changed the title Add a private local vault, optional 1Password grants, and macOS distribution Add local vault, agent setup, simplified control panel, and macOS distribution Sep 11, 2026
Comment thread src/control/discovery-process.test.ts Fixed
Comment thread src/control/discovery-process.test.ts Fixed
…p-distribution-vault

# Conflicts:
#	CHANGELOG.md
#	README.md
#	desktop/src-tauri/Cargo.lock
#	desktop/src-tauri/Cargo.toml
#	desktop/src-tauri/tauri.conf.json
#	dist/apple-photos-client.js
#	dist/beeper-client.js
#	dist/index-9w3ahr8w.js
#	dist/index-cnbz0gws.js
#	dist/index-hfbygww8.js
#	docs/control-panel.md
#	docs/publishing.md
#	package.json
#	scripts/npm-release-workflow.test.ts
#	scripts/package-budget.ts
#	skills/ghostget/references/control-panel.md
#	skills/ghostget/references/install.md
#	src/beeper-client-types.ts
#	src/media/manifest.test.ts
#	src/version.ts
#	website/build.ts
#	website/public/control/accounts.html
#	website/public/control/activity.html
#	website/public/control/approvals.html
#	website/public/control/capabilities.html
#	website/source/styles.css
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants