Permalinks for agent output
Let your agent show its work.
Your agent pushes a screenshot or a clip mid-run and gets back one permanent URL. The link unfurls in GitHub, Slack, Basecamp and Linear, run metadata attached.
The button copies the command. First push needs no account.
$ npx krowk push checkout-after.png ✓ uploaded checkout-after.png 412 KB https://krowk.com/a/9f3c2e1 expires in 48h · claim a workspace to keep it
Quick start
Install once. Nobody uploads anything by hand after this.
One script puts the CLI on the path. Your agent calls it from a hook, a workflow step, or its own shell.
$ curl -fsSL https://krowk.com/install | bash
The problem
The work is done. Looking at it is the expensive part.
- 01
Your agent finished.
The screenshot, the recording, the summary — everything that proves it worked. All of it sits in a sandbox that's already gone.
- 02
You spin it up to look.
Fetch the branch, install, migrate, run, click through to the screen that changed. Twelve minutes to confirm that one button moved.
- 03
Your team never sees it.
You pasted it into the pull request. Half the team lives in Basecamp. An attachment stays where it landed, not with the work.
One link, every tool
Same URL. Same card. Wherever the thread went.
No re-upload, no second copy, no tool that renders it as a bare blue link.
https://krowk.com/a/9f3c2e1
GitHub · pull request
krowk.com
Checkout, mobile 390×844
Screen recording, 12s. Discount now applies before tax.
- agent
- claude-code
- repo
- acme/storefront
- task
- #412 discount codes
Slack · #eng-review
krowk.com
Checkout, mobile 390×844
Screen recording, 12s. Discount now applies before tax.
- agent
- claude-code
- repo
- acme/storefront
- task
- #412 discount codes
Basecamp · to-do
krowk.com
Checkout, mobile 390×844
Screen recording, 12s. Discount now applies before tax.
- agent
- claude-code
- repo
- acme/storefront
- task
- #412 discount codes
Built for agents
The client is a program, so the API reads like one.
Idempotent uploads
The URL comes from the file digest. An agent that retries eleven times gets one artifact and the same link every time.
Errors an LLM can act on
Every failure names the code, the limit, the actual value and the fix. No stack traces, no HTML error page.
Scoped keys
One key per agent per repo, each with its own quota. Revoke a runaway at 3am without rotating anything else.
Rate limits you can read
X-RateLimit-Remaining and Retry-After on every response, the 429 included. Agents back off instead of hammering.
Pricing
It bills like an API, not like a seat.
Free
For trying it inside a real run.
$0
- Links expire 48 hours after upload
- 100 uploads a day
- 100 MB an artifact
- 30 days to claim an expired link back
- No signup, no card
Pro
usage-basedFor teams whose agents run daily.
$12/mo
- Links that never expire
- 10,000 uploads a month
- 2 GB an artifact
- 100 GB of storage included
- Unlimited teammates, scoped keys per agent
Pro, past the included amounts
- Uploads past 10,000 a month
- $1 per 1,000
- Storage past 100 GB
- $0.05 per GB-month
- Video transcoding
- $0.10 per minute
Every workspace has a hard spend cap, on by default — a runaway agent hits a 429, not your card.
FAQ
The fine print, out loud.
Why not just use S3?
S3 gives you a bucket and a signed URL that expires and unfurls as nothing. Krowk gives you a stable link that renders as a preview card in GitHub, Slack, Basecamp, Linear and Notion, plus an API shaped for a client that retries. Object storage is the substrate underneath. It is not the product.
Do links expire?
Free links expire 48 hours after upload. Links in a claimed workspace do not expire.
What happens to a free link when it expires?
The URL returns 410 Gone with the original filename and upload time, so anyone reading an old thread can tell what used to be there instead of hitting a dead 404. The artifact itself sits in cold storage for another 30 days — claim a workspace in that window and the link comes back. After that it is deleted for good.
What does usage cost past the included amounts?
Three meters, published in full: $1 per 1,000 uploads past the monthly 10,000, $0.05 per GB-month of storage past 100 GB, and $0.10 per minute of video transcoding. Deduplicated retries are free. There is no bandwidth or egress charge, however many times a link unfurls.
What if an agent goes runaway?
Every key has its own quota and every workspace has a hard spend cap, on by default. When either trips, the API returns 429 with Retry-After and your bill stops moving. Retries of the same file deduplicate to a single artifact, so eleven pushes cost one upload.
What happens to my links if I cancel?
Links stay live for 60 days after the subscription ends, and you can export every artifact with its metadata as one archive at any time, including that window. After 60 days the links return 410 with the filename tombstone, the same way expired free links do.
Is the CLI open source?
Yes. The CLI and the MCP server are both MIT, at github.com/krowkcom/cli. The upload endpoint is documented, so you can talk to it with curl if you would rather install nothing.
Can I self-host?
Not yet. The unfurl side depends on our link resolver, and we would rather ship one that works than a self-host guide that half works.
Which agents are supported?
Anything that can run a CLI or speak MCP. Claude Code, Cursor, Devin, OpenHands, Codex, or a bash step in CI. There is no agent-specific integration to wait for.
Your agent's next screenshot could be a link that works everywhere.
One command. No account, no dashboard tour.
$ npx krowk push screenshot.png ✓ uploaded screenshot.png 318 KB https://krowk.com/a/4d7b8a2