Skip to content

docs: Miranda is the reach layer — positioning and the moat, stated with evidence - #108

Merged
frahlg merged 1 commit into
mainfrom
106-positioning
Aug 30, 2026
Merged

docs: Miranda is the reach layer — positioning and the moat, stated with evidence#108
frahlg merged 1 commit into
mainfrom
106-positioning

Conversation

@frahlg

@frahlg frahlg commented Aug 30, 2026

Copy link
Copy Markdown
Member

Why

herdr (~33k stars) is an agent-aware tmux replacement: a server that owns terminals and knows which are AI agents. It owns the sentence "keep your coding agents alive," and its remote story stops at SSH into your own box. Miranda's CLI tagline — "terminal continuity for long-running development and AI sessions" — sat on that same sentence and named the wrong layer.

The line

A multiplexer keeps the session alive on the machine. Miranda gets you to that machine — from whatever device is in your hand, with a passkey. No VPN, no copied SSH key, no open inbound port, no account.

The old non-goal is now the strongest sentence: we do not build a multiplexer; we make yours reachable. Engine-agnostic reach is a feature, not a gap. tmux is the engine today; carrying others is named as direction (#107) and never as a shipped claim. "Leave your desk. Keep your terminal." stays as the promise.

The moat, with evidence

The README block states five claims and links where a reader checks each one:

  1. passkey-derived identity, no account — go/internal/identity/owner.go, B1 spec;
  2. a relay that cannot read and persists only owner-signed revocations — go/internal/signal/server.go, SECURITY.md;
  3. direct by default, measured — the current netsim/results/results.md numbers (12 ms LAN host pair, 17 ms open agent, ~1.0 s TURN, resume 2.35 s direct / 2.77 s over TURN), rerunnable with make netsim;
  4. signed, guest-key-bound, expiring shares, read-only enforced at the agent — SECURITY.md, G1 design;
  5. the honesty posture — reproducible builds, cosign, published threat model and audit scope.

Changed

  • README.md — hero, the "P2P tmux" section now also answers "how is this different from a multiplexer?", the moat block replaces "Why it feels simpler", and "does not do" leads with the multiplexer non-goal. The ## Install section is untouched.
  • docs/product.md — title, one sentence, the niche, scope discipline, non-goals. Structure and the north-star metric ("successful continuation") kept.
  • BETA.md — opening paragraph; its lab numbers were stale against netsim/results/results.md and now match it. No gap weakened.
  • go/internal/cli/cli.goguide() tagline: mir — tmux keeps your session alive; mir gets you to it from any device. No test pinned the old wording.
  • docs/naming.md, web/manifest.json — stale "terminal continuity" phrasing.

Prose plus one CLI line. No behaviour changes. go test ./... and npm test (167 tests) pass; gofmt -l . is empty.

Closes #106

🤖 Generated with Claude Code

https://claude.ai/code/session_01KeiotDVE94wEzvc7wcvm1y


Note

Low Risk
Documentation and CLI help text only; no changes to authentication, networking, or session handling.

Overview
Reframes product messaging from “terminal continuity” to the reach layer: multiplexers keep sessions alive on the machine; Miranda gets you to that machine with a passkey. Docs now draw a clear line vs tmux/herdr, name engine-agnostic reach as direction (#107) without claiming it ships, and treat “we don’t build a multiplexer” as core positioning rather than a footnote.

README rewrites the hero, expands “P2P tmux?” into a multiplexer comparison (table + herdr link), replaces “Why it feels simpler” with Five claims you can check (passkey identity, blind relay, measured NAT/netsim, sharing, honesty posture) each linked to code/specs, and leads non-goals with the multiplexer stance.

docs/product.md, BETA.md, docs/naming.md, and web/manifest.json align on the same thesis; BETA.md lab attach/resume numbers are updated to match netsim/results/results.md.

mir’s guide() welcome and tagline strings echo the new split: tmux keeps your session alive; mir gets you to it from any device. No runtime or crypto behavior changes.

Reviewed by Cursor Bugbot for commit b720e89. Bugbot is set up for automated code reviews on this repo. Configure here.

…ith evidence

herdr owns "keep your coding agents alive" on the machine. Miranda's old
tagline — "terminal continuity for long-running development and AI sessions" —
sat on the same sentence and named the wrong layer.

The line is now reach: a multiplexer keeps the session alive on the machine,
Miranda gets you to that machine, from whatever device is in your hand, with a
passkey. The old non-goal becomes the position — we do not build a multiplexer,
we make yours reachable — so engine-agnostic reach reads as a feature, with the
herdr seam named as direction (#107), never as a shipped claim.

The README moat block states five claims and links where each is checked:
passkey-derived identity with no account, a relay that cannot read and persists
only owner-signed revocations, direct-by-default with the current netsim
numbers, signed and expiring shares enforced at the agent, and the published
gaps. BETA.md's lab numbers were also stale against netsim/results/results.md
and now match it.

Prose and one CLI line only; no behaviour changes.

Closes #106

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-30T13:29:36.450317Z b720e89 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: b720e89b01

ℹ️ 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 README.md
Comment on lines +82 to +85
- **Your passkey is the identity, and there is no account.** No signup, no
password, no user record. The owner identity is derived from the passkey PRF
output, so the browser re-derives it for each session and stores no private
key; the relay and every machine you pair hold public IDs only. Pair once,

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 Scope the passkey identity claim to browser clients

For users following the documented native mir pair/mir attach flow, this claim is false: client.LoadOrCreateIdentity generates a random 32-byte root and SaveIdentity stores it in the OS keychain, without any passkey ceremony. The previous wording correctly limited WebAuthn PRF derivation to browser identity; please retain that qualification so CLI users are not given incorrect identity and recovery expectations.

Useful? React with 👍 / 👎.

Comment thread README.md
Comment on lines +91 to +93
`machine_id`, and routing metadata. Discovery records are owner-encrypted blobs
it never opens, held only while your agent is online — a restart loses every
one. The single thing it persists is an owner-signed revocation.

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 Qualify revocation persistence as configuration-dependent

When a self-hoster starts the relay with the command shown later in this README, no --revocations-file is supplied, and mir-signal explicitly reports that revocations are memory-only; a restart therefore loses the tombstones as well as the registry. This categorical durability claim can cause operators to assume revoked machines remain revoked across restarts, so state that revocations are persisted only when durable storage is configured or update the self-hosting command accordingly.

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, so this documentation and CLI-copy change meets the approval criteria. No reviewers assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@frahlg
frahlg merged commit e520f67 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.

Positioning: take the reach-layer niche, make the moat visible

1 participant