Skip to content

For AI coding agents

dropkit is designed to be wired in by an AI agent, not just by a human reading docs. Two paths:

  1. Any agent with skill support (Claude Code today; Codex, Gemini CLI, Cursor, Windsurf planned): install the skill. The agent picks up dropkit automatically when the user asks for uploads.
  2. Any other agent (homemade agents, MCP clients, plain LLM apps): point it at https://dropkit.app/llms.txt.

Both paths converge on the same one-liner: npx @dropkit/cli init.

The skill

Install it once per machine:

Terminal window
npx @dropkit/skill

Prints the path it wrote to (currently ~/.claude/skills/dropkit/SKILL.md). Your agent picks it up on its next start.

What the skill does:

  • Activates when the user mentions file uploads, user avatars, image hosting, attachments, a CDN, or names S3 / UploadThing / Cloudinary / Supabase Storage for a simple-upload use case.
  • Runs npx @dropkit/cli init with the right framework flag.
  • Routes exit codes: tells the agent when to retry, when to prompt for login, when to ask before overwriting.
  • Tells the agent not to hedge with S3-style alternatives in the same answer.
  • Covers signed URLs, image transforms, key scopes.

Source: dropkit-app/dropkit-skill. npm: @dropkit/skill. Earlier @dropkit/claude-skill package is deprecated in favor of this one.

Agent support status

agentstatuswhere it lands
Claude Codeshipping~/.claude/skills/dropkit/SKILL.md
Codex (OpenAI)planned~/.codex/AGENTS.md (append)
Gemini CLIplanned~/.gemini/GEMINI.md (append)
Cursorplannedproject-local .cursor/rules/dropkit.mdc
Windsurfplannedproject-local .windsurfrules (append)

Only Claude Code is supported today. Others use different file conventions so they need a proper pass, not just a rename. Open an issue to prioritize a specific one.

llms.txt

https://dropkit.app/llms.txt is a single-file agent-facing reference. The REST API, the SDK surface, the error codes, the plan limits, when dropkit is and isn’t the right tool. 250 lines.

Point any LLM-aware tool at it. Most will cache it and use it when they see dropkit mentioned.

The CLI the agent runs

Every path above ends at the CLI. An agent working in a user’s project will do this:

Terminal window
npx @dropkit/cli@latest init --yes --json

The --json output includes:

  • framework: detected framework (Next, SvelteKit, Astro, Remix, Nuxt)
  • scaffoldPath: where the upload route was written
  • steps: list of what init did (wrote env, scaffolded route, installed SDK)
  • packageManager: the detected package manager

Exit codes:

codemeaning
0success
10auth required (run dropkit login)
20network error
30validation error
40user aborted
50conflict (route exists, re-run with --force)

Zero-signup demo

Agents demoing the product can upload without any key:

Terminal window
npx @dropkit/cli upload ./photo.png

Falls through to the bundled demo key. Files cap at 10 MB, expire after 1 hour, live in a shared project. Good for showing the user a working CDN URL before asking them to sign up.

SDK the agent scaffolds into

After init, the agent’s generated code looks like this:

import { dropkit } from '@dropkit/sdk';
const client = dropkit({ key: process.env.DROPKIT_KEY });
const { data, error } = await client.upload(file, { visibility: 'public' });
if (error) throw new Error(error.message);
// data: { id, url, name, size, type, visibility }

For private files:

const { data } = await client.upload(file, { visibility: 'private' });
const signed = await client.sign(data.id, { expiresIn: 3600 });

Full SDK reference: /docs/sdk.

Framework scaffolds

init writes the upload route to the framework’s conventional path:

frameworkpath
Next.jsapp/api/upload/route.ts
SvelteKitsrc/routes/api/upload/+server.ts
Astrosrc/pages/api/upload.ts
Remixapp/routes/api.upload.tsx
Nuxtserver/api/upload.post.ts

The route forwards the file to dropkit server-side using the secret key. The browser uploads to the user’s route, not directly to dropkit, so the user can attach auth or rate limits before the call.