Skip to content

docs: session sharing — SECURITY.md, BETA.md, checklist (G1f) - #105

Merged
frahlg merged 1 commit into
mainfrom
105-g1f-docs
Aug 30, 2026
Merged

docs: session sharing — SECURITY.md, BETA.md, checklist (G1f)#105
frahlg merged 1 commit into
mainfrom
105-g1f-docs

Conversation

@frahlg

@frahlg frahlg commented Aug 30, 2026

Copy link
Copy Markdown
Member

The docs slice of guest sharing, with the slice table's acceptance rule as law: claims match spec §5 exactly — no softer, no harder. Part of #55.

  • SECURITY.md: a Session sharing section — the grant model (owner-signed, guest-key-bound, expiring, agent-enforced on every attach), what ro really is (pane mirror, no tmux client, input dropped agent-side; exfiltration bound = screen content), what rw really is (arbitrary code execution as the agent's user, said as loudly as §5 says it, no pretend sandboxing), v1 revocation semantics (agent-local; offline machine = the revoke waits, 24 h cap as backstop; doctor's clock-skew warning cross-referenced), the relay's view (nothing new), non-transferability. Cross-references the spec doc.
  • BETA.md: sharing enters "What works today" (CLI mints, web/CLI joins, ro default / rw by heavy consent, 24 h cap) and "Known gaps" gets the v2 items (follow-active mirroring, revocation reach while offline, phone minting).
  • README: one feature line in the existing voice ("Shareable, for a while.").
  • docs/beta-checklist.md: step 6 — mint, join via link, watch it expire — with what to note down.
  • mir join now prints the attach hint ("open it: mir attach <name> (or the web app)") — true since G1c/G1d landed; G1d had to hold it back.

Docs + that one copy line only; no behavior changes. go test ./... cli green, gofmt -l empty, web 167/167 (no doc-pinning test touched — README's Install section untouched).

🤖 Generated with Claude Code

https://claude.ai/code/session_01KeiotDVE94wEzvc7wcvm1y

SECURITY.md gains a Session sharing section whose claims match the G1
spec's threat analysis exactly — read-only is a pane mirror bounded by
screen content, read-write is arbitrary code execution as the agent
user with consent-side mitigations only, revocation is agent-local
with the 24 h cap as backstop, the relay learns nothing new, grants
are guest-bound and non-transferable. BETA.md moves sharing into
"what works" and lists the v2 gaps (follow-active mirroring, offline
revocation reach, phone minting). README gets the one-line hook, the
beta checklist a share step, and `mir join` now prints the attach
hint G1d had to hold back.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeiotDVE94wEzvc7wcvm1y
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-30T11:52:02.090881Z fd4b9ff PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fd4b9ff62c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread go/internal/cli/share.go
return err
}
fmt.Fprintf(a.out, "✓ joined %q as a guest — %s access until %s\n", info.Name, modeWord(sg.Mode), time.Unix(sg.NA, 0).Format("15:04"))
fmt.Fprintf(a.out, " open it: %s attach %s (or the web app)\n", a.binary, info.Name)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Shell-quote the invited machine name

When an inviter supplies a valid machine name containing shell syntax, such as box; evil-command, this copyable instruction executes that syntax on the guest's machine because info.Name is emitted verbatim. agent.ValidMachineName permits spaces and other non-control characters, including shell metacharacters, so quote the name safely for the target shell or print a non-name identifier instead.

Useful? React with 👍 / 👎.

Comment thread go/internal/cli/share.go
return err
}
fmt.Fprintf(a.out, "✓ joined %q as a guest — %s access until %s\n", info.Name, modeWord(sg.Mode), time.Unix(sg.NA, 0).Format("15:04"))
fmt.Fprintf(a.out, " open it: %s attach %s (or the web app)\n", a.binary, info.Name)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the unusable web-app follow-up

After a guest claims the one-time invite with mir join, the machine and grant are saved only under the CLI's --dir; the browser's guest store is populated only when the browser itself claims the invite. Consequently, selecting the web app after this message will not show or authorize the share, and the already-consumed invite cannot be claimed there again. Remove this parenthetical or tell users to open the original invite in the web app instead of using mir join.

Useful? React with 👍 / 👎.

Comment thread SECURITY.md
Comment on lines +257 to +259
**The relay learns nothing new:** one opaque pair room and ordinary attach
metadata for the machine — identical to today's traffic. Suppressing traffic
denies service (already true); it never grants access.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Disclose the guest identity visible to the relay

During a guest attach, relayLocator.Dial sends the guest's unencrypted BindingJSON through SignalMsg.Binding; that record contains the stable guest wallet, device ID, and X25519 key. Although the relay does not currently interpret it, it can parse the record and correlate the guest with the owner's shared machine, so this is new observable metadata rather than traffic identical to an owner attach. Document that exposure or encrypt the binding before claiming the relay learns nothing new.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved: Cursor Bugbot completed successfully with no findings that need human review. No reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@frahlg
frahlg merged commit e535358 into main Aug 30, 2026
5 checks passed
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.

1 participant