npx skills add ...
npx skills add eliasstravik/gtm-skills --skill gtm-icp
Triggers when a user asks to create, update, delete, or check an ideal customer profile, or ICP, in a GTM workspace, with phrasings like "create an ICP for lean B2B SaaS", "our ICP should require HubSpot", "delete the SaaS ICP", or "check the ICPs". Owns the ICP files and their 13 company criteria. Not for the workspace, its members, or the organization's own facts (gtm-workspace), personas (gtm-persona), checking a given company against an ICP (gtm-qualify-prospects), or workflows that score accounts on a schedule (gtm-workflow).
npx skills add eliasstravik/gtm-skills --skill gtm-icp
Apply this skill when a request creates, changes, removes, or checks an ICP in a GTM workspace.
This skill owns icps/<slug>/ICP.md in the workspace found by the contract. An ICP records desired or accepted criteria for target accounts in the 13 fields of company data, never facts about the organization itself.
Criteria from the user or sources the user supplies; the existing ICPs, for the near-duplicate check; the workflows that read this ICP (readIcp("<slug>") in workflows/workflows/*.ts), for the workflow notice.
The user approves every change through the host's write permission; the agent proposes, edits, commits, and reports.
The first gtm skill used in a conversation checks once for a newer release, as updates says. Talk by the six rules in interaction; reproduce the dialogues.
| Job | Do |
|---|---|
| Create | When an existing ICP overlaps the request, offer Update first. Otherwise copy templates/ICP.md to icps/<slug>/ICP.md, fill only the criteria the user gave, leave the rest Unknown, and say the rest stays Unknown because criteria are never borrowed from the company record. Omit ## Company signals and ## Disqualifiers when empty. |
| Update | Change the named criteria, signals, or disqualifiers. When a workflow reads this ICP, say its next run uses the change (a deployed copy once this push has deployed) and rows it already scored keep their scores until they are rescored. |
| Delete | When several ICPs match, ask which; say whether a workflow reads it: that workflow's runs fail until it names another ICP. Remove icps/<slug>/; close with what disappeared and that it stays in the workspace's history. |
| Doctor | Flag an ICP with no account-matchable criterion (every field Unknown), a placeholder husk, a missing H1, or a folder name that is not its slug; offer the fixes as options; rewrite what the user accepts. Unknown in Description and Domain is normal. |
Every save: one sentence on what will change, pull first when origin/main exists, edit through the host's write path, commit on main with a plain-language message, push when a remote exists, verify the commit (and that it reached origin/main when a remote exists), close with what was created, changed, or deleted.
icps/<slug>/ICP.md in the template's shape, each change a commit on main.
Requires the gtm-workspace skill installed alongside this one; when ../gtm-workspace/SKILL.md is missing, say: install it the same way this skill was installed, with npx skills add eliasstravik/gtm-skills -s gtm-workspace -y (add -g when this skill lives in the global skills directory), then retry. A criterion the user did not state stays Unknown; nothing is derived from ORG.md.
interactions dialogues; templates/ICP.md; from gtm-workspace: interaction, contract, company data.