๐ŸŽ Get the FREE AI Skills Starter Guide โ€” Subscribe โ†’
BytesAgainBytesAgain
๐Ÿฆ€ ClawHub

articuler

by @hotwheelsbo

AI-powered professional networking assistant. Generate personalized cold emails and outreach playbooks to accelerate career growth and business development.

Versionv1.0.2
Downloads424
TERMINAL
clawhub install articuler

๐Ÿ“– About This Skill


name: articuler description: AI-powered professional networking assistant. Generate personalized cold emails and outreach playbooks to accelerate career growth and business development. homepage: https://www.articuler.ai metadata: {"clawdbot":{"emoji":"๐Ÿค–","requires":{"bins":["curl"]}}}

Articuler Skill

Craft the perfect cold email and build a structured outreach playbook โ€” all driven by your specific professional goal and LinkedIn profile.

What This Skill Does

1. Generate cold emails โ€” Write personalized outreach emails tailored to each contact's background 2. Build a playbook โ€” Create a structured outreach strategy with timing, talking points, and follow-up cadence

Usage

> Note: Steps 1 and 2 are required before calling any business API. Complete them in order to obtain a token.


Step 1 โ€” Email Check (Required)

Send a verification code to the user's email address.

curl --location --request POST 'https://api.articuler.ai/user/send-check' \
--header 'Content-Type: application/json' \
--data '{
  "email": "your@email.com",
  "type": 1
}'

#### Parameters

| Field | Type | Description | | ------- | ------- | --------------------------------------------- | | email | string | The user's email address | | type | integer | Verification type, use 1 for standard check |

The verification code will be sent to the user's inbox. Ask the user to provide the captcha code before proceeding to Step 2.


Step 2 โ€” Login (Required)

Log in with the user's email, captcha code, and LinkedIn profile URL. Returns a token required for all subsequent API calls.

curl --location --request POST 'https://api.articuler.ai/user/artclaw/login' \
--header 'Content-Type: application/json' \
--data '{
  "email": "your@email.com",
  "captcha": "xxxxxx",
  "linkedin_url": "https://www.linkedin.com/in/your-profile/"
}'

#### Parameters

| Field | Type | Description | | -------------- | ------ | ---------------------------------------------------------------- | | email | string | The user's email address | | captcha | string | The verification code received in the user's inbox (from Step 1) | | linkedin_url | string | The user's own LinkedIn profile URL |

#### Response

{
  "token": "xxxxxx"
}

Save the token โ€” it is required for all subsequent API calls.


Step 3 โ€” Generate Playbook (Async)

Submit a playbook generation job for the current user and a target contact. This is an async API โ€” it returns a sessionId immediately. Use Step 4 to poll for the result.

curl --location --request POST 'https://api.articuler.ai/user/artclaw/playbook' \
--header 'Content-Type: application/json' \
--data '{
    "token": "xxx",
    "target_linkedin_url": "https://www.linkedin.com/in/your-target-profile/",
    "objective": "Want to be a partner"
}'

#### Parameters

| Field | Type | Description | | --------------------- | ------ | ------------------------------------------------------- | | token | string | Auth token obtained from Step 2 | | target_linkedin_url | string | The target contact's LinkedIn profile URL | | objective | string | The goal of this outreach (e.g. "Want to be a partner") |

#### Response

{
    "code": 0,
    "msg": "",
    "data": {
        "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
        "status": "searching"
    }
}

Save the sessionId โ€” it is used to poll for the result in Step 4.


Step 4 โ€” Poll Playbook Result

Poll this endpoint repeatedly until status is "done". When done, read the playbook content from the response.

curl --location --request GET 'https://api.articuler.ai/user/artclaw/playbook/info?sess_id=xxx' \
--header 'Content-Type: application/json'

#### Parameters

| Field | Type | Description | | --------- | ------ | ------------------------------------ | | sess_id | string | The sessionId returned from Step 3 |

#### Polling Logic

  • Poll every 3 seconds
  • Stop polling when data.status === "done"
  • If status remains "searching" after 300 seconds, inform the user that generation is taking longer than expected and ask whether to keep waiting
  • #### Response โ€” In Progress

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
            "status": "searching",
            "objective": "Want to be a partner",
            "playbook": { "subtopics": null },
            "doOrNot": { "do": null, "doNot": null }
        }
    }
    

    #### Response โ€” Completed

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
            "status": "done",
            "objective": "Want to be a partner",
            "playbook": {
                "subtopics": [
                    {
                    "subtopicName": "Absence of Personal Information for Mason Brown",
                    "insights": [
                        {
                        "insight": {
                            "title": "No Verified Personal Background or Professional Activities Available for Mason Brown",
                            "content": "Despite extensive search, no confirmed profiles...",
                            "referenceLinks": []
                        }
                        }
                    ]
                    },
                    {
                    "subtopicName": "Monroe Street Partners' Strategic Differentiators",
                    "insights": [
                        {
                        "insight": {
                            "title": "Non-Traditional Private Equity Model Focused on Long-Term Value",
                            "content": "Monroe Street Partners (MSP), founded in ...",
                            "referenceLinks": [
                            "https://www.monroestreet-partners.com/aboutmsp",
                            "https://static1.squarespace.com/static/6218510..."
                            ]
                        }
                        }
                    ]
                    }
                ]
            },
            "doOrNot": {
                "do": [
                    {
                    "title": "Discuss Monroe Street Partners' Unique PE Model and Financing Needs",
                    "contentList": [
                        "Leverage intelligence about MSP being ..."
                    ]
                    },
                    {
                    "title": "Explore Synergies Between Mason's DCM Experience and MSP's Lower Middle-Market Focus",
                    "contentList": [
                        "Mason's background in Debt Capital Markets at PNC..."
                    ]
                    },
                    {
                    "title": "Address Current Private Credit Market Trends Relevant to MSP's Strategy",
                    "contentList": [
                        "The industry context shows private credit doubling..."
                    ]
                    }
                ],
                "doNot": [
                    {
                    "title": "Avoid Pushing a Generic \"Off-the-Shelf\" Lending Solution",
                    "contentList": [
                        "Monroe Street Partners explicitly differentiates ..."
                    ]
                    },
                    {
                    "title": "Refrain from Unsubstantiated Assumptions about Mason's Booth Studies or Long-Term Career Plans",
                    "contentList": [
                        "While Mason is attending Booth, his specific degree..."
                    ]
                    },
                    {
                    "title": "Do Not Undervalue Mason's Role as a Summer Associate",
                    "contentList": [
                        "Although a Private Equity Summer Associate role is ..."
                    ]
                    }
                ]
            }
        }
    }
    

    Present the playbook.subtopics, doOrNot.do, and doOrNot.doNot to the user in a readable format.


    Step 5 โ€” Generate Cold Email (Async)

    Submit a cold email generation job. Same async pattern as Steps 3โ€“4: returns a sessionId immediately, use Step 6 to poll for the result.

    curl --location --request POST 'https://api.articuler.ai/user/artclaw/coldemail' \
    --header 'Content-Type: application/json' \
    --data '{
        "token": "xxx",
        "target_linkedin_url": "https://www.linkedin.com/in/your-target-profile/",
        "objective": "Want to be a partner"
    }'
    

    #### Parameters

    | Field | Type | Description | | --------------------- | ------ | --------------------------------------------------------------------- | | token | string | Auth token obtained from Step 2 | | target_linkedin_url | string | The target contact's LinkedIn profile URL | | objective | string | The goal of this cold email (e.g. "Explore investment opportunities") |

    #### Response

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "searching"
        }
    }
    

    Save the sessionId โ€” it is used to poll for the result in Step 6.


    Step 6 โ€” Poll Cold Email Result

    Poll this endpoint repeatedly until status is "done". When done, read the email content from the response.

    curl --location --request GET 'https://api.articuler.ai/user/artclaw/coldemail?sess_id=xxx' \
    --header 'Content-Type: application/json'
    

    #### Parameters

    | Field | Type | Description | | --------- | ------ | ------------------------------------ | | sess_id | string | The sessionId returned from Step 5 |

    #### Polling Logic

  • Poll every 3 seconds
  • Stop polling when data.status === "done"
  • If status remains "searching" after 300 seconds, inform the user that generation is taking longer than expected and ask whether to keep waiting
  • #### Response โ€” In Progress

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "searching",
            "objective": "Want to be a partner",
            "subject": "",
            "coldEmail": ""
        }
    }
    

    #### Response โ€” Completed

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "done",
            "objective": "Want to be a partner",
            "subject": "Exploring a potential partnership",
            "coldEmail": "Hi [Name],\n\nI came across your work on..."
        }
    }
    

    Always show the subject and coldEmail to the user for review before sending. Never auto-send.


    MCP Server

    Articuler provides an MCP server as an alternative to the REST API above.

    Endpoint: https://www.articuler.ai/mcp

    | Tool | Description | | --------------------- | ------------------------------------------------------------------------------------ | | generate_cold_email | Generate a personalized cold email given two LinkedIn profiles and an objective | | generate_playbook | Generate a multi-step outreach playbook given two LinkedIn profiles and an objective |


    Intent Detection

    Detect the user's networking intent from their objective to set the right tone and structure:

    | Intent | Keywords | | ------------- | -------------------------- | | fundraising | ่ž่ต„ใ€ๆŠ•่ต„ไบบใ€VCใ€pre-seed | | hiring | ๆ‹›่˜ใ€ๅˆไผ™ไบบใ€CTOใ€ๅ›ข้˜Ÿ | | partnership | ๅˆไฝœใ€BDใ€ๆธ ้“ใ€่ต„ๆบ็ฝฎๆข | | research | ไบ†่งฃ่กŒไธšใ€่ฐƒ็ ”ใ€่ถ‹ๅŠฟ | | sales | ๅฎขๆˆทใ€ไผไธš้‡‡่ดญใ€demo |


    Tips

  • Complete Steps 1 and 2 before calling any business API
  • For cold emails, always show the draft to the user for review โ€” never auto-send
  • Playbooks work best when both LinkedIn profiles are detailed and up to date
  • The more specific the objective, the more targeted the output
  • Links

  • Articuler: https://www.articuler.ai
  • ClawhHub Skills Hub: https://clawhub.ai/skills
  • ๐Ÿ’ก Examples

    > Note: Steps 1 and 2 are required before calling any business API. Complete them in order to obtain a token.


    Step 1 โ€” Email Check (Required)

    Send a verification code to the user's email address.

    curl --location --request POST 'https://api.articuler.ai/user/send-check' \
    --header 'Content-Type: application/json' \
    --data '{
      "email": "your@email.com",
      "type": 1
    }'
    

    #### Parameters

    | Field | Type | Description | | ------- | ------- | --------------------------------------------- | | email | string | The user's email address | | type | integer | Verification type, use 1 for standard check |

    The verification code will be sent to the user's inbox. Ask the user to provide the captcha code before proceeding to Step 2.


    Step 2 โ€” Login (Required)

    Log in with the user's email, captcha code, and LinkedIn profile URL. Returns a token required for all subsequent API calls.

    curl --location --request POST 'https://api.articuler.ai/user/artclaw/login' \
    --header 'Content-Type: application/json' \
    --data '{
      "email": "your@email.com",
      "captcha": "xxxxxx",
      "linkedin_url": "https://www.linkedin.com/in/your-profile/"
    }'
    

    #### Parameters

    | Field | Type | Description | | -------------- | ------ | ---------------------------------------------------------------- | | email | string | The user's email address | | captcha | string | The verification code received in the user's inbox (from Step 1) | | linkedin_url | string | The user's own LinkedIn profile URL |

    #### Response

    {
      "token": "xxxxxx"
    }
    

    Save the token โ€” it is required for all subsequent API calls.


    Step 3 โ€” Generate Playbook (Async)

    Submit a playbook generation job for the current user and a target contact. This is an async API โ€” it returns a sessionId immediately. Use Step 4 to poll for the result.

    curl --location --request POST 'https://api.articuler.ai/user/artclaw/playbook' \
    --header 'Content-Type: application/json' \
    --data '{
        "token": "xxx",
        "target_linkedin_url": "https://www.linkedin.com/in/your-target-profile/",
        "objective": "Want to be a partner"
    }'
    

    #### Parameters

    | Field | Type | Description | | --------------------- | ------ | ------------------------------------------------------- | | token | string | Auth token obtained from Step 2 | | target_linkedin_url | string | The target contact's LinkedIn profile URL | | objective | string | The goal of this outreach (e.g. "Want to be a partner") |

    #### Response

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
            "status": "searching"
        }
    }
    

    Save the sessionId โ€” it is used to poll for the result in Step 4.


    Step 4 โ€” Poll Playbook Result

    Poll this endpoint repeatedly until status is "done". When done, read the playbook content from the response.

    curl --location --request GET 'https://api.articuler.ai/user/artclaw/playbook/info?sess_id=xxx' \
    --header 'Content-Type: application/json'
    

    #### Parameters

    | Field | Type | Description | | --------- | ------ | ------------------------------------ | | sess_id | string | The sessionId returned from Step 3 |

    #### Polling Logic

  • Poll every 3 seconds
  • Stop polling when data.status === "done"
  • If status remains "searching" after 300 seconds, inform the user that generation is taking longer than expected and ask whether to keep waiting
  • #### Response โ€” In Progress

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
            "status": "searching",
            "objective": "Want to be a partner",
            "playbook": { "subtopics": null },
            "doOrNot": { "do": null, "doNot": null }
        }
    }
    

    #### Response โ€” Completed

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "31ee76d4-ab7e-4d5f-8196-f4507ef779b9",
            "status": "done",
            "objective": "Want to be a partner",
            "playbook": {
                "subtopics": [
                    {
                    "subtopicName": "Absence of Personal Information for Mason Brown",
                    "insights": [
                        {
                        "insight": {
                            "title": "No Verified Personal Background or Professional Activities Available for Mason Brown",
                            "content": "Despite extensive search, no confirmed profiles...",
                            "referenceLinks": []
                        }
                        }
                    ]
                    },
                    {
                    "subtopicName": "Monroe Street Partners' Strategic Differentiators",
                    "insights": [
                        {
                        "insight": {
                            "title": "Non-Traditional Private Equity Model Focused on Long-Term Value",
                            "content": "Monroe Street Partners (MSP), founded in ...",
                            "referenceLinks": [
                            "https://www.monroestreet-partners.com/aboutmsp",
                            "https://static1.squarespace.com/static/6218510..."
                            ]
                        }
                        }
                    ]
                    }
                ]
            },
            "doOrNot": {
                "do": [
                    {
                    "title": "Discuss Monroe Street Partners' Unique PE Model and Financing Needs",
                    "contentList": [
                        "Leverage intelligence about MSP being ..."
                    ]
                    },
                    {
                    "title": "Explore Synergies Between Mason's DCM Experience and MSP's Lower Middle-Market Focus",
                    "contentList": [
                        "Mason's background in Debt Capital Markets at PNC..."
                    ]
                    },
                    {
                    "title": "Address Current Private Credit Market Trends Relevant to MSP's Strategy",
                    "contentList": [
                        "The industry context shows private credit doubling..."
                    ]
                    }
                ],
                "doNot": [
                    {
                    "title": "Avoid Pushing a Generic \"Off-the-Shelf\" Lending Solution",
                    "contentList": [
                        "Monroe Street Partners explicitly differentiates ..."
                    ]
                    },
                    {
                    "title": "Refrain from Unsubstantiated Assumptions about Mason's Booth Studies or Long-Term Career Plans",
                    "contentList": [
                        "While Mason is attending Booth, his specific degree..."
                    ]
                    },
                    {
                    "title": "Do Not Undervalue Mason's Role as a Summer Associate",
                    "contentList": [
                        "Although a Private Equity Summer Associate role is ..."
                    ]
                    }
                ]
            }
        }
    }
    

    Present the playbook.subtopics, doOrNot.do, and doOrNot.doNot to the user in a readable format.


    Step 5 โ€” Generate Cold Email (Async)

    Submit a cold email generation job. Same async pattern as Steps 3โ€“4: returns a sessionId immediately, use Step 6 to poll for the result.

    curl --location --request POST 'https://api.articuler.ai/user/artclaw/coldemail' \
    --header 'Content-Type: application/json' \
    --data '{
        "token": "xxx",
        "target_linkedin_url": "https://www.linkedin.com/in/your-target-profile/",
        "objective": "Want to be a partner"
    }'
    

    #### Parameters

    | Field | Type | Description | | --------------------- | ------ | --------------------------------------------------------------------- | | token | string | Auth token obtained from Step 2 | | target_linkedin_url | string | The target contact's LinkedIn profile URL | | objective | string | The goal of this cold email (e.g. "Explore investment opportunities") |

    #### Response

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "searching"
        }
    }
    

    Save the sessionId โ€” it is used to poll for the result in Step 6.


    Step 6 โ€” Poll Cold Email Result

    Poll this endpoint repeatedly until status is "done". When done, read the email content from the response.

    curl --location --request GET 'https://api.articuler.ai/user/artclaw/coldemail?sess_id=xxx' \
    --header 'Content-Type: application/json'
    

    #### Parameters

    | Field | Type | Description | | --------- | ------ | ------------------------------------ | | sess_id | string | The sessionId returned from Step 5 |

    #### Polling Logic

  • Poll every 3 seconds
  • Stop polling when data.status === "done"
  • If status remains "searching" after 300 seconds, inform the user that generation is taking longer than expected and ask whether to keep waiting
  • #### Response โ€” In Progress

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "searching",
            "objective": "Want to be a partner",
            "subject": "",
            "coldEmail": ""
        }
    }
    

    #### Response โ€” Completed

    {
        "code": 0,
        "msg": "",
        "data": {
            "sessionId": "2c6ae07f-bde7-4f6a-8cc6-944a99d742fd",
            "status": "done",
            "objective": "Want to be a partner",
            "subject": "Exploring a potential partnership",
            "coldEmail": "Hi [Name],\n\nI came across your work on..."
        }
    }
    

    Always show the subject and coldEmail to the user for review before sending. Never auto-send.


    ๐Ÿ“‹ Tips & Best Practices

  • Complete Steps 1 and 2 before calling any business API
  • For cold emails, always show the draft to the user for review โ€” never auto-send
  • Playbooks work best when both LinkedIn profiles are detailed and up to date
  • The more specific the objective, the more targeted the output