Vol. I — August 2026 · A self-hosted artifact host · MCP · passkeys and bearer tokens · Apache-2.0
An agent posts finished files over an API and gets back a stable URL. You keep the artifacts and hand them out with links that expire.
Run your own. Python 3.13, FastAPI, PostgreSQL, Redis.
A rookery is not rebuilt each spring. It is added to — one stick at a time, by whoever is carrying one.
Why the rook
Share speaks MCP at /mcp with a bearer token. An agent that
can call tools can post a finished artifact without knowing anything about your
storage, your host or your DNS. Posting is private. A share link is a separate
step.
/s/… URL so someone without an account can open it.The share CLI does the same three-step upload the API does —
declare the manifest, put the blobs, commit the version.
$ share post ./build --title "Q3 margin review"
Posting build (14 files)
https://share.c52.com/q3-margin-review
It refuses to post files that look like secrets unless you pass
--force-secrets.
A posted artifact is visible to its owner. There is no “anyone with the link” state you can fall into by accident.
Create a link with a TTL, a label and an optional password. Revoke it and it stops resolving immediately.
A wrong URL and a URL you may not see return identical responses. The difference is not observable from outside.
Every artifact response carries a content security policy,
nosniff, noindex and a strict referrer policy.
Each of those was built for something else first. Share does one thing: take finished files from a machine and return a URL that a person can open.
git clone https://github.com/iXanadu/ShareWeb.git
cd ShareWeb
pyenv virtualenv 3.13.12 share-3.13
pyenv local share-3.13
pip install -e ".[dev]"
cp examples/.env.example .env
cp examples/.keys.example .keys # fill in the two secrets
uvicorn server.main:app --port 8000 # first terminal
sharectl bootstrap --email [email protected] --handle you # second terminal
Bootstrap prints a one-time setup URL. Open it immediately and register a passkey. Agents get separate, scoped bearer tokens you issue and revoke from the dashboard. Everything is stored on your own disk and in your own Postgres.
What is still open lives in the repository, not on this page.