Post, schedule and run ads from Gemini CLI

One extension install gives Gemini CLI Hermoso’s skills, so the terminal agent can research competitor ads, render finished image and video ads, and publish them to ten social channels.

Gemini CLI is Google’s open-source terminal agent. It installs extensions straight from a GitHub repository, and an extension can bring skills and a context file with it. Hermoso ships one, so the whole install is a single command and the agent learns when to reach for Hermoso from the skills themselves.

Hermoso is the marketing half: 850+ tools over one OAuth’d MCP endpoint covering competitor ad research, finished image and video ad generation across 90+ models, publishing and scheduling to ten social channels, and campaign management on Meta, Google Ads, Microsoft Advertising, Reddit Ads, LinkedIn, Pinterest, X Ads, TikTok Ads, Snapchat Ads, ChatGPT Ads and Apple Search Ads. One connection, and Gemini CLI has all of it.

Connect Hermoso to Gemini CLI

  1. Install the extension.
    gemini extensions install https://github.com/hermoso-ai/hermoso
    It installs the latest release of Hermoso’s public repository: five skills (research, ad-from-brand, generate, product-photoshoot and marketing) plus a GEMINI.md context file. The skills run the hermoso command through npx, so nothing is added to Gemini CLI’s tool list and nothing costs context until a command runs. gemini extensions list shows them under Agent skills.
  2. Sign in once.
    npx -y hermoso auth login
    It opens a browser sign-in and stores an owner-only credential in ~/.hermoso/config.json. Gemini CLI can run it for you the first time it needs Hermoso. No browser on that machine? Create a key under MCP & CLI → Terminal & API keys and run npx -y hermoso auth login --token hmk_….
  3. Optional: the MCP server as well.
    gemini mcp add --scope user --transport http hermoso https://app.hermoso.ai/mcp
    Gemini CLI finds Hermoso’s authorization server when the first connection answers 401 and registers itself, so no key goes in settings.json; /mcp auth hermoso inside a session runs the sign-in. The skills reach every tool without it.
  4. Ask Gemini CLI for something. “Pull my three closest competitors’ longest-running ads and remix the best hook into a 9:16 video,” or “post this render to the channel.” The agent picks the tools; you approve the spend.

We ran the install above on 2026-09-23 against Gemini CLI 0.60.0 in a clean home directory: it pulled the current release of hermoso-ai/hermoso, and gemini extensions list reported the five skills and the context file. The extension carries no MCP server of its own, which is deliberate: a tool list is loaded into every session, and skills cost nothing until they run. Hermoso is not affiliated with or endorsed by Google.

Every channel Gemini CLI can publish to

Each of these has its own page with that channel’s real caption cap, its real visibility options, what it refuses and why, and a worked example phrased for Gemini CLI.

ChannelCarouselText limit
Facebook2+ photos, our cap of 3063,206 chars
Instagram2–10, images + video2,200 chars
Threads2–20, images + video500 chars
TikTokUp to 35 images2,200 / 4,000 chars
YouTubeRefused — the unit is a video100-char title
XRefused — 4 media render as a grid280, or 25,000 on Premium
LinkedIn2–20 images, company Page only3,000 chars
Pinterest2–5 images (blocked on Trial)800-char description
Bluesky2 to 4 images300 chars and 3,000 bytes
Telegram2 to 10, photos and video4,096, or 1,024 with media

Every one of them queues through one schedule_post calendar with per-channel captions, and list_scheduled reports per-channel outcomes rather than a single green tick — “the job succeeded” and “the post went out” are different questions.

Two channels that are built but not offered

Being straight about this is worth more than a longer list. Two publishing surfaces exist in the codebase and are held back, each waiting on the platform rather than on us:

  • Reddit: organic posting and post stats are built, but Reddit’s Responsible Builder Policy requires explicit written approval before an app may use the Data API, and that ticket has not been granted. The connector is held back rather than offered as an OAuth screen leading to a dead API. Reddit Ads is a different connection and it is live: the full campaign tree, forecasting, targeting search, pixels and lead forms.
  • Google Business Profilepost_to_google_business is built, with events, offers and a real call-to-action choice, and so are the listing insights. Google allowlists the Business Profile API per project and the default quota is zero, so every call would 403 for every user. It stays gated until Google grants the project access.

A connector that would hand you a successful OAuth and a dead API is worse than one that is not offered yet, so neither is listed as available.

Three things to type once it is connected

  1. Research. “Who are my three closest competitors, and what are their longest-running Meta ads? Tell me which hook keeps repeating.” — walks find_competitorspull_competitor_adsmine_angles.
  2. Create. “Make me a 9:16 UGC video ad using that hook, with my real product photo and captions burned in.” — walks get_brandplan_adrender_ad, and hands back a finished mp4 URL.
  3. Ship. “Schedule it to Instagram and TikTok for Tuesday 9am, and build a paused Meta campaign around it targeting the US at $30 a day.” — walks schedule_postcreate_meta_campaigncreate_meta_ad.

What Gemini CLI cannot do on its own

An agent with a budget is only useful if the blast radius is bounded, so the fence is in the server rather than in a prompt. Every ad campaign, ad set, ad group and ad is created paused, and the status switches that arm real money refuse to run without an explicit confirmation flag. Every render is quoted first — hermoso_capabilities publishes each model’s exact credit cost before anything spends — and credits are reserved before the first provider call and settled at the exact cost afterwards, so a failed dispatch refunds rather than leaving you billed for nothing. Deletes are confirm-gated too, and every campaign tree is read back from the ad platform before your agent tells you what it built.

One step is deliberately yours: linking each account, once. Most channels link through the platform’s own OAuth consent screen in a browser; Bluesky takes an app password and Telegram a bot token, pasted in Hermoso. Everything after that is a tool call.

Beyond publishing

Publishing is the last step, and it is the smallest one. The same connection gives Gemini CLI the Meta, Google and LinkedIn ad libraries plus organic TikTok, Instagram, YouTube, Reddit and Threads for research; 100+ image, video, voice and writing models on a single credit meter, with UGC avatars, dubbing, upscaling and native HTML ad formats; and the full campaign tree on eleven paid platforms. There are no per-vendor API keys to hold and no separate app to learn.

See the full tool list, or what a marketing MCP is.

Other clients: Claude · ChatGPT · Claude Code · Cursor · Codex · Cline · OpenClaw · Grok Bot · Hermes · Perplexity · Le Chat · any MCP client

Frequently asked questions

Can Gemini CLI post to social media?

Yes, once you install Hermoso's extension. Gemini CLI can then publish to Facebook, Instagram, Threads, TikTok, YouTube, X, LinkedIn, Pinterest, Bluesky and Telegram — and schedule to all ten from one queue with per-channel captions.

How do I add Hermoso to Gemini CLI?

Run gemini extensions install https://github.com/hermoso-ai/hermoso, which adds five Hermoso skills that drive the hermoso command, then sign in once with npx -y hermoso auth login. The sign-in opens a browser and stores the credential itself, so there is no key to create and none to paste. If you also want Hermoso's tools in Gemini CLI's own list, gemini mcp add --scope user --transport http hermoso https://app.hermoso.ai/mcp adds the hosted server, which signs in with OAuth. We ran the install above on 2026-09-23 against Gemini CLI 0.60.0 in a clean home directory: it pulled the current release of hermoso-ai/hermoso, and gemini extensions list reported the five skills and the context file. The extension carries no MCP server of its own, which is deliberate: a tool list is loaded into every session, and skills cost nothing until they run. Hermoso is not affiliated with or endorsed by Google.

Can Gemini CLI run my Meta and Google ad campaigns?

Yes. Gemini CLI can build the whole tree on Meta, Google Ads, Microsoft Advertising, Reddit Ads, LinkedIn, Pinterest, X Ads, TikTok Ads, Snapchat Ads, ChatGPT Ads and Apple Search Ads. The summary you get is built from a read-back of what the platform actually stored.

Does using Hermoso from Gemini CLI cost extra?

No. There is one credit meter and it does not care which client called. A free account starts with 30 credits plus 250+ earnable; paid plans are $19, $49 and $149 a month for 1,000, 3,000 and 10,000 credits. Publishing is free on every channel except X, which bills per call because X charges us per API request.

Start free — 30 credits at signup and 250+ more to earn, and every feature on every plan. Credits are spent only on AI models and Ad Spy research; posting, scheduling, ads management and analytics are free.

Start free   See pricing