blinksh / blinksh/blink

Use case for x-callback-url replacement: programmatically generated blinkshell:// links that open a specific remote session

Open
#2,290 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.