Ship ads like you ship code.

One binary launches campaigns, generates creative, wires attribution and reads back spend. Every command speaks JSON, so your agent can drive it.

curl -fsSL https://hellyeah.sh/install.sh | sh -s -- --agents -y

Installs the CLI and the agent skills. No Node required. Windows runs the same install through PowerShell.

Read the docs

The whole loop is a command.

Research a business, fund a wallet, launch on Google, then instrument the site that receives the click. Nothing here needs a dashboard.

  • hellyeah glowfern.com

    A bare URL researches the business and builds the brand profile.

  • hellyeah creative generate text

    Writes ad copy anchored to that profile.

  • hellyeah campaign launch --dry-run

    Prices the campaign and shows the plan before it spends.

  • hellyeah tracker install

    Wires X-Ray into your app so the click ties to revenue.

  • hellyeah doctor

    One pass over config, binary, network, auth, org, profile and wallet.

Built to be driven by something that is not a human.

Agent support is not a flag on this CLI. It is the reason the output contract looks the way it does.

One JSON value on stdout
Success or failure, always the same envelope, always parseable. Spinners and prose go to stderr where they cannot corrupt a read.
Errors carry the fix
Every failure returns a next array of commands that resolve it, so an agent recovers instead of guessing.
Exit codes mean something
Separate codes for usage, auth and payment failures. Branch on the code rather than parsing a message.
Money needs consent
Mutating commands refuse without an explicit flag, and they refuse before the API call rather than after it.

Teach your agent the workflow.

Installs into

  • Claude Code
  • Cursor
  • Codex
  • opencode

Two skills ship with the CLI. One drives the growth loop. The other installs X-Ray into an existing app by editing real source, then audits its own work. Install once, into whichever agent you already run.

The SDK the tracker installs.

X-Ray ships as its own package. It carries click ids in a first party cookie and survives the hop to your server. Track calls cannot throw, timers never hold the process open, and a missing key warns instead of crashing.

@hellyeah/x-ray
npm install @hellyeah/x-ray
BrowserMount once. It reads the click id before your tracker loads.
import { Analytics } from "@hellyeah/x-ray/next";

export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics websiteId={process.env.NEXT_PUBLIC_XRAY_ID} />
</body>
</html>
);
}
ServerConfirm the purchase where it actually happens. Pass the payment id and retries stay idempotent.
import { XRay } from "@hellyeah/x-ray/server";

const xray = new XRay(process.env.XRAY_ID);

xray.track("cv_purchase", {
distinctId: customer.id,
eventId: stripeEvent.id,
revenue: order.total,
});

It is one command.

Install it, point it at your site, and see the campaign it would launch.

curl -fsSL https://hellyeah.sh/install.sh | sh -s -- --agents -y