Use case for x-callback-url replacement: programmatically generated blinkshell:// links that open a specific remote session
- Dominant language
- Swift
- Stars
- 6.9k
- Forks
- 746
- PR merge metrics
- No merged PRs in 30d
Description
Opening this per @yury's request in #2253 — here's my use case for `x-callback-url` / `blinkshell://run?...`.
## What I do with it
I drive a headless Linux box (`linux`) from my iPhone with Blink. On the Linux side I have a nushell command, `blink-shell run-link`, that turns an arbitrary shell command into a tappable iOS URL:
```
❯ blink-shell run-link "pi 'find my last email to Z, find a time slot for Thursday and Friday this week, and draft an email for me'"
blinkshell://run?key=C6F234&cmd=ssh%20-t%20linux%20%2Fhome%2Fdanrasmuson%2F.local%2Fshare%2Fblink-launchers%2F596420691.launcher.sh#id=596420691
```
Tapping that link on my phone:
1. opens Blink,
2. `ssh -t linux .sh`,
3. the launcher spawns a *new* tab in my terminal multiplexer (herdr, tmux-like) inside a dedicated `ios` workspace, with a unique label so re-tapping never collides,
4. runs the command in that tab,
5. and attaches Blink's tty to it.
So a tap = "open this exact program, in its own session, on my server, on my phone."
## Where the links live
They aren't typed by hand — they're generated by other automations and embedded all over iOS:
- **Reminders / Due app** — a reminder whose body is a `blinkshell://` link, e.g. "review the Q3 doc" → taps straight into `nvim` on that file.
- **GTD project files** — my notes system generates one stable link per active project (`blink-shell run-link $"nvim '($path)'" --id (link-id $path 'gtd')`), so every project has a permanent "open me on my phone" URL.
- **Calendar event descriptions**, notes, Slack messages to myself, home-screen shortcuts.
- **Push notifications** (ntfy) — my agents send me a notification whose tap action is a `blinkshell://` link that drops me into the exact session that needs my input.
The key property is that a link is *just a string*: any script, any agent, any app that can emit text can produce something tappable that lands me in a specific terminal session. No Shortcuts app UI, no per-link manual setup.
## What I need from the replacement
In rough priority order:
1. **URL-addressable sessions.** Something I can generate programmatically as a plain string and paste into a reminder / calendar note / push notification, that opens Blink and runs a command. A single generic `shortcuts://run-shortcut?name=BlinkRun&input=` indirection would be acceptable if the command can be passed as input at tap time — what I can't use is anything that requires me to hand-build one Shortcut per command.
2. **Arbitrary command payload**, URL-encoded, without the quoting mangling the current implementation has (today I work around embedded-quote mangling by stashing the real script on disk and putting only a bareword path on the wire — I'd love to not need that).
3. **Host/profile targeting** — "run this on host `linux`", ideally reusing an existing Blink host config.
4. **Optional: reuse-vs-new tab semantics**, i.e. a flag for "attach to existing session with this id" vs "always spawn fresh."
5. **A callback/no-op mode** would be nice but isn't essential; I never used `x-success`.
Happy to test whatever lands — I have a lot of links in the wild and I'm motivated to migrate. Right now on 18.7 I'm stuck, since there's no non-Shortcuts way to say "open Blink and run *this* command" from a link.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing the existing x-callback-url and blinkshell://run handling in Blink, then test the current behavior on iOS 18.7 with generated, URL-encoded commands. Done means a programmatically generated link can open Blink, target a host or profile, and run an arbitrary command without requiring a separate Shortcut per command.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, shell, swift
- Domain
- mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100