Skip to content

CLI: omnigraph studio launcher and graph owner discovery #980

Closed as not planned

Description

@ragnorc

Disposition — 2026-10-20

Closed as not planned: the proposed second serving model is discontinued.
This includes in-process standalone graph hosting, generated local credentials,
graph-owner discovery, attach/reuse, and the later proposal for Studio to start
and own a serve --reuse process. This disposition supersedes those proposals
in the issue body and discussion.

OmniGraph retains the ordinary cluster-backed server on localhost and remote
hosts. Studio may connect to that existing HTTP server. Independent client
integration remains in draft #1017; it does not revive local hosting or an owner
registry. Implementation PRs #1075, #1077 and #1083 are closed without merging.

Historical proposal

Problem

There is no way to open a graph in Studio, OmniGraph's desktop client, from the CLI. A local graph also has no owning process for later CLI commands to attach to.

Proposal

omnigraph studio

  • Resolve the target the way other commands do (--store, --cluster --graph, --server --graph, profile).
  • For a local target, serve it in process on loopback. Bind 127.0.0.1:0; refuse any other Host, refuse a mismatched Origin, send no CORS headers.
  • For a server target, pass the server through.
  • Mint a per-launch token for operator.actor, and open Studio with a single-use code: omnigraph-studio://connect?code=…. Studio already registers the omnigraph-studio scheme and handles graph, node and query links; connect is the missing route. Studio redeems the code once at the loopback server for its token.
  • Never put a token in argv. Print the URL; --no-open --json for SSH and agents.
  • Include the launching binary's path and HTTP contract in the handoff, so Studio can give agent sessions on that graph the same CLI.

Owner discovery

  • A file under $OMNIGRAPH_HOME names the process, port and session that own a graph root.
  • A second omnigraph studio attaches instead of opening a second writer, and CLI commands against that root can route through it.
  • Discovery only: publication safety stays with the manifest version CAS. A process-local lock is not distributed fencing.

Writer-safety rules for local sessions:

  • default to read-only;
  • never take cluster admission from Studio;
  • refuse writes without an actor;
  • never replay a write whose outcome is unknown.

Depends on a supported local-embedding constructor in omnigraph-server instead of the test-shaped helpers. Read-only mode must refuse mutating routes at the router.

Activity

  1. ragnorc commented on Oct 16, 2026

    @ragnorc
    ContributorAuthor

    Design is in RFC draft #1017. It departs from this issue in four places:

    • The single-use connect code is gone. A session record in a per-user
      directory (0600) carries the session's URL and token instead; Jupyter
      shipped a single-use token in argv and removed it for the same reason.
    • omnigraph studio is a thin launcher, as codex app is: it opens
      omnigraph-studio://open?target=NAME and exits, and Studio owns its
      sessions through omnigraph serve --reuse.
    • Owner discovery is the session record plus a liveness lock; CLI commands do
      not route through it automatically (RFC 0009 rejects that funnel).
      --session routes a write explicitly.
    • Server targets are not passed through with a borrowed credential: static
      tokens come from omnigraph credential, and OAuth for managed clusters is
      split out (Appendix A4).

    Wider changes found along the way are in the RFC's Appendix A: #1018
    (cross-process writer safety), #1019 (what a credential allows), #1020
    (WWW-Authenticate on every 401), #1021 (retire the test-shaped AppState
    constructors), and the defects #1022, #1023 and #1024.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature proposalneeds-triageAwaiting maintainer triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions