Skip to main content
← All guides

Share your local app from Claude Code

Content updated October 30, 2026.

How do I get Claude Code to share the app I’m building?

Install the qURL™ plugin, then ask Claude Code to share your app. It gives you a private address, and you choose who can open it. Your app stays on your computer. No LayerV account is needed.

Set up qURL for Claude Code

What you need

  • Claude Code, in the project whose app is running
  • The app running on this machine, for example on port 3000
  • No LayerV account or API key

Steps

  1. Add the qURL plugin marketplace

    Copy this command, paste it into the Claude Code message box, and press Enter. This adds LayerV’s plugin source. You only need to do this once.

    /plugin marketplace add layervai/claude-plugins
  2. Install the plugin

    After the first command finishes, copy this command into the same Claude Code message box and press Enter. Review the plugin, then choose “Install for you” to use it across your projects.

    /plugin install qurl@layerv
  3. Check the plugin is ready

    Open the Installed tab and check that qurl@layerv is enabled. If Claude Code asks you to reload plugins, follow that prompt before sharing.

    /plugin
  4. Ask it to share the app

    Claude Code finds the running app (or asks which one), installs the CLI with the qURL install script (it puts qurl in ~/.local/bin, with no Homebrew and no sudo), publishes the app as a private resource, and gives you an address to send. In the default permission mode it asks before running that install and qurl publish.

    Share the app I'm running with qURL.
  5. Choose who can open the app

    The agent applies the private access rules you choose. For named recipients, give it their email addresses so it can send invitations. Recipients verify their email in the browser and save a passkey; they never send you their email verification code. The agent checks policy support before sharing and keeps the app private if the deployment cannot support it. For existing legacy resources only, pass on a six-digit access code when it came from the person you mean to let in, over a channel where you know it is them. Ask for a one-time link when that meets your needs; the link is a secret.

Manual skill installation

Use this if plugins are unavailable. Run the command in your terminal, then return to Claude Code. Run /reload-skills if qURL does not appear. Skip the plugin setup above and ask it to share your app. You do not need both the skill and the plugin.

mkdir -p ~/.claude/skills/qurl && curl -fsSL https://layerv.ai/skills/qurl/SKILL.md -o ~/.claude/skills/qurl/SKILL.md

What the recipient sees

A person opens the emailed invitation or the address in a browser and sees who published the app, marked Not verified: today LayerV has verified only its own account. The private policy controls access. Named recipients verify their email there and save a passkey; their email verification code stays in that flow. A person with a one-time link lands on your app directly. Either way, the session admits the network address the opener connects from.

Which tool should Claude Code use to share the app?

OptionChoose it whenTrade-off
qURLqURL fits when Claude Code should share the running app without a deploy: with the qURL skill it installs the CLI, publishes the app privately, and invites only the people you name.With qURL your computer and the app must stay running, and invited people verify their email and save a passkey before they get in.
Vercel preview deploymentA Vercel preview deployment fits when the app should stay online with your laptop closed: the agent can run the Vercel CLI, which uploads the project and builds it on Vercel.Vercel needs you logged in. New projects enable deployment protection by default, so check access settings before sharing. The first deployment of a new project is always a production deployment.
ngrokngrok fits when you already have an ngrok account: the agent runs ngrok http with your port and gets your stable dev-domain URL.ngrok needs an authtoken configured first, the URL is public, and free-plan visitors see a browser warning page.
Cloudflare Quick TunnelsA Cloudflare Quick Tunnel fits a throwaway public link: the agent runs cloudflared tunnel --url with no account.A Cloudflare Quick Tunnel URL is public unless you add --allowed-mail, changes every run, and does not support Server-Sent Events.

Troubleshooting

If you seeDo this
Claude Code doesn’t use the skillWith the plugin, check /plugin lists qurl@layerv as enabled, or type /qurl:share. With a saved skill, run /reload-skills, or check the file is at ~/.claude/skills/qurl/SKILL.md (a folder named qurl holding SKILL.md). Saying “with qURL” in the request also points it there.
It tries to open localhost with its web fetch toolClaude Code’s WebFetch refuses localhost; it checks a local server with curl through Bash instead. Approve that command or say which port the app is on.
The private-policy commands are unavailable or consumer access is disabledAsk the agent to follow the access-policy support check in the qURL skill. It updates an older CLI when needed. If the deployment cannot support the requested policy, stop sharing and keep the app private; do not fall back to legacy access requests.
For an existing legacy resource, the agent cannot turn on access requests, or publishes with no Access: line in the outputThe CLI is older than 3.4.1. Ask the agent to update it; the skill’s install step always installs the latest release. qurl --version should then print 3.4.1 or later.
qurl publish says the local app is not accepting TCP connectionsStart the app first and check that curl works on the same address. qurl publish connects to localhost as 127.0.0.1, so if your app listens only on IPv6 (on macOS or Linux, lsof -iTCP -sTCP:LISTEN -nP shows [::1]), publish 'http://[::1]:PORT' instead, or start the dev server with --host 127.0.0.1 and publish that address. Neither requires listening on your LAN. Keep the quotes: zsh treats the brackets as a pattern.
The recipient sees “Access link invalid”The link was already used or has expired. Run qurl share again and send the new link.
The recipient sees “Resource not found”The resource was deleted after the link was made. Publish the app again, then run qurl share and send the new link.
publish rejects http://127.0.0.1 with “only HTTPS URLs are allowed”, or asks you to log inYou have a CLI older than 3.0. On macOS run brew update, then brew upgrade qurl; elsewhere install the latest release again. After updating, qurl --version should print 3.4.1 or later.
publish prints no Access: line, or the Access: line says public and you did not ask for publicWith no Access: line, the CLI is older than 3.4.1: on macOS run brew update, then brew upgrade qurl; elsewhere install the latest release again. A resource that an older CLI published is public unless you published it with --private, and anyone who has the CRID of a public resource can open it. To make a public resource private, run qurl delete <CRID> and publish again with qurl 3.4.1 or later. The new resource is private and has a new CRID.
publish says this Linux session “can’t reach a systemd user manager”You are in a container or sandbox without a user service manager. Run qurl publish with --foreground; sharing lasts as long as that process runs.
publish says “Quota Exceeded” with “protected resource limit reached”, or “Your qURL account has reached a plan limit”You can see this without an account: a device with no account can keep up to 3 active resources, with links that last up to 24 hours. Run qurl list --status active, then qurl delete <CRID> for any you no longer need (it asks you to confirm; --yes skips that). qurl stop keeps the resource, so it does not free a slot.

Frequently Asked Questions

Do I need to restart Claude Code after installing the skill?

No. Claude Code watches skill directories and picks up changes in the current session. Only a top-level skills folder created after the session started needs /reload-skills.

Will the agent send the address or a link to other people?

It gives the address or link to you, and you decide who receives it. It sends invitation emails only to recipients you authorize. For legacy resources, it approves only a code you pass on, never the name on a request.

Do I need a LayerV account or API key?

No. Publishing from the CLI needs no account; the first publish creates an identity for this computer. Recipients verify their email and save a passkey in their browser when the private policy requires it. Without an account you can keep up to 3 active resources, with links that last up to 24 hours.

Who else can reach my app while the link is open?

Opening the link admits the network address it was opened from for the session, which lasts 1 hour by default. Other devices that share that public IP address, such as people on the same office or café network or VPN, can reach the app until the session ends. By default a link admits whoever opens it; access rules set through the API, such as IP allow and deny lists, can restrict that. Keep your app’s own sign-in for anything sensitive.

Share it from Claude Code

With the plugin ready, copy this request into Claude Code in the project whose app is running. You choose who can open the app.

Or use the CLI ↗

Pilot LayerV

Tell us what to protect, and we’ll scope a pilot.

Enterprise starts with a scoped, paid pilot on one application, typically 60 to 90 days, credited in full toward year one if you convert within 60 days. Then an annual package sized to what you protect. Not per seat.