Skip to content

Overhaul README for clarity, accuracy, and install path#16

Open
mattstein111 wants to merge 1 commit into
mainfrom
readme-improvements
Open

Overhaul README for clarity, accuracy, and install path#16
mattstein111 wants to merge 1 commit into
mainfrom
readme-improvements

Conversation

@mattstein111
Copy link
Copy Markdown
Owner

Summary

Full README overhaul applying feedback from an independent review. The goal is to make the marketplace install flow the front door, cover prerequisites explicitly, and fix accuracy gaps between what the README claimed and what the code does.

Structural changes

  • Lead with claude plugin install sms@mattstein111/claude-code-sms — the git-clone flow is now a collapsed "from source" block. This was the single biggest friction point for new users.
  • New Prerequisites section (Bun, provider/DID, tunnel, systemd/launchd, Claude Code) so readers can tell in 30 seconds whether they can run this.
  • New "What it looks like" section near the top, showing a real <channel> tag Claude receives and the actual permission-relay SMS text.
  • Bold default-deny callout up top — security-minded readers no longer have to scroll to the gate table to learn unknown numbers are dropped.
  • /sms:configure is now the primary Quick Start path; the manual .env/access.json walkthrough moved into <details>.
  • New Troubleshooting section covering listener down, 401 from provider, silent drop on allowlist, MCP startup crash, and permission relay not firing.
  • Multi-session / DID subscription detail collapsed into <details> so the main flow reads cleanly.
  • Concrete Cloudflare Tunnel one-liner and a security note that tokens in URL query strings can leak via provider logs.

Accuracy fixes (things the old README got wrong)

  • download_attachment requires a chat_id parameter — previously undocumented. Access scoping would bite any user who tried to call it.
  • fetch_messages response shape documented, including the 200-item cap.
  • dmPolicy: "disabled" value is now documented alongside "allowlist".
  • Permission replies accept y/yes/n/no, case-insensitive, with whitespace tolerance (regex is /^\s*(y|yes|n|no)\s+([a-km-z0-9]{5})\s*$/i).
  • All ten listener security layers mentioned in one sentence; the high-level diagram only shows five.
  • SMS_PROVIDER=twilio example swapped for SMS_PROVIDER=other since voip.ms is the only tested path.
  • Wildcard matching clarified as prefix-based rather than area-code-specific.
  • Dedicated providers' untested status called out at the top of their table, not buried in Known Limitations.
  • Fixed stale "launched March 2026" reference.
  • License section rewritten. The old text ("Private. Not yet licensed for distribution.") contradicted a public repo that invites install via claude plugin install. New text says personal project, offered as-is, open an issue if you need a formal license. If you want a proper OSI license (MIT is typical for this kind of plugin), happy to follow up with a LICENSE file.
  • Contributing-a-provider links to providers/twilio.ts (dedicated) and providers/other.ts (generic) as reference implementations.
  • Fixed launchd plist filename (com.claude.sms-listener.plist).

Nits

  • Clarified "owner's own phone" in the opening line.
  • Added a 0.2.3-beta status badge.
  • Called out chmod 600/700 enforcement rationale.

Test plan

  • Read the rendered README on the branch and confirm the flow matches your mental model
  • Decide whether to adopt a proper OSI license (MIT?) and add a LICENSE file in a follow-up
  • Optional: have someone unfamiliar with the project attempt setup from the new Quick Start

🤖 Generated with Claude Code

Lead with the plugin marketplace install (`claude plugin install
sms@mattstein111/claude-code-sms`) and push the git-clone flow into a
collapsed "from source" block — the marketplace is the path almost every
user will take, and burying it behind a clone step was the biggest
friction point for new users.

Structural changes:
- Add explicit Prerequisites section (Bun, provider/DID, tunnel,
  systemd/launchd, Claude Code) so readers can calibrate fit in 30s
- Add "What it looks like" near the top with a real `<channel>` tag and
  the actual permission-relay SMS text — readers now see the UX before
  the architecture
- Bold the default-deny policy up top; a security-minded reader no
  longer has to scroll to the gate table to learn unknown numbers are
  dropped
- Make `/sms:configure` the primary configuration path; move the manual
  .env/access.json walkthrough into a <details> block
- Add Troubleshooting section covering the common failure modes
  (listener down, 401 from provider, silent drop on allowlist, MCP
  startup crash, permission relay not firing)
- Collapse multi-session + DID subscription detail into <details> so the
  main flow reads cleanly
- Add a concrete Cloudflare Tunnel command and a security note that
  tokens in URL query strings can leak via provider logs

Accuracy fixes:
- Document `download_attachment`'s required `chat_id` parameter (access
  scoping) — previously omitted
- Document `fetch_messages` response shape and 200-item cap
- Document `dmPolicy: "disabled"` alongside `"allowlist"`
- Note that permission replies accept `y`/`yes`/`n`/`no`,
  case-insensitive, with whitespace tolerance
- Mention all ten listener security layers in one sentence, not the
  five from the high-level diagram
- Swap `SMS_PROVIDER=twilio` example for `SMS_PROVIDER=other` since
  voip.ms is the only tested path
- Clarify wildcard matching is prefix-based, not area-code-specific
- Call out that dedicated providers are not live-tested at the top of
  their table, not just in Known Limitations
- Fix stale "launched March 2026" reference
- Replace contradictory license text (was "private, not licensed for
  distribution" on a public repo with install invites)
- Link contributing-a-provider section to real reference files
  (providers/twilio.ts, providers/other.ts)
- Fix launchd plist filename (com.claude.sms-listener.plist)

Nits: clarify "their own phone" in opening, add 0.2.3-beta status
badge, note chmod 600/700 enforcement rationale.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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