Get started
Up and running with qURL™ in minutes.
- 1
Install the CLI
brew install layervai/tap/qurl qurl --version# Download the latest Linux .deb for your architecture: # https://github.com/layervai/qurl-integrations/releases/latest # Save it as qurl.deb, then run these commands in that folder. sudo dpkg -i ./qurl.deb qurl --version# Download the latest Linux .rpm for your architecture: # https://github.com/layervai/qurl-integrations/releases/latest # Save it as qurl.rpm, then run these commands in that folder. sudo rpm -U ./qurl.rpm qurl --version# Download the archive for your OS and architecture from # https://github.com/layervai/qurl-integrations/releases/latest # darwin | linux | windows × amd64 | arm64 # Extract it and put the qurl binary on your PATH. qurl --version # Local publishing works on Windows, macOS, and Linux.Did a coding agent already install it? On macOS and Linux the agent puts
qurlin~/.local/bin. If your shell saysqurl: command not found, runexport PATH="$HOME/.local/bin:$PATH", and add that line to~/.zshrcor~/.bashrcto keep it. - 2
Publish your app
Replace 3000 with your app's port.
qurl publish http://127.0.0.1:3000Published Target: http://127.0.0.1:3000 Access: private — only you and the people you allow can open it Status: serving CRID: ae4jqpd7eaoslq7jinmjv4yikgzmcxgpjfsuobiniqnko32lpw743ivbeyhaNo account needed. Save the CRID: every later command takes it.
This command publishes a private resource: it opens only for you and the people you allow, and the output says so in its
Access:line. This needsqurl3.4.1 or later (check withqurl --version); an earlier release publishes a public resource unless you add--private. Add--publiconly for something that anyone who has the CRID may open. - 3
Share a link
Replace <CRID>. Send the link it prints to one person.
qurl share <CRID>Send it in a direct message, not a public channel: whoever opens it first uses it. Avoid email and apps that preview links, because a scanner that runs the page could use its one opening. Don’t open it yourself to check it, for the same reason.
Legacy: let people ask for access with a code (
qurl3.4.1 or later). New shares from a coding agent use email invitations instead. Runqurl requests <CRID> --onfor the resource you published, or publish a new one with--allow-requests, send themhttps://qurl.link/<CRID>, and approve each person withqurl approve <CRID> <code>, by the six-digit code that person gave you. Approve a code only when it came from the person you mean to let in, over a channel where you know it is them. The address and the CRID of a private resource are safe to send to anyone.What your recipient sees
- A one-time link (when
qurl shareconfirms one-time use) - They open it in a browser and land on your app, with no install and no LayerV account. It works once and expires on its own. Your app’s own sign-in still applies.
- An email invitation (what a coding agent sends)
- They open the invitation in a browser, see who published the app (marked Not verified), verify their email there, and save a passkey. The email verification code stays in that flow; they never send it to you. Where the page offers Email me an access link, they can use that instead of a passkey.
- Legacy: an access request at
https://qurl.link/<CRID> - Only for resources published with
--allow-requests. They press Request access, type a name, save a passkey, and get a six-digit code to give you. Once you approve that code, they press Open anyway.
- A one-time link (when
- 4
Stop, start, or delete
qurl list # Pause this resource without deleting its CRID: qurl stop <CRID> # Resume it when needed: qurl start <CRID> # Delete it only when you no longer need it: qurl delete <CRID>
- 1
Paste the prompt
Paste this into the agent that built your app.
Read this skill and use qURL to share local apps and files moving forward. https://layerv.ai/skills/qurl/SKILL.md
The agent reads the qURL skill, installs the CLI (on macOS and Linux, into
~/.local/binwith LayerV's install script: no Homebrew and nosudo, even on a Mac that has Homebrew), publishes your app privately, and gives you an address to send. Expect to approve the install andqurl publish. Codex starts with network access off, so save the skill first: see the Codex guide. - 2
Keep the skill installed
Optional. Save the skill once and just say “share this app”.
mkdir -p ~/.claude/skills/qurl && curl -fsSL https://layerv.ai/skills/qurl/SKILL.md -o ~/.claude/skills/qurl/SKILL.mdmkdir -p ~/.agents/skills/qurl && curl -fsSL https://layerv.ai/skills/qurl/SKILL.md -o ~/.agents/skills/qurl/SKILL.mdCursor, Codex, Windsurf, VS Code Copilot, and Gemini CLI read
~/.agents/skills. - 3
Send the address
Choose who can open the app. Give the agent email addresses for named recipients.
The agent checks private policy support, then sends invitation emails only to the people you name. If the deployment can't support that, the app stays private. Ask for a one-time link when that meets your needs.
One-time link? Send it in a direct message, not a public channel: whoever opens it first uses it. Avoid email and apps that preview links, because a scanner that runs the page could use its one opening. Don’t open it yourself to check it, for the same reason.
What your recipient sees
- A one-time link (when
qurl shareconfirms one-time use) - They open it in a browser and land on your app, with no install and no LayerV account. It works once and expires on its own. Your app’s own sign-in still applies.
- An email invitation (what a coding agent sends)
- They open the invitation in a browser, see who published the app (marked Not verified), verify their email there, and save a passkey. The email verification code stays in that flow; they never send it to you. Where the page offers Email me an access link, they can use that instead of a passkey.
- Legacy: an access request at
https://qurl.link/<CRID> - Only for resources published with
--allow-requests. They press Request access, type a name, save a passkey, and get a six-digit code to give you. Once you approve that code, they press Open anyway.
- A one-time link (when
- 1
Download qURL Desktop
Apple Silicon (M1 or later) · macOS 12 Monterey or later.
- 2
Turn on Sharing
Choose Continue without an account to start now, or connect a free LayerV account for higher limits. Then turn on Sharing.
Without an account, you get up to 3 active resources, with links that last up to 24 hours.
- 3
Add a file or a local address
Drag in a file, or enter the address of an app running on your Mac, such as
http://127.0.0.1:3000. - 4
Set expiry and access rules
Choose how long the link lasts, whether it can be reused, and any session, country, or network limits.
- 5
Send the link
Recipients open it in a browser.
Keep your Mac awake, online, and Sharing on.
- 6
Revoke
Revoke a link to stop access to it. Turn Sharing off to stop every share.
The connector is sales-assisted today. To share a tool on a machine you control, use the CLI tab.
- 1
Get your connector configuration
The connector runs from a configuration the platform generates for your account and the service you share. Today it is generated by the qURL Slack app's admin command, or by LayerV for your deployment. Contact LayerV to get it, or to ask which path fits your environment.
The Enterprise connector page covers CPU, memory, storage, network, and deployment.
- 2
Mint an enrollment token
Choose a connector ID. The example uses
prod-dashboard. Your API key needsqurl:agenthere andqurl:resolvein step 3; the requests call it$LAYERV_TOKEN. Savedata.api_keyfrom the response.# Requires a token with qurl:agent. Save data.api_key from the response; # it is the one-shot enrollment token consumed by --enrollment-token-file. curl -X POST https://api.layerv.ai/v1/api-keys \ -H "Authorization: Bearer $LAYERV_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "kind": "enrollment_token", "name": "prod-dashboard Connector enrollment", "target": "connector", "claims": [ { "type": "connector", "id": "prod-dashboard" } ], "expires_in": "1h" }'Give the token to whoever runs the deployment; the connector reads it once, on first start. It is one-shot and bound to the connector ID. Don't save it in a script.
- 3
Share access
Find the resource's CRID under Protected Resources. Send the link it returns, not the CRID. For a public resource the CRID also opens it at
https://qurl.link/<CRID>; a private resource opens only for the people and devices its publisher allowed.# The same API key as the enrollment request; needs qurl:resolve. # <CRID> is on the resource row in your dashboard. curl -X POST https://api.layerv.ai/v1/resources/<CRID>/share \ -H "Authorization: Bearer $LAYERV_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "ttl_seconds": 3600 }' # → { "data": { "qurl": "https://…", "qurl_id": "…", "expires_at": "…" } } # Send the qurl value. It is returned once and never retrievable again.Or, with the CLI:
qurl share <CRID>.