Skip to content

v1.21.0

Choose a tag to compare

@marmutapp marmutapp released this 20 Jul 23:10

Added

  • Browser-chat capture (opt-in MV3 extension). Full-detail capture of
    ChatGPT, Claude.ai, Perplexity, Gemini, and consumer Copilot web sessions
    from Chrome (WSL + Windows) via a native-messaging bridge into the new
    browserchat adapter — prompts, responses, models, and estimated tokens,
    with best-effort redaction and health telemetry (observer browser health).
    Load-unpacked only for now. See docs/browser-extension.md.
  • Session attach: join and drive live sessions from the dashboard.
    Observer-launched claude/codex sessions are daemon-owned PTYs the
    dashboard can now join ("live · joinable" badge → Jump in), while your
    native terminal stays fully interactive. Closed sessions gain one-click
    native Resume (observer claude --resume <id> composed server-side)
    from the session panel. Remote (paired-device) viewing of attach/resume
    terminals stays deny-by-default behind the new [remote].allow_terminal_view
    read opt-in.
  • Resilient default-on attach. Interactive observer claude/observer codex
    launches attach by default when the daemon is reachable
    ([terminal.attach].default_on, Settings-togglable; --no-attach opts out
    per launch). Graceful daemon restarts stamp a durable end_reason
    (migration 072) and the attach client offers prompt-with-timeout
    auto-resume onto the same transcript; every skipped default-attach prints
    an honest one-line reason.
  • Terminal Workspace dock grid. The Terminals page is now a workspace:
    an auto-compacting responsive grid of live terminals — drag tiles by their
    header, resize from edges, add running sessions from the tray, "⊞ Add to
    grid" directly on any floating terminal window, "⬈ Open as window" to
    undock a tile back into a user-resizable, size-persisted floating
    window
    . Layouts persist server-side (node-local workspace_layouts,
    migration 073) and render read-only on paired remote devices. Honest close
    semantics: "Remove from grid" keeps the session running; "Stop & close"
    actually ends the process. [terminal].max_concurrent default raised to 9.
    Existing policy/status/history content lives under a Settings tab.
  • Standing-access hardening toggle. Opt-in
    [remote].revoke_standing_on_takeover: a desktop takeover of a remote
    writer that held control through the standing secret also revokes the
    standing secret itself (identical teardown to the explicit revoke). Default
    stays seamless — takeover revokes only the live lease.

Fixed

  • Daemon-down no longer breaks claude launches. observer init bakes the
    proxy route into claude's own settings.json, which outranks the process
    environment — so a "bare" fallback launch used to route API calls into a
    dead proxy. The launchers now resolve the effective route across every
    settings scope claude honors (managed/CLI/local/project/user, including
    inline-JSON --settings and --continue-from working directories) and
    neutralize observer routes with a one-shot CLI-scope --settings override
    (signal-safe temp file); un-overridable cases (managed scope, your own
    --settings, codex's config-file route) refuse with copy naming the exact
    fix. Third-party gateway routes are always honored, never clobbered.
  • "Stop & close" now actually stops the process. Since detach-replay, a
    websocket close only detached the embedded terminal; every stop control now
    issues the explicit server-side reap.
  • Mobile layout no longer breaks on long project paths. One shared
    tail-preserving truncation primitive (ellipsis at the head, leaf visible,
    full path on hover) across all pages, plus explicit horizontal-scroll
    containment on the Overview table.
  • Terminal runs killed by a daemon shutdown no longer show as running forever
    in the run history; floating-terminal resize no longer minimizes the window
    on release.

Downloads

Pre-built binaries for each supported platform are attached below. Linux variants bundle antigravity-bridge.exe next to the observer binary for WSL2 users of the Antigravity adapter.

Platform Asset
Linux x86_64 observer-v1.21.0-linux-x64.tar.gz
Linux arm64 observer-v1.21.0-linux-arm64.tar.gz
macOS x86_64 (Intel) observer-v1.21.0-darwin-x64.tar.gz
macOS arm64 (Apple Silicon) observer-v1.21.0-darwin-arm64.tar.gz
Windows x86_64 observer-v1.21.0-win32-x64.zip

Verify with sha256sum -c SHA256SUMS (or shasum -a 256 -c SHA256SUMS on macOS) from the directory containing the downloads.

Also available via npm: npm install -g @superbased/observer@1.21.0

Org server (Docker)

The self-hosted org server ships as a Docker image and as per-platform observer-org-v1.21.0-* archives (attached below).

docker pull ghcr.io/marmutapp/observer-org:v1.21.0

The image is keyless-signed with cosign. Verify it:

cosign verify ghcr.io/marmutapp/observer-org:v1.21.0 \
  --certificate-identity-regexp 'https://github.com/marmutapp/superbased-observer-private/.*' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

Supply chain

CycloneDX SBOMs are attached: observer.cdx.json and observer-org.cdx.json.

SLSA Level 3 build provenance for the binaries is attached below as a *.intoto.jsonl attestation. The build runs on the private origin repo, so pass that as the source when verifying an extracted binary with slsa-verifier v2.7.0 or newer (older versions fail with unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1):

slsa-verifier verify-artifact ./observer \
  --provenance-path *.intoto.jsonl \
  --source-uri github.com/marmutapp/superbased-observer-private