Sunday, May 17, 2026

How I expose agent-built localhost apps with a short-lived public URL.

How I Expose Agent-Built Localhost Apps With a Short-Lived Public URL

TL;DR: Quackshell gives agent-built localhost apps a short-lived public URL.

A lot of my AI-assisted development work now starts the same way: I ask an agent to build or modify a small local web app, it starts a dev server on localhost, and then I need to actually see it, test it, share it, or connect it to something outside my machine.

That last step is where things usually get annoying.

Localhost is great for building, but it is terrible for collaboration, mobile testing, webhook testing, and agentic workflows where another tool needs to reach the thing your agent just created. Deploying every experiment is too slow. Setting up infrastructure is too heavy. Leaving long-lived tunnels open is more exposure than I usually want.

So I built Quackshell: a small CLI that gives a local web app a temporary public URL.

The Problem

Agent-built apps are often disposable, experimental, and fast-moving. An agent might spin up a React app, a Python server, a dashboard, a prototype, or a one-off tool. The useful moment is immediate: “show me what you built.”

But if the app only exists at:

http://localhost:3000

then it is trapped on your machine.

That makes simple things harder than they should be:

  • Opening the app from your phone
  • Sharing a preview with another person
  • Letting another agent or automation inspect it
  • Testing callbacks or webhooks
  • Running a demo without deploying

The old answer was usually “deploy it” or “set up a tunnel.” Both work, but they do not always fit the pace of agentic development.

The Workflow I Wanted

I wanted something closer to this:

# Start any local app
python -m http.server 8000

# Expose it temporarily
quackshell-cli --port 8000 --api-token <token>

The CLI prints a public URL. Anyone with that URL can reach the local app while the session is running.

When I stop the CLI, the public session stops working.

That is the whole idea.

Why Short-Lived URLs Matter

The short-lived part is important. Most agent-built apps are not production systems. They are previews, experiments, throwaway dashboards, mini tools, and demos.

For that kind of work, I do not want a permanent deployment every time. I want a temporary viewing window.

A short-lived public URL fits the shape of the work:

  • The app starts locally.
  • The URL exists while I am actively working.
  • The URL dies when the session ends.

That makes it useful for rapid iteration without turning every experiment into infrastructure.

Where This Gets Useful

The obvious use case is sharing a local app with another human. But the more interesting use case is agentic workflows.

If an agent builds a local UI, another tool can open the public URL and inspect it. If a prototype needs a webhook callback, the callback can hit the temporary URL. If I want to test the mobile version, I can open the URL on my phone without changing my network setup.

It turns local development into something that can briefly participate in the wider web.

A Simple Mental Model

Quackshell is not trying to replace deployment.

It is for the step before deployment:

  • “Can I see it?”
  • “Can I share it?”
  • “Can this external service reach it?”
  • “Can my agent show me what it made?”

If the answer needs to be yes for the next ten minutes, a short-lived public URL is often enough.

Example

Imagine an agent creates a small dashboard and starts it on port 5173:

npm run dev

Instead of deploying the dashboard, I can expose it:

quackshell-cli --port 5173 --api-token <token>

Now I have a public URL I can open, send, test, or hand to another workflow.

When I am done, I stop the CLI. The session ends.

Why This Feels Different With Agents

Before AI coding agents, localhost was mostly a developer-only space. You built something, checked it yourself, and eventually deployed it.

With agents, localhost is becoming a workspace that other systems need to interact with. Agents can build apps, modify them, run them, inspect them, and use them as part of a larger loop.

That makes local apps more valuable when they can be temporarily reached from outside the machine.

The public URL becomes a bridge between an agent-built local artifact and the rest of the workflow.

Closing Thought

Agentic development is making software creation faster and more local. But the web is still built around reachable URLs.

Quackshell is my attempt to make those two worlds meet: keep the speed of localhost, but give it a short-lived public address when the workflow needs one.

For builders working with local agents, prototypes, demos, and automation loops, that small bridge can remove a surprising amount of friction.

Wednesday, May 13, 2026

lucasjordan.com -- is back

I updated lucasjordan.com as a home for my side projects, technical writing, and product work.

The site is intentionally simple: a portfolio index, project pages, and links out to the products or resources where the work lives. Most of these were built nights and weekends, and the goal is to give each project enough context to explain what it is, why it exists, and what was technically interesting about building it.

Current project pages include iOS apps, a first-generation iPad accessory, technical books, early iPhone game work, public-data websites, and newer AI workflow tooling.

I also used this update to put the site on a cleaner static publishing setup. The pages are generated from project metadata, published to S3, served through CloudFront, and include a sitemap, robots.txt, canonical URLs, and structured data for the project pages.

Take a look here: https://lucasjordan.com/

Sunday, May 03, 2026

ThreaderGen: Building AI Workflows on a Graph Canvas

ThreaderGen: Building AI Workflows on a Graph Canvas

ThreaderGen is a visual workspace for building multi-step AI generation workflows as connected project graphs. Instead of scattering prompts, scripts, assets, and structured outputs across separate tools, ThreaderGen puts the whole workflow on a canvas where each step is visible, connected, and reusable.

At its core, ThreaderGen is designed for generation work that has more than one step. You can wire inputs into text, image, script, voice, agent, and structured-output nodes, then save the result as a reusable project. That makes it useful for workflows where the output of one step becomes the input for the next: prompt chains, content pipelines, structured data extraction, image generation flows, automation scripts, and nested subprojects.

The most interesting part is that ThreaderGen projects are not limited to the editor. Workflows can be executed from the command line, which means a graph built visually can become part of a fully automated system. That bridge between visual design and command-line execution is the hook: build the workflow where it is easy to inspect, then run it where automation belongs.

ThreaderGen also supports reusable graph patterns. Subprojects let one graph call another, structured nodes make JSON-like records visible and editable, and script or agent nodes let code and reasoning become explicit parts of the flow instead of hidden side processes.

The product is still taking shape, but the direction is clear: ThreaderGen is for people who want AI workflows that are inspectable, reusable, and operational.

Visit the main site here: https://threadergen.com/

Read the current node reference here: https://threadergen.com/documentation/