@nightowlsdev/agent-marketer
Pre-built agentsProduct-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-marketerKey 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
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