
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 -yInstalls the CLI and the agent skills. No Node required. Windows runs the same install through PowerShell.
Read the docsThe 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.comA bare URL researches the business and builds the brand profile.
hellyeah creative generate textWrites ad copy anchored to that profile.
hellyeah campaign launch --dry-runPrices the campaign and shows the plan before it spends.
hellyeah tracker installWires X-Ray into your app so the click ties to revenue.
hellyeah doctorOne 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-raynpm install @hellyeah/x-rayimport { 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>
);
}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