Agentic AI Marketing

Blowhorn for OpenCode

OpenCode reads AGENTS.md and lets you set bash permissions per command. That is exactly the leash a marketing agent needs.

Download for Mac Read the docs

How it works

  1. 1

    Install Blowhorn

    Blowhorn for Mac and the Blowhorn Chrome extension. Your posts go out from your own signed-in Chrome.

  2. 2

    Write the rules where OpenCode looks

    AGENTS.md and per-command permissions. A few lines and OpenCode knows the commands.

  3. 3

    Say what you want

    OpenCode turns it into blowhorn commands. You approve what publishes.

Write the rules where OpenCode looks

OpenCode reads AGENTS.md. Put the Blowhorn rules there, then set the bash permission map in opencode.json: reads run freely, writes ask, pause is always allowed.

AGENTS.md
## Marketing with Blowhorn

- Read state with --json: blowhorn schedule list, blowhorn content list --pending
- Edit queue rows with blowhorn content upsert and pass --expected-fingerprint
- Preview publishing with --dry-run; never trigger without asking
- Emergency stop: blowhorn schedule pause --all --reason "<why>"
opencode.json
{
  "permission": {
    "bash": {
      "blowhorn schedule list*": "allow",
      "blowhorn content list*": "allow",
      "blowhorn schedule pause*": "allow",
      "blowhorn post*": "ask",
      "*": "ask"
    }
  }
}

Try saying

  • You say: "List every scheduled row that is due this week and the Mac that will claim it."

  • You say: "Draft three Bluesky rows for profile team-dev from docs/launch.md, unapproved, so I can edit them."

  • You say: "Explain why row 7 did not run."

  • You say: "Pause row 12 only, the rest of the schedule keeps going."

What OpenCode runs

terminal
blowhorn schedule list --due-only --profile all --json
blowhorn schedule why 7 --json
blowhorn schedule pause --row 12 --reason "copy under review"
blowhorn schedule resume --row 12

Where it pays off

Model of your choice

OpenCode talks to many model providers. Blowhorn does not care which one is driving; the CLI and its JSON stay the same.

Scripted checks

opencode run takes a prompt from the command line, so a nightly "what is owed tomorrow" check fits in a cron line.

One row at a time

schedule pause --row N parks a single job on every Mac while the rest of the launch keeps moving.

Questions

Why not let it run everything?

You can. We suggest ask for anything that publishes because a post is public the moment it lands, and within a run Blowhorn doesn't retry a failed post.

Does it work with OpenCode's other agents?

Any agent in OpenCode that can run bash can run blowhorn. The permission map applies to all of them.

Does my agent see my social passwords?

No. Blowhorn posts through your own signed-in Chrome; the agent only runs commands and reads their output. Review what you allow it to run, as with any tool that acts on your accounts.

One message out, many ears in

Get Blowhorn for Mac, then let OpenCode do the talking.

Download for Mac

More agents