An agent that coordinates everything needed to ship a feature launch:
Content (via Claude):
- Release notes
- Blog draft
- Developer docs
- Social posts (X, LinkedIn)
Assets (via Cloudinary):
- Upload launch imagery/video
- Generate social crops (Instagram, X, LinkedIn presets)
- Generate an Open Graph image with a text overlay
- Generate resized assets for other channels (email header, etc.)
Outreach (via Claude, when a target customer is described):
- A plan recommending outreach channels and sequencing for reaching first customers
- Ready-to-send messages per channel, each ending with an explicit call to action
- Drafts only — the agent never sends anything; a human reviews and deploys them
Two ways, and the first is the one worth building toward:
- Tag-based discovery (recommended). Whoever preps launch materials tags
them in Cloudinary with the launch slug ahead of time — via the console,
your DAM UI, or an upload pipeline — optionally setting a
rolecustom metadata field (hero,screenshot,video). The brief then just names the slug, and the agent callsfind_launch_assetsto discover everything itself. Nobody has to hunt down or paste a URL. - URL-based (fallback). The brief includes explicit source paths/URLs.
The agent uploads and tags them via
upload_launch_image— which means the next launch that reuses these assets can switch to option 1.
The agent's system prompt (src/agent.js) tells Claude to prefer (1) and
only fall back to (2) for anything find_launch_assets doesn't return. The
sample brief in src/index.js demonstrates the tag-based path.
The interesting part isn't Cloudinary's API — it's the agent loop:
Claude is given a menu of tools (src/tools/tool-definitions.js) and a launch
brief, and it decides which tools to call, in what order, and with what
inputs. The orchestrator (src/agent.js) just executes whatever Claude asks
for and feeds results back until Claude is done. Content tools themselves
delegate to Claude with narrow, specialized prompts (src/tools/content-tools.js)
rather than one giant prompt trying to do everything — a "specialist sub-call"
pattern that scales better as you add more content types.
Cloudinary's role is intentionally narrow: store the source asset once, then
derive every crop/format/overlay on demand via URL-based transformations
(src/tools/cloudinary-tools.js). No re-uploading per channel.
npm install
cp .env.example .env
# fill in ANTHROPIC_API_KEY and your Cloudinary credentials in .envCloudinary credentials are in your Cloudinary console under Dashboard → Product Environment Credentials.
npm startYou'll be walked through a short wizard: what kind of launch this is (technical,
retail, travel, real estate, or home improvement), what you're launching, key
changes/benefits, audience, tone, how to get imagery (already tagged in
Cloudinary, or paste source URLs), and who you're hoping to reach as first
customers (leave blank to skip outreach prep). Answering --file brief.txt
instead of the wizard is also supported, for scripting: npm start -- --file brief.txt.
This will:
- Print each tool call as the agent makes it.
- Write
output/<launch-slug>/report.html— a single browser-viewable report with every generated content piece rendered (not raw markdown) and every Cloudinary asset shown as an actual thumbnail. - Write
output/<launch-slug>/run-results.json— the raw tool-call log (every input/output, including every Cloudinary URL), for scripting or auditing. - Print a final summary from the agent, plus the exact path to
report.html.
- New content type (e.g. an FAQ): add a specialist function in
content-tools.js, add its schema toTOOLSand its case toexecuteToolintool-definitions.js. No changes needed toagent.js. - New crop/channel preset: add one line to
CROP_PRESETSincloudinary-tools.js. - Swap the model: change
MODELinconfig.js. - Persist run history / support multiple launches at once: the agent loop
is stateless per call — wrap
runProductLaunchAgentin whatever storage/queueing layer your app needs.
src/
config.js Anthropic + Cloudinary client setup
agent.js The orchestrator tool-use loop
index.js CLI entry point
tools/
tool-definitions.js Tool schemas Claude sees + dispatcher
content-tools.js Claude-backed content generators
cloudinary-tools.js Real Cloudinary upload/transform calls