ICP Architect

Build a deep ideal customer profile from product description and market signals with firmographics, pain points, buying triggers, and TAM estimate.

Build a deep ideal customer profile from product description and market signals with firmographics, pain points, buying triggers, and TAM estimate. A bad ICP burns six figures of GTM spend. This agent compresses 3 weeks of customer research into one structured artifact you can defend to investors.

This is the whole blueprint, nothing held back: the model, the tools, the exact prompt, the source on disk, and the setup. Everything you need to run ICP Architect yourself is on this page, and it deploys in an afternoon.

What it does

ICP Architect handles the work end to end:

  • Research market signals and competitive landscape automatically
  • Cluster early customers by traits, outcomes, and pain points
  • Generate a primary ICP plus up to 2 adjacent segments
  • Score each segment on fit, urgency, willingness-to-pay, and accessibility

The anatomy

An agent is a composition, not a prompt: a model, the tools it is allowed to call, the integrations that give those tools reach, and the rules that keep it honest. Here is ICP Architect on one card.

ICP Architectblueprint
Model
claude-sonnet-4-6
Tools
research_marketanalyze_buyersgenerate_icpscore_segment
Integrations
Exa.aiZod
Guardrails
refuse to produce an icp without at least 5 buyer data points.; express firmographics as ranges, not point estimates

The instructions

Every run is governed by this prompt. It is short on purpose: enough to make ICP Architect reliable, not so much that it can misread itself. Copy it as a starting point for any agent you build.

ICP Architect
You are an ICP (Ideal Customer Profile) architect. You help founders move from vague "everyone with a website" targeting to a sharp, defensible ICP. WORKFLOW: 1. Call research_market to gather signals on the product category. 2. Call analyze_buyers on early customers, churned users, and lost deals. 3. Synthesize into 1 primary ICP and up to 2 adjacent segments via generate_icp. 4. Score each segment with score_segment on (fit, urgency, willingness-to-pay, accessibility). RULES: - Refuse to produce an ICP without at least 5 buyer data points. - Express firmographics as ranges, not point estimates. - Always name 3 buying triggers and 3 disqualifying signals. - Pitch the ICP in one sentence the founder could repeat verbatim on a call.

The source, on disk

Three files carry the whole agent: the definition with its tools, the environment it expects, and the setup. Walk them.

icp-architect/icp-architect.ts1.7 KB
1import { agent, tool } from "@agent-sdk"
2import Exa from "exa-js"
3import { z } from "zod"
4
5const researchMarketInput = z.object({
6 category: z.string(),
7 competitors: z.array(z.string()).default([]),
8})
9
10const analyzeBuyersInput = z.object({
11 buyers: z.array(z.object({
12 company: z.string(),
13 role: z.string(),
14 outcome: z.enum(["won", "lost", "churned"]),
15 notes: z.string().optional(),
16 })).min(5),
17})
18
19export default agent({
20 model: "claude-sonnet-4-6",
21 permissionMode: "bypassPermissions",
22 maxTurns: 20,
23 systemPrompt: `...`, // see System Prompt section above
24 tools: {
25 research_market: tool({
26 description: "Pull market signals (size, growth, comp landscape)",
27 inputSchema: researchMarketInput,
28 execute: async ({ category, competitors }) => {
29 const exa = new Exa(process.env.EXA_API_KEY)
30 return exa.search(`${category} market size buyer profile`, { numResults: 10 })
31 },
32 }),
33 analyze_buyers: tool({
34 description: "Cluster buyers by shared traits and outcomes",
35 inputSchema: analyzeBuyersInput,
36 execute: async ({ buyers }) => {
37 // returns { clusters, dominantTraits, riskFlags }
38 },
39 }),
40 generate_icp: tool({
41 description: "Synthesize signals into a structured ICP card",
42 inputSchema: z.object({ signals: z.any() }),
43 execute: async ({ signals }) => {
44 // returns { firmographics, pains, triggers, disqualifiers, oneLiner }
45 },
46 }),
47 score_segment: tool({
48 description: "Score a segment on fit/urgency/wtp/accessibility (0-10)",
49 inputSchema: z.object({ segment: z.any() }),
50 execute: async ({ segment }) => {
51 // returns { fit, urgency, wtp, accessibility, total }
52 },
53 }),
54 },
55})

The business case

If you run an agency, ICP Architect is also a product. It sells into early-stage b2b, gtm consultants, founder-led sales, and the numbers work at very small scale.

$2,200

setup you can charge

$350/mo

monthly retainer

4

jobs off your plate

Ship it

The whole install is a handful of commands and the keys from the env file. Run the list, then point ICP Architect at real work.

Deploy checklist

0 of 5

That is the entire blueprint: one model, 4 tools, and a prompt. Built by hand it costs you an afternoon. Inside Ultron it costs you a sentence, because you can build this exact agent in the workforce and watch it run before you commit to anything.

Build ICP Architect in Ultron

1
Describe what you want

Start from this blueprint or your own words. Ultron reads the intent and picks the tools.

2
It builds the agent

The model, the tools, the prompt, the console. Assembled in front of you, nothing to wire.

3
Watch it run

Test it live in the chat, then put it to work. You review what it does, it does the rest.

Keep reading