clickmax-funnels
Use when the user wants to create, inspect, change, publish, deactivate, delete, or analyze a Clickmax funnel graph.
How do I install this agent skill?
npx skills add https://docs.clickmax.io --skill clickmax-funnelsIs this agent skill safe to install?
No partner audit is available yet. Read the source before installing.
What does this agent skill do?
As tools abaixo aparecem com os nomes que o MCP da Clickmax registra. Se o seu cliente de IA prefixar nomes de tool (
mcp__<servidor>__,mcp_<servidor>_, ou outro), use o nome já prefixado que aparecer na sua lista de tools.
When this applies
Use this skill when the user wants to operate a Clickmax funnel: inventory it, create/edit graph nodes, connect triggers/pages, validate, publish, deactivate, delete, or inspect analytics.
Not this skill:
- Funnel step backed by an EXTERNAL page (URL hosted outside Clickmax, e.g. the user's own site/domain) -> STAY here: compose the granular tools (see the external-page common flow below). Never use
pages_createfor an external URL — that makes an empty INTERNAL page. - Script-install help for an EXISTING external page (no graph change) ->
clickmax-external-pages - Lead/payment cohort analysis inside a funnel -> solve that with the relevant sales/CRM skill first
- Full AI-authored funnel with responsive page copy/design -> stay here and follow AI funnel creation; load
clickmax-pagesalongside it, because that skill owns everything that happens inside a single page. - ONE page, with no funnel graph involved (create, restyle, rebuild, configure, publish a single page) ->
clickmax-pages - Fine-grained visual edits after creation (moving one block or changing one mounted element) -> page editor UI.
Discovery before authoring
For AI-authored pages, read AI funnel creation and load clickmax-pages before mutation. Guided discovery is the default for missing proof, people/assets and delivery links; “use the platform default design” does not skip it. Reuse supplied facts, accept an explicit skip, and continue an already requested draft after answers without another assembly approval.
Build completion rule (mandatory)
- ONE build = ONE funnel. Call
funnels_createexactly once. If a later step fails, validation is dirty, or the graph looks wrong, FIX the existingfunnelIdin place — re-run only the specific failingfunnels_node_create/connect/funnels_abtest_variants_update— NEVER callfunnels_createagain to "start over". Retrying by re-creating leaves duplicate funnels (and if you also publish each attempt, several live funnels with the same name). If a prior attempt already left a half-built funnel, delete it withfunnels_delete(or reuse it) instead of stacking another. - Do NOT publish until the build is complete and
funnels_validateis clean and the user asked to go live — never publish an attempt you might abandon. - Creating nodes is only half the job. A funnel build is incomplete until its nodes are routed.
- After creating page nodes you must connect them with
funnels_triggers_connectand, for non-page node families, with the type-specific tool (funnels_abtest_variants_update,funnels_conditional_branches_update,funnels_traffic_source_update). - Never end the turn with page nodes whose triggers still have no
target: unrouted triggers show up as loose, disconnected nodes with no edges in the editor. - Multi-node builds should do create + connect as one continuous workflow, not in stop-and-go calls that might stop before the connect step.
- Before reporting done: call
funnels_structure_get, confirm every intended route has an edge, then callfunnels_validate; if there are leftoverdisconnectedTriggersororphanNodeIds, surface them instead of silently finishing.
Key assumptions
-
Scope = one workspace + one project; never ask for workspace id
-
Funnel lifecycle =
draft->published->unpublished_changesafter graph edits -> republish, ordisabledafter deactivate -
Graph = nodes + embedded triggers/variants/branches/outputs depending on node type
-
Trigger, branch, and variant ids are server-generated; always read them from create/structure output
-
Manual node creation is not a stopping point by itself; after
funnels_node_create, always finish the wiring step -
Funnel workflow nodes own the entry (page trigger feeding the flow) and exit (flow-membership end) of their linked flow — this is flow membership, not page routing; a workflow never forwards the visitor to a page. Do not also configure standalone flow triggers for that embedded automation
-
funnels_validate.validis not enough by itself; still inspect disconnected triggers, orphan nodes, and missing page links -
Delete tools are destructive and should be confirmed unless deletion was already explicit
-
Connections define the visual flow: the builder arranges the funnel left-to-right by following routed edges. Disconnected nodes have no graph flow, so they tend to stack in the first column.
-
One domain per funnel: the funnel serves every published node on its domain (
funnels_get.settings.domain, else the project's public domain), and every next-step redirect opens there. A page with its owndomainIdinside a funnel on another domain → the visitor leaves the page's address on the next step. Page created for / linked to a funnel → samedomainIdas the funnel (nullwhen the funnel has none) -
Read lifecycle and safety when deciding between draft edits, publish, deactivate, or destructive delete.
-
Read node types and edges when choosing node types and the correct connection tool for each edge family.
-
Read templates and starters when the user wants a standard funnel shape that maps to a sequence template.
-
Read AI funnel creation when the user wants discovery, automatic decisions, or a full assembled funnel.
-
Load the
clickmax-pagesskill whenever a build has to produce page content. It owns the page authoring pipeline, the visual system, the section spine and copy, and the form/checkout/CTA/motion contracts; nothing here restates them.
Thought process
- Classify the request: read/list/analytics vs create/build/connect vs AI-authored funnel vs publish/deactivate/delete.
- Resolve
projectIdandfunnelIdfirst. - Prefer template scaffolds for common funnel families; prefer manual graph creation only when the user describes a custom route.
- Use
funnels_structure_getas the canonical graph view before connecting, publishing, deleting, or diagnosing. - Keep graph wiring separate from page authoring: page nodes can exist before page ids are connected.
- Always finish the wiring after node creation. A build that created nodes but skipped connecting them is not done.
- Publish only after validation is clean enough and the user explicitly wants the funnel live.
Execute guide
Use the tools in dependency order when later ids come from earlier results.
- Resolve the target project with
projects_filtersor list funnels withfunnels_listwhen the project or funnel is not yet known. - Read one funnel with
funnels_get, passing thefunnelId. - Use
funnels_structure_get, passing thefunnelId, as the canonical graph view before wiring, publishing, deleting, or diagnosing. - For a standard starter, create the funnel with
funnels_create, then scaffold the graph withfunnels_sequence_create. Setobjectiveon create to the funnel's obvious goal (capture|sales|scheduling|diagnosis); it pre-configures the Analytics metrics. When you scaffold from a template, the objective + metrics are auto-derived — don't re-set them. - For a custom graph, create nodes with
funnels_node_create, then read back the generated trigger, branch, variant, or output ids before routing them. - For page nodes or other trigger-based draft nodes, connect outgoing edges with
funnels_triggers_connect. - For A/B test nodes, route each variant with
funnels_abtest_variants_update, giving every variant its OWN distinct page node inconnectedTo(clone the base page once per variant withpages_clonefirst); two variants sharing one page is not a test. - For traffic source nodes, route the output with
funnels_traffic_source_update. - For conditional nodes, route each branch with
funnels_conditional_branches_update. - When real page ids already exist, attach them to the correct page nodes with
funnels_node_connect_pagebefore publishing. - Validate with
funnels_validate, passing thefunnelId, then re-read structure if you need to confirm every intended edge is present. - Publish only when the user wants the funnel live: use
funnels_publishwith thefunnelIdand the node ids that should go live. - Page-level operations on a linked editor3 page: publish a single page on its own with
pages_publish, adjust its checkout/settings withpages_update_config, or duplicate it withpages_clone(e.g. to seed A/B variations from one built page).
Common flows:
-
AI-authored funnel = follow AI funnel creation for the funnel half and
clickmax-pagesfor the page half: guided or automatic discovery -> one brief -> one design for the whole funnel -> one draft funnel -> authored draft pages withpages_import_html_draft-> graph connections -> structure check -> validation. Never publish as part of automatic creation. -
Template funnel = use
funnels_create, thenfunnels_sequence_create, thenfunnels_validate, then publish only if the user asked for it. -
Custom funnel = use
funnels_node_create, then the correct connection tool for that node family, thenfunnels_structure_get, thenfunnels_validate. -
Go live with existing pages = use
funnels_node_connect_page, thenfunnels_validate, thenfunnels_publish. -
Page WITH a checkout =
pages_templates_list(type: ["checkout"], pickcanUse: true), thenpages_create(type: "checkout"+templateId+offerId+funnelId) so the offer is auto-bound to the checkout, thenfunnels_node_connect_pageto link it. See pages and checkout. -
Step that sells through the workspace's Whop, Hotmart, Stripe or Pagar.me account = an
external_checkoutnode (config.providerwhop|hotmart|stripe|pagarme) + a page built withexternalCheckoutof the same provider, linked withfunnels_node_connect_page. Start withexternal_checkout_accounts_list; itssetupnot null (not connected / incomplete) → relay the instructions and stop before creating the node. See pages and checkout. -
Funnel step is an EXTERNAL page (the user gives a URL hosted OUTSIDE Clickmax — their own site/domain/landing) = compose these granular tools in order (NEVER
pages_create— that makes an empty INTERNAL page):pages_create_external(projectId+externalUrl+name+type) -> returns thepageId.projectId= the FUNNEL's project; a page from another project is refused at connect time.funnels_node_create(funnelId,type: "page", aslug,pageType, andtriggers= onecontact_captured+ oneundefined) -> returns the page node id.funnels_node_connect_page(funnelId+nodeId+pageId) — linking an EXTERNAL page auto-wiresnode.config.externalUrl, so the funnel 302-redirects visitors to the URL and tracks them (no manual config needed). ONE page per node: repeat 2+3 per page (each page needs its OWN node).funnels_triggers_connectto route thecontact_capturedtrigger to the next node (e.g. the thank-you page).pages_get_external_script(pageId) -> returnsheadScript(paste in<head>); for lead-capture + redirect snippets use theclickmax-external-pagesskill references. The external page does NOT track or advance untilheadScriptis installed.
-
Checkout page WITH order bumps = set them after the checkout page exists and is linked to its node, with
checkouts_set_order_bump. Bumps ARE offers, so create them first withoffers_create/products_create. Full parameter semantics are inclickmax-pages. -
A/B test across pages = the split only tests something if each variant resolves to a DIFFERENT page. Build the base page once (
pages_createfrom a template), thenpages_cloneit once PER additional variant (each clone is a separate editable page); connect each page to its own page node (funnels_node_connect_page), create theab_testnode (funnels_node_create), and callfunnels_abtest_variants_updatewith EACH variant'sconnectedToset to a DIFFERENT page node id and thepercentagesplit across them. The variant pages may reconverge downstream (e.g. all route on to one checkout), but theirconnectedTotargets must be distinct — never point two variants at the same page. -
Funnel WITH an embedded automation (e.g. "on lead capture, run an email automation") = build the capture page AND its page route (e.g. to the thank-you page) first, then call
funnels_workflow_automation_createwithfunnelId+projectId+ the capture page node id (capturePageNodeId, fromfunnels_structure_get) + atitle(those four ONLY — there is NO next-page/connect parameter). That ONE atomic call adds the workflow node, wires the capture lead trigger into it as a PARALLEL side-effect (the trigger KEEPS routing the visitor to its existing page — nothing is disconnected), creates the flow, and links them (funnel-managed, shown in the canvas as aworkflow_inputedge). The workflow is TERMINAL: it does NOT forward the visitor onward, so never try to give it an outgoing edge or exit to "reach" the thank-you page — the visitor path continues from the page trigger's own route, in parallel. Idempotent per capture trigger: do NOT re-call it to "start over" (that stacks duplicate automations) — fix the existing one in place, orfunnels_node_deletea bad attempt. It returnsflowId+entryStepId; then add the message AFTER the entry withflows_graph_apply{op:'add', type:'send_message', input:{…}, after:{step: entryStepId}}(or aflows_send_*tool withafter: {step: entryStepId}) — the entry step is the SOURCE; never passentryStepIdas the message'starget(that wires the message back into the entry), thenflows_validate. Only fall back to building it by hand (funnels_node_createtype=workflow →funnels_workflow_flow_set→funnels_triggers_connect, in that order so the flow is linked before the trigger is wired) for a non-standard shape; never hand-set the flow'sfunnelIdor its start triggers for an embedded automation. -
Full "capture + thank-you (+ email on capture)" build: resolve the project with
projects_filters, create one funnel withfunnels_create, and scaffold its capture and thank-you nodes withfunnels_sequence_createusing thelead-magnettemplate. For authored content, create each page withpages_import_html_draft; for a ready-made template, usepages_create. Connect each returned page id to its matching node withfunnels_node_connect_page. For email, follow the embedded-automation recipe above using the capture node id fromfunnels_structure_get, then validate withfunnels_validate. Publish only if asked. -
Read templates and starters to choose between
sales,lead-magnet,webinar,tripwire,vsl-auto, andupsell-downsell. -
Read node types and edges when deciding which connection tool owns each edge.
-
Read lifecycle and safety before publishing, deactivating, or deleting.
Report
- For reads:
name | id | projectId | status | publishedAt | node count | key problems - For create/build: return funnel id, discovery mode, assumptions, visual direction, created page/node labels, validation summary, factual gaps, and next action
- For publish: report whether the funnel went live, how many nodes were published, and any remaining manual element wiring
- For deactivate: explain that the funnel is offline, not deleted
- For analytics: summarize the main period metrics instead of dumping raw payloads
- Cap long node/trigger lists and prefer graph summaries
- After a create/publish that finishes the requested work, follow
clickmax-getting-startedto close with at most one opt-in offer of the next setup task.
Warnings
- Resolve real
projectId,funnelId,nodeId,triggerId, andpageId; never invent them - Publish from fresh structure data, not stale ids captured before later edits
valid=truecan still hide non-blocking but important issues like missing pages or disconnected triggers- API-created graphs may need visual rearrangement in the builder; do not promise tidy coordinates
- Use the correct edge tool for the node family (
funnels_triggers_connect,funnels_abtest_variants_update,funnels_traffic_source_update,funnels_conditional_branches_update) funnels_node_connect_pagerules, all refused server-side: target =page/draftnode ONLY (neverab_test/conditional/workflow/traffic_source/quiz— connect THOSE to a page node instead) | page and funnel in the SAME project | one page per node, so a second call REPLACES the first and returns the swapped-out page inreplacedPageId— read it before reporting two pages as linkedfunnels_validate.nodesWithUnusedPage= node carrying a page its type never serves (legacy link); the visitor never reaches that page- "Lead doesn't reach the next page" / next step on an unexpected address → compare
pages_get.domainNameof each funnel page with the funnel domain before touching triggers; fix = align the domain (pages_updatedomainIdor the funnel's domain) + republish, only with user approval - For a
workflownode, link its flow (funnels_workflow_flow_set, resolvingflowIdviaflows_list/flows_create) and set its exit event (funnels_workflow_exit_trigger_set); a workflow without a linked flow does not fire automation and is flagged byfunnels_validate.workflowsMissingFlow - For a
workflownode, configure entry/exit from the funnel side; flow-level start events are for standalone automations, not funnel-embedded flows - Creating nodes without connecting them leaves a broken-looking graph: no routed edges and stacked nodes
- When the target project, product, or offer is ambiguous, ask the user to choose an existing entity or explicitly request a new one before mutation.
- Never fabricate factual proof or commercial facts while filling skipped discovery answers. Explicitly requested fictional testimonial samples follow the draft-only labeling and publication rules in
clickmax-pages.
Anti-patterns
- Asking for workspace id
- Using raw
funnels_getas the only planning source whenfunnels_structure_getgives the compact graph view - Connecting nodes by slug/label instead of real ids
- Creating page nodes and stopping before
funnels_triggers_connect, leaving loose unrouted nodes in the editor - Splitting create and connect across separate incomplete steps so the build stops before routing is finished
- Deleting a funnel when the user only wants it offline or paused
- Creating a BLANK page when the user wanted a checkout/sales page — start from a template (
pages_templates_list) and passofferIdso the checkout is bound, instead of leaving an empty page - Building an
ab_testand pointing every variant'sconnectedToat the SAME page (all the percentages bound to one page) — that splits traffic to one destination and tests nothing; clone the base page (pages_clone) once per variant and give each variant a distinct page node - Connecting two pages to the SAME node and reporting both as added — the second silently replaced the first (
replacedPageIdsays which); one node per page - Retrying a failed/imperfect build by calling
funnels_createagain — it leaves duplicate funnels (all published/live if you also publish each try). One build = one funnel: fix the existingfunnelIdin place, orfunnels_deletethe broken attempt before restarting; never stack a fresh funnel on top of a failed one - Creating page nodes BOTH ways in one build —
funnels_node_createby hand ANDfunnels_sequence_create— leaves the manually-created nodes orphaned and forces a messy delete/reconnect cleanup. Decide the skeleton ONCE up front: for a standard family (capture→thank-you, sales, webinar, …) usefunnels_sequence_createalone and connect pages to ITS nodes; usefunnels_node_createonly for a custom graph the templates don't cover — never both - Treating a
workflowas a step BETWEEN pages — it is a parallel side-effect with no visitor output, so giving it aflow_completed/page_viewedexit to "reach" the next page does nothing. On lead capture the SAME trigger routes the visitor to the page AND feeds the automation in parallel (funnels_workflow_automation_createkeeps the page route); never re-point the capture trigger onto the workflow to add an automation — that used to disconnect the page
Clickmax skill revision: a13590fbff81
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/docs.clickmax.io/clickmax-funnels">View clickmax-funnels on skillZs</a>