upload-workflow-agent

upload-workflow-agent is an agent for coding agents from secondsky/claude-skills. It costs 55 tokens per session (4,240 once invoked), scanned A, original, MIT.

An agent for building complete user image-upload workflows with Cloudflare Images, including a server endpoint and a browser upload form.

In plain words
What is it for?
Use it to implement direct creator uploads, upload endpoints, progress tracking, Workers bindings, retry handling, webhooks, and optional image metadata storage.
Why use it?
It helps connect the browser, server, Cloudflare configuration, upload progress, error handling, retries, and optional post-upload processing.

Agent

Part of the cloudflare-images plugin — 1 skill, 3 commands, 3 agents shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/secondsky/claude-skills/upload-workflow-agent
Clone the repo
git clone --depth 1 https://github.com/secondsky/claude-skills

Or install cloudflare-images, the plugin that ships this one along with the rest of its 1 skill, 3 commands, 3 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for upload-workflow-agent

README.md
[![agentmods](https://agentmods.dev/badge/agents/secondsky/claude-skills/upload-workflow-agent.svg)](https://agentmods.dev/agents/secondsky/claude-skills/upload-workflow-agent)
Your own site
<a href="https://agentmods.dev/agents/secondsky/claude-skills/upload-workflow-agent"><img src="https://agentmods.dev/badge/agents/secondsky/claude-skills/upload-workflow-agent.svg" alt="Measured on agentmods" height="20"></a>
Per session 55 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 4,240 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00055 $0.04240
Opus 5 $0.00028 $0.02120
Sonnet 5 $0.00011 $0.00848
Haiku 4.5 $0.00006 $0.00424

Measured yesterday against content hash ef15425994df, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

upload-workflow-agent scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

const response = await fetch(uploadURL, {
plugins/cloudflare-images/agents/upload-workflow-agent.md · 640 lines

How it starts

The opening of the file, as written. The whole thing — 640 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Cloudflare Images Upload Workflow Agent

Autonomous agent for implementing complete user upload workflows (frontend + backend) for Cloudflare Images.

System Instructions

When invoked, guide the user through implementing a complete upload workflow:

Workflow Overview

Complete upload implementation requires:

  1. Backend: API endpoint to generate one-time upload URLs
  2. Frontend: Upload form with progress tracking
  3. Configuration: Cloudflare Workers bindings (if using Workers)
  4. Error Handling: Comprehensive error handling and retry logic
  5. Callback: Post-upload processing (optional)

Implementation Steps

Step 1: Determine Architecture

Ask user to clarify (if not specified):

  • Platform: Cloudflare Workers | Next.js | Remix | Node.js | Other?
  • Upload Type: Direct Creator Upload (recommended) | API Upload?
  • Storage: Need to store metadata in database?
  • Processing: Need post-upload processing (webhooks)?

Step 2: Backend Implementation

Option A: Cloudflare Workers (Recommended)

Configure wrangler.jsonc:

{
  "name": "image-upload-api",
  "main": "src/index.ts",
  "compatibility_date": "2025-01-15",
  "images": [
    {
      "binding": "IMAGES",
      "account_id": "your_account_id"
    }
  ],
  "vars": {
    "ACCOUNT_HASH": "your_account_hash"
  }
}

Create upload endpoint (use templates/worker-upload.ts as reference):

import { Hono } from 'hono';
import { cors } from 'hono/cors';

interface Env {
  IMAGES: any;
  CF_ACCOUNT_ID: string;
  CF_API_TOKEN: string;
  ACCOUNT_HASH: string;
}

const app = new Hono<{ Bindings: Env }>();

// CORS configuration
app.use('/*', cors({
  origin: ['http://localhost:5173', 'https://yourdomain.com'],
  allowMethods: ['GET', 'POST', 'OPTIONS'],
  allowHeaders: ['Content-Type', 'Authorization'],
  credentials: true
}));

// Generate one-time upload URL
app.post('/api/upload-url', async (c) => {
  try {
    const response = await fetch(
      `https://api.cloudflare.com/client/v4/accounts/${c.env.CF_ACCOUNT_ID}/images/v2/direct_upload`,
      {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${c.env.CF_API_TOKEN}`,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          requireSignedURLs: false,
          metadata: {
            uploadedAt: new Date().toISOString(),
            source: 'web-upload'
          }
        })
      }
    );

    const result = await response.json<any>();

    if (!result.success) {
      return c.json({ error: 'Failed to generate upload URL' }, 500);
    }

    return c.json({
      uploadURL: result.result.uploadURL,
      imageId: result.result.id
    });
  } catch (error) {
    console.error('Upload URL generation error:', error);
    return c.json({ error: 'Internal server error' }, 500);
  }
});

// Webhook handler for post-upload processing
app.post('/api/webhook', async (c) => {
  try {
    const signature = c.req.header('X-Cloudflare-Signature');
    const body = await c.req.text();

    // Verify signature (load templates/webhook-handler.ts for complete example)
    // const isValid = await verifySignature(body, signature, c.env.WEBHOOK_SECRET);
    // if (!isValid) return c.json({ error: 'Unauthorized' }, 401);

    const webhook = JSON.parse(body);
    console.log('Image uploaded:', webhook.image.id);

    // Process webhook (save to database, trigger processing, etc.)

    return c.json({ success: true });
  } catch (error) {
    console.error('Webhook error:', error);
    return c.json({ error: 'Internal server error' }, 500);
  }
});

export default app;

Read the full file on GitHub · 640 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 640 lines · 55 tokens per session scan A ef15425994df

Subscribe to this mod's changes

upload-workflow-agent is an agent published in the GitHub repository secondsky/claude-skills (214 stars, last pushed yesterday), licensed MIT. It adds 55 tokens to every session and 4,240 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.

Related

Other agents, from other repositories

commenter

Adds a one-line opening comment to source files that have none, so the architecture index can say what each file does. Reads and edits only the files it is given. Dispatched by /chamnan:bootstrap when coverage is low.

ArcticFox2029/chamnan · 51 tokens

librarian

Health-checks the .chamnan workspace — whether the map is stale, whether recorded procedures are still reachable and true, whether state describes work that finished long ago. Read-only; reports, never fixes.

ArcticFox2029/chamnan · 46 tokens

confluence-fetcher

ユーザーが Confluence ページの情報取得を依頼したとき、または Confluence URL を言及したときに使用する。 Context: ユーザーが Confluence URL を共有 user: "https://example.atlassian.net/wiki/spaces/DEV/pages/123/Guide この Wiki の内容を教えて" assistant: "confluence-fetcher エージェントを使用して Confluence ページの情報を取得します" ユーザーが Confluence URL を言及しているため、プロアクティブに confluence-fetcher…

lc-semba-ryuichiro/semba-claude-plugins · 437 tokens

image-optimizer

ユーザーが画像の WebP 変換や最適化を依頼したときに使用する。 Context: ユーザーが画像ディレクトリの最適化を依頼 user: "assets/images の画像を最適化して" assistant: "image-optimizer エージェントを使用して画像を分析し、最適化を実行します" ユーザーが画像の最適化を依頼しているため、image-optimizer エージェントを使用する。 Context: ユーザーが WebP 変換を依頼 user: "このディレクトリの PNG を WebP に変換して" assistant: "image-optimizer エージェントで PNG ファイルを WebP…

lc-semba-ryuichiro/semba-claude-plugins · 401 tokens

jira-fetcher

ユーザーが Jira 課題の情報取得を依頼したとき、または Jira URL を言及したときに使用する。 Context: ユーザーが Jira URL を共有 user: "https://example.atlassian.net/browse/PROJ-123 この課題の内容を教えて" assistant: "jira-fetcher エージェントを使用して Jira 課題 PROJ-123 の情報を取得します" ユーザーが Jira URL を言及しているため、プロアクティブに jira-fetcher エージェントを使用する。 Context: ユーザーが Jira 課題の取得を依頼 user: "PROJ-123…

lc-semba-ryuichiro/semba-claude-plugins · 443 tokens

fizzy-tasks

Lightweight agent for Fizzy.do task management without cluttering your main conversation context. Use for listing boards, creating cards, syncing todos, or closing completed work.

keskinonur/claude-plugin-fizzy · 39 tokens