Skip to content

Repository files navigation

OpenSession — Preserve. Share. Build. Together.

OpenSession

A visualizer and social layer for Open Session License artifacts — the append-only llm-turn-history.jsonl session logs that open-session repos ship alongside their code.

Every project built in collaboration with an LLM under the Open Session License carries a complete, verbatim, append-only history of the human and machine turns that produced it. OpenSession makes those histories legible, social, and comparable:

What it does

  • Realtime session feed. Watch a live-updating feed of changes to llm-turn-history.jsonl files across the GitHub repos you've starred. See how projects are actually being built — turn by turn, human and model — as it happens.
  • Session visualization. Render open-session-jsonl archives as readable, replayable conversations: speakers, timestamps, tool-activity summaries, identity attestations, and the (ts, id) merge order recovered across parallel branches.
  • Discussion threads. Every session (and every turn) can anchor a chat thread where users discuss what happened, make suggestions, and critique prompting or model behavior.
  • Cross-model evals. Run the same session prompts through different models and compare — the license's "epistemic self-defense" goal made concrete. See evals attached to sessions in the feed.
  • Linked identity: GitHub ⇄ X. Users connect their GitHub account and link their X (Twitter) identity. Once linked:
    • GitHub contributions are shown as the X users who made them.
    • Any user can DM any other linked user on X — powered by xChatHub (an in-page Chrome extension that drives X's own DM client, including E2E-encrypted XChat threads).

Components

Piece Role
OPEN-SESSION-LICENSE.md The license and the open-session-jsonl wire format this app visualizes (pulled from InfiniteMirror)
xChatHub/ X DM layer — keyboard-first DM client + WebMCP tools + localhost MCP bridge; the transport for user-to-user messaging
llm-turn-history.jsonl This repo's own session history — OpenSession is itself built under the Open Session License

Development

The web app lives in app/ — Vite + React + TypeScript (views are kept presentational so they can be reused in a future React Native mobile app):

git clone --recurse-submodules https://github.com/oceanseth/OpenSession
cd OpenSession/app
npm install
npm run dev    # local dev server
npm test       # vitest (open-session-jsonl parser tests)
npm run build  # production build → dist/

main is tested locally only. Pushing to the production branch deploys to https://opensession.groupnetwork.com via GitHub Actions (.github/workflows/deploy.yml): OIDC-assumed IAM role → build → S3 (opensession.groupnetwork.com) → CloudFront (E1ECGJB4KUGGL5) invalidation. DNS is a Route53 alias on the groupnetwork.com zone.

GitHub OAuth

Sign-in uses a GitHub OAuth App (web flow). The SPA redirects to GitHub, and the opensession-auth Lambda (behind API Gateway r1q8b3li40, endpoint https://r1q8b3li40.execute-api.us-east-1.amazonaws.com/token) exchanges the callback code for a token — the client secret never reaches the browser. The client ID is injected at build time via VITE_OAUTH_CLIENT_ID (repo Actions variable OAUTH_CLIENT_ID); when unset, the sign-in button is hidden and the personal-access-token flow still works.

To (re)configure credentials:

# after creating the OAuth App at github.com/settings/applications/new
# (callback URL: https://opensession.groupnetwork.com/)
aws lambda update-function-configuration --function-name opensession-auth --region us-east-1 \
  --environment "Variables={GH_CLIENT_ID=<id>,GH_CLIENT_SECRET=<secret>}"
gh variable set OAUTH_CLIENT_ID -b <id> -R oceanseth/OpenSession

For local dev, the simplest path is the PAT flow (leave VITE_OAUTH_CLIENT_ID unset). Full OAuth locally needs a second OAuth App with callback http://localhost:5173/ — its id goes in app/.env.local, and the Lambda's env must temporarily hold that app's id/secret, since it can only serve one OAuth App at a time.

Registry & follows

Discovery is backed by a hosted registry (server/index.mjs — the opensession-api Lambda on API Gateway r1q8b3li40 under /api, DynamoDB opensession-repos / opensession-follows / opensession-authcache, SQS opensession-verify) so users never probe thousands of starred repos against GitHub themselves:

  • Canonical key is the GitHub numeric repo id. The registry caches which repos implement the Open Session License; checks are server-side (a HEAD on the raw history file) and demand-driven — repos are (re)verified only when users surface them, at most once daily per repo (no global sweeps).
  • POST /api/repos/match — client sends its starred repos ([{id, full_name}]); server returns the known implementers and queues unknown/stale ones for verification.
  • POST /api/repos/submit — follow any repo by owner/name or URL; resolved with the caller's token, verified inline, auto-followed.
  • GET/PUT/DELETE /api/follows… — the user's curated follow list (following is opt-in per repo, not forced for every starred match). Auth is the user's GitHub token, resolved to their GitHub user id server-side (cached ~1h).

The client scans stars in 1,000-repo windows (newest first, "scan more" for deeper history) and live-polls only followed repos for new turns.

Status

The live follow feed, starred-repo discovery via the shared registry, GitHub OAuth sign-in, and the session visualizer are working. Next up: X identity linking via xChatHub attestation, discussion threads, and the evals pipeline.

License

Code is MIT (see LICENSE, forthcoming). Session-transparency conditions per the Open Session License apply: the history file is append-only, propagates to forks, and is never loaded as machine context.

About

An Open Session visualizer on the repos you follow and contribute to.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages