Skip to content
Night Owls.dev
Jump to a page

@nightowlsdev/agent-marketer

Pre-built agents

Product-in-market analysis, positioning + ICP, evidence-based competitor profiling, channels as prioritized bets, that asks for what it lacks instead of inventing it.

What it does

@nightowlsdev/agent-marketer ships the marketing specialist: positioning before tactics ('instead of what?'), ICPs that name who it is NOT for, competitor profiles that distinguish 'their site claims X' from 'users report X' from 'I infer X', and launch strategy as prioritized bets with a cheap first test each. Its evidence boundary is stated every time: webSearch is OPTIONAL, without it the persona works strictly from the materials you provide and says so up front; fabricated numbers are banned. `createMarketingCrew` composes the marketer with a researcher delegate as a closure-validated bundle (`requires` + `requiresSkills` declarations ride the bundle store). Curated skills.sh refs (pinned): the most-installed marketing corpus on skills.sh, a default-granted core (product-marketing, competitor-profiling, customer-research, marketing-psychology, content-strategy, marketing-plan, Lenny positioning-messaging, Anthropic brand-voice-enforcement) and a manifest-only growth set (seo-audit, ai-seo, programmatic-seo, ad-creative, cold-email, launch).

Install

pnpm add @nightowlsdev/agent-marketer

Key exports

  • createMarketer ({ tools?: { webSearch? } }, optional, degrades honestly)
  • createMarketingCrew (BundleDef: marketer + a declared researcher delegate)
  • manifest / MARKETER_CURATED_SKILLS (the Corey Haines corpus, core + growth sets, pinned)

Usage

agent-marketer.ts
import { createMarketer, createMarketingCrew } from "@nightowlsdev/agent-marketer";
import { createResearcher } from "@nightowlsdev/agent-researcher";
import { mergeBundle } from "@nightowlsdev/core";

// Solo: webSearch OPTIONAL, without it the persona works strictly from supplied materials and says so.
const marketer = createMarketer();

// Or the composed crew: the bundle DECLARES a researcher dependency; the host provides the agent.
const researcher = createResearcher({ tools: { webSearch: myWebSearchTool } });
const crew = createMarketingCrew({ researcherSlug: "researcher" });
const config = mergeBundle({ ...baseConfig, agents: [...baseConfig.agents, researcher] }, crew);
// baseConfig needs dynamicSkills + a tier config, the full journey: /docs/adopt-prebuilt-agents