Outsider Stage 0.5
Replay and verify a real, sealed Outsider Stage 0.5 intervention chain.
Translation pending
专为自主智能体打造的物理隔离审批锁。一次一密非对称加密,内存瞬时拆封注入。
Translation pending
SecurityKotlin · GoGitHub @cyancityOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Secrets management for AI agents: approve API keys and credentials on your phone with biometrics, delivered end-to-end encrypted into the target process. Plaintext never enters the chat, logs, or relay.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Secrets management for AI agents, approved on your phone.
When an agent needs an API key or credential, the plaintext never enters the conversation.
One fingerprint on a separate device, and the value arrives sealed to that one process.
Every agent eventually reaches for a secret: an API key, an SSH private key, a credential you'd rather not hand over.Read the full README ↗Every agent eventually reaches for a secret: an API key, an SSH private key, a credential you'd rather not hand over.
The fast move is pasting it into ChatGPT or Claude. Fast, and now the plaintext lives in the model context, the transcript, and whatever logs sit downstream. The careful move is opening a password manager, copying, pasting, then double-checking the field. Nine times out of ten the chat wins, because lazy is real.
easy-unlocker makes the safe path lazier than the paste:
easyGet env OPENAI_API_KEY --exec 'python run.py' --for "calling the openai api"
# → phone pops: who (user@laptop) · what (OPENAI_API_KEY) · why
# → fingerprint → the value lands in the python process env, never on disk
Each easyGet run mints a one-time keypair. The public key rides the request to your phone, the phone seals the value with it, and only the private key held by that one command can open it. The relay in between sees ciphertext and nothing else. And because the approval lives on a second device, not in a window on the machine that asked, it still works when the agent runs on a server or a CI runner with no screen at all.
sequenceDiagram
participant C as easyGet (CLI)
participant B as Broker (relay)
participant P as Phone (approver)
C->>B: ① request + one-time public key
B->>P: ② push / poll
P->>P: fingerprint, seal value with that key
P->>B: ③ sealed value
B->>C: ④ sealed value
Note over B: sees ciphertext only
Note over C: only ①'s private key opens ④
Not a password manager and not a Bitwarden or 1Password replacement, no browser autofill, no subscription to buy. The vault lives on your phone and holds only the few secrets you're willing to hand to an agent.
Four pieces:
| Component | What it does |
|---|---|
Phone app (android/ ios/) | Stores items, approves with biometrics or password, signs SSH login certs on-device |
easyGet CLI (cli/) | The entry point agents call: sends requests, receives sealed values, writes files or injects into processes |
Broker (broker/ worker/) | Pairing, per-vault routing, ciphertext relay. You run one yourself: a Cloudflare Worker by default (one wrangler deploy), or the Go binary on a VPS |
Desktop app (desktop/, optional) | A second approver on Windows or macOS: approve requests, browse and copy items from a synced vault, manage devices |
1. Install easyGet (prebuilt for macOS / Linux / Windows):
os=$(uname -s | tr 'A-Z' 'a-z'); arch=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')
curl -L -o /tmp/easyGet "https://github.com/cyancity/easy-unlocker/releases/latest/download/easyGet-${os}-${arch}"
install -m 755 /tmp/easyGet ~/.local/bin/easyGet
On Windows, run scripts/install.ps1 from a clone (it downloads easyGet-windows-amd64.exe, adds it to your user PATH, and can pair in the same step with -Broker <url> -Code <code>), or grab the exe from Releases.
2. Install the app: on Android, install easy-unlocker-debug.apk from Releases. On iOS, the source is in ios/; open it in Xcode and install with your own signing. Then create a vault (the recovery code lands in a file on the device) and point Settings at a broker.
3. Pair: in the app, Settings → Devices → generate a pairing code (8 characters, valid 10 minutes), then on the computer:
easyGet pair --broker https://broker.example.com --code <8-char code>
easyGet ping # reachable, and it tells you if a newer release exists
Tip: if pushes don't reach your Android device, check notification permission, battery policy (set to "unrestricted"), and auto-start. Many Android ROMs restrict background work by default.
Using it comes down to a few requests:
# most common: the value goes into a child process env, nothing touches disk
easyGet env OPENAI_API_KEY --exec 'python run.py' --for "calling the openai api"
# want a file? say so (mode 0600)
easyGet env OCI_KEY --write-to ~/.oci/key.pem --for "oci cli reads key_file"
# don't know the item names? print the names this machine has cached (no network, no prompt)
easyGet list
easyGet list --refresh # ask the phone for the current list: one approval
# SSH login: the phone signs a cert valid for minutes, the CA key never leaves it
easyGet ssh my-ssh-ca --for "log into the server for diagnostics"
Works with anything that can exec a shell command: Claude Code, Codex, Cursor, Windsurf, a CI job.
You're an agent / coding assistant? Install, pairing, how to pick between the request modes, and what not to do: it's all in docs/AGENTS-SETUP.md. Follow it, and never ask a human to paste you a secret. Optional: drop
skills/easy-unlocker/into your skills directory.
The desktop app is not in Releases yet; build it from source with Go:
cd desktop
go build -tags production -ldflags "-H windowsgui" -o easy-unlocker.exe . # Windows
go build -tags production -o easy-unlocker . # macOS
To pair it, enter your broker URL, click 生成配对二维码 (generate pairing QR) and scan it from the Android app's device page with 扫码配对桌面 (scan to pair desktop), or type an approver pairing code generated on the phone. The desktop UI is in Chinese for now. The phone uploads the vault as ciphertext; the desktop downloads it and unlocks it locally with your vault password or recovery code. Pairing also writes the token into the easyGet config, so the CLI on that machine works right away.
On Windows the app stays in the system tray. When a request arrives it shows a notification and brings its window to the front; once nothing is pending, it goes back to the tray.
easyGet list lets the agent check names before asking, instead of guessing and buzzing your phone.easyGet checks versions itself and nudges you when a newer release exists.| Side | State |
|---|---|
| Android | Feature complete, in daily use on real devices |
| iOS | Roughly at parity with Android and tested on a real phone; missing .eu1 import, APNs push, approver pairing codes, QR pairing and vault upload |
| Desktop | Windows build tested end to end (tray, notification, approve); macOS is untested and has no tray icon; can't sign SSH certs; not in Releases yet |
| easyGet | Released for macOS, Linux, Windows |
| Broker | Two equivalent implementations (Go and Cloudflare Worker), both live |
| Landing page | Lives in its own repository (site/ was split out) |
You don't have to trust the broker. It sees metadata (item names, purpose, device names); values and CA keys travel end-to-end encrypted and it can't open them. A synced vault is stored as an opaque blob, and the recovery code and unlock password never leave your devices. Full threat model in SECURITY.md; field-level protocol spec in docs/PROTOCOL.md.
| Doc | Contents |
|---|---|
| docs/AGENTS-SETUP.md | Install/build/release runbook for coding assistants |
| docs/PROTOCOL.md | HTTP protocol + sealed payload format + tenant model |
| SECURITY.md | Vulnerability reporting + threat model |
| docs/PARITY.md | Android/iOS/Desktop/Broker/CLI feature tree |
| docs/DEPLOY.md | Self-host the broker |
| Directory | License |
|---|---|
cli/ android/ ios/ desktop/ internal/ docs/ etc. | Apache-2.0 |
broker/ worker/ | AGPL-3.0: self-host freely; offer it as a hosted service and your changes must be open-sourced |