iOS SDK · shake to report

Your users are already telling you what's broken.

They're shaking their phones. RageShake catches the shake, grabs a screenshot, and turns the frustration into a filed Linear issue — device metadata attached — before they rage-quit.

1 line
to install
< 1s
shake to issue
0 deps
no SDK bloat

Quickstart

Live in three steps.

No native shake plumbing, no feedback UI to design. Add the package, drop in your ingest key, and reports start flowing to Linear.

01Add the package

Add RageShake to your app with Swift Package Manager. iOS 15+, zero third-party dependencies.

Package.swiftswift
.package(  url: "https://github.com/rageshake/rageshake-ios",  from: "1.0.0")
02Configure once

One call at launch with your ingest key. RageShake handles shake detection, the screenshot, and the feedback sheet.

MyApp.swiftswift
import RageShake @mainstruct MyApp: App {  init() {    RageShake.configure(      apiKey: "rs_ing_9f2c…"    )  }}
03Issues appear in Linear

Point the project at your Linear team. Every shake becomes a filed issue — message, screenshot, and device metadata attached.

delivery.logevent
// a user just shook their phonereport rp_a1b2  linear  status: delivered  issue: RAG-42  screenshot: attached // triage it like any other issue

Destinations

Route reports where your team already works.

Each project fans a report out to its enabled destinations on ingest, with retries on failure. Webhook payloads are HMAC-SHA256 signed so you can trust what you receive.

Linear

Live
Creates an issue on your team with the message as the title, device metadata in the body, and the screenshot attached.

Webhooks

Live · HMAC-signed
POST the full report as JSON to any URL. Verify the X-Rageshake-Signature header and pipe it anywhere.

Slack & GitHub destinations — coming soon.

webhook payloadjson
{  "message": "Pay button does nothing",  "screenshot_url": "https://blob.rageshake.dev/…",  "metadata": {    "device": "iPhone 15",    "os": "iOS 18.2",    "app_version": "3.4.1",    "locale": "en_US"  },  "received_at": 1753}

Developer surface

Everything the SDK does, you can script.

Projects, keys, destinations, and reports are all first-class REST resources — with an OpenAPI spec, a Go CLI, and a hosted MCP server so your agents can wire themselves up.

REST API

v1 · AIP

Resource-oriented endpoints following Google AIP conventions.

POST/v1/reports
GET/v1/projects/{id}
POST/v1/…/destinations
DELETE/v1/…/keys/{id}

Go CLI

cobra

Full CRUD from your terminal. Table, JSON, or CSV output.

terminalshell
$ rageshake reports list \    --project rageshake-ios \    --format=json $ rageshake destinations test rag_42

MCP server

for agents

A hosted, streamable endpoint. One call takes an agent from nothing to a working project.

mcp toolstools
bootstrap_project // project + key + destconfigure_destinationtest_destinationlist_reports