Canvora × Hermes Agent
On-brand visuals CLI for Hermes Agent
Give your self-improving agent a design department: scheduled social content, campaign visuals and localized sets — generated on-brand, in 150+ languages.
Free credits, no card required. Please make sure there is always a human in the loop.
Get started with Hermes
# Install the Canvora skills
npx skills add canvora/canvora-mcp
# Set your API key
export CANVORA_API_KEY=vd_...
# Ask Hermes in natural language
"Every Monday, turn last week's blog posts into a LinkedIn
carousel and Instagram posts, in English and Portuguese"This is what your agent ships
One generation, localized twice. Same design, natively re-composed in Spanish and Arabic — right-to-left done correctly, not mirrored English.

Generated with the same commands shown on this page.
How it works
1. One-time setup
Skills + key; Hermes remembers both
npx skills add canvora/canvora-mcp
export CANVORA_API_KEY=vd_...
canvora brands --json # Hermes notes your brand kit ids2. The scheduled run
What Hermes executes every Monday
ID=$(canvora generate \
--url "$(cat latest-post-url.txt)" \
--format linkedin_carousel,instagram_post \
--brand "$BRAND_ID" --style modern | head -1)
canvora status "$ID" --json # poll to completed3. Localize for each market
Same design — Portuguese, Spanish, Turkish
for LANG in pt es tr; do
canvora localize "$ID" --language $LANG
done
canvora download "$ID" --dir out/monday/What is Hermes Agent?
Hermes is a self-improving AI agent: it pauses to evaluate its own work, writes skill documents from what worked, and runs scheduled, long-lived workflows like daily briefings and content pipelines. Canvora slots in as the visual output of those pipelines.
Learns the workflow once
Hermes picks up the Canvora skills — cost check, generate, poll, download — and reuses the pattern in every future pipeline it builds.
Cron-friendly
Hermes runs on schedules. Canvora generation is asynchronous with a status command, so a weekly content job fires, polls, and delivers without babysitting.
Self-evaluating
Hermes reviews its outputs. Canvora returns file URLs the agent can inspect, plus edit and variations commands to revise anything that misses.
A real Hermes pipeline
Natural language in, weekly deliverables out
> "Set up a weekly content run: our changelog becomes
an Instagram carousel + LinkedIn post, EN and PT-BR."
Hermes: Building the pipeline.
- Monday 08:00 trigger registered
- Steps: read changelog -> canvora generate (2 formats)
-> poll status -> canvora localize --language pt
-> download + hand off to the posting queue
- Self-check: verify output count = 2 formats x 2 languages
Week 1 result: 4 on-brand visuals delivered to out/monday/.Revise what the review flags
Hermes evaluates its own outputs — Canvora lets it act
# Hermes flags slide 3's headline as weak, then runs:
canvora edit <outputId> --prompt "stronger, more specific headline: \
'Ship 40% faster' instead of 'Work better'" --yes
# Or asks for alternate takes on the whole visual:
canvora variations <generationId> --count 2Why Hermes Agent + Canvora
- Skills encode the full workflow — Hermes learns it once, reuses it in every pipeline
- Asynchronous generate + status polling fits scheduled, unattended runs
- localize produces per-market versions of the same design — one pipeline, many languages
- edit and variations give the self-evaluation loop something to act on
- JSON everywhere; errors are typed and the balance is checked before any charge
Command reference
Add --json to any command for machine-readable output. Progress goes to stderr, results to stdout.
| Command | Description |
|---|---|
| canvora generate | Create visuals from --idea, --input text, --url or --file-url; pick formats, brand, style, language |
| canvora status <id> | Check a generation; --json returns status and output file URLs |
| canvora download <id> | Save output files to a directory |
| canvora localize <id> | Same design, natively re-composed in another language (RTL included) |
| canvora variations <id> | Alternate takes on a finished generation |
| canvora edit <outputId> | Revise one visual with a natural-language instruction |
| canvora formats | List all 100+ format ids |
| canvora brands | List brand kits (colors, fonts, logo, tone) |
| canvora credits | Show credit balance |
100+ formats, one engine
Every format has platform-correct composition and safe zones — your agent picks by id.
Instagram Carousel
Up to 20 slides, hook to CTA
LinkedIn Carousel
Swipeable document posts
Pitch Deck
Coherent multi-slide sets
Instagram Post & Story
Feed and vertical formats
Stat Card
One number, designed to land
Infographic
Data and process visuals
Blog Header & OG Image
The launch surface
Ad Creatives
Display and social ads
FAQ
Can Hermes run this unattended? +
The pipeline runs unattended, but keep a human review before publishing — Canvora returns the files; your posting step is where the human belongs. Balance is verified before any deduction, and failed generations refund automatically, so an unattended run can never silently burn through credits.
How is usage billed for scheduled jobs? +
Flat credits: 10 per single visual, 15 per carousel or deck slide, identical for API, CLI and app. A weekly job's cost is therefore predictable to the credit. canvora credits --json gives the agent the balance before each run.
What happens if a run fails mid-generation? +
The generation is marked failed and its credits are refunded automatically. The status command reports the error, so the next self-evaluation cycle can retry or alert you.
Does localization keep the design identical? +
Yes — localize re-renders the same visual with text natively composed in the target language (including right-to-left scripts like Arabic). Layout, brand and imagery stay put.
Also works with
Your agent's next tool call is a design department.
Create a free account, set one key, and let Hermes Agent ship on-brand visuals.