Cofounder CLI

Communicate and Sell

Reach customers: company email and phone, CRM, ads, social, research, and managed Stripe objects.

Running a company means reaching people. This page covers the outbound and inbound channels plus the growth machinery around them.

Email and phone

Give the company an inbox and a phone number, then put them to work:

MCPCLIAPI
email_provisioncofounder email provision --local-part <name>POST /cofounder-cli/v1/company/email
email_deprovisioncofounder email deprovisionDELETE /cofounder-cli/v1/company/email
email_messages_sendcofounder email send <inbox-id>POST /cofounder-cli/v1/company/email/messages
phone_provisioncofounder phone provisionPOST /cofounder-cli/v1/company/phone
phone_deprovisioncofounder phone deprovisionDELETE /cofounder-cli/v1/company/phone
phone_messages_sendcofounder phone message send --to <e164>POST /cofounder-cli/v1/company/phone/messages
phone_messages_listcofounder phone messages listGET /cofounder-cli/v1/company/phone/messages

Email covers the rest: reading and replying, drafts, campaigns to CRM contacts, your own mail domain, and email from your app.

phone provision buys a real number, billed as a recurring cost, or returns the one the company already has. phone deprovision releases it and deletes its message history; a later provision gets a different number. cofounder phone messages send --to-number <e164> --body <text> is the same send with API-style flags.

CRM

There's a CRM built in with accounts, contacts, deals, and an activity log. CRM covers managing records, enrichment, calendar sync, and finding prospects. MCP clients can also open the CRM as a board. See MCP Beyond Tools.

Ads, analytics, and research

  • Ads: paid campaigns from account setup to results are in Ads.
  • Analytics: ask questions of the marketing data with cofounder analytics query / analytics_query.
  • Website traffic: cofounder analytics website-traffic get --range 30d (analytics_website_traffic_get) reads visits from the company's PostHog project; --purpose product reads the product app instead of the marketing site. cofounder analytics website-pixel get --group-by source (analytics_website_pixel_get) counts events or unique visitors from the pixel in the company's generated websites, filtered or split by page, source, country, device, and more.
  • Research: quick web searches and longer research jobs are in Research.

Social

Connect the company's social accounts once, then take each post through prepare and publish (or schedule).

Accounts

MCPCLIAPI
social_connectcofounder social connectPOST /cofounder-cli/v1/company/social/connect
social_accounts_connectcofounder company social connect <platform> --waitPOST /cofounder-cli/v1/company/social/connect/{platform}
social_accountscofounder social accountsGET /cofounder-cli/v1/company/social/accounts
social_posts_options_getcofounder social posts options <account>GET /cofounder-cli/v1/company/social/resources/{resource_id}/post-options
social_accounts_set_destinationcofounder social accounts set-destinationPUT /cofounder-cli/v1/company/social/accounts/{resource_id}/destination
social_accounts_updatecofounder social accounts update <account> --default / --no-defaultPUT /cofounder-cli/v1/company/social/accounts/{resource_id}
social_accounts_disconnectcofounder social accounts disconnect --resource <id> (or --platform <platform> for that platform's default)DELETE /cofounder-cli/v1/company/social/accounts

Run social connect once to set up the company's social connection, then company social connect <platform> --wait to connect an account such as linkedin or tiktok: it opens the link in your browser and waits until the account is usable (--resource <id> reconnects one you already have; cofounder social accounts connect --platform <platform> just prints the link). posts options shows what an account supports: settings, content and media limits, and where it can post. Each platform's default account is used when a command leaves the account out. accounts disconnect refuses while posts are still pending or an ads account is linked; --force disconnects anyway. accounts set-destination chooses a provider destination for one social Resource; use options first to see the available choices. If an account cannot be projected to its company Resource, social accounts reports it under omitted with the reason and Resource id when known.

Posts

MCPCLIAPI
social_posts_listcofounder social postsGET /cofounder-cli/v1/company/social/posts
social_posts_getcofounder social posts get <post>GET /cofounder-cli/v1/company/social/posts/{post_id}
social_posts_preparecofounder social posts prepare --account <account> --content <text>POST /cofounder-cli/v1/company/social/posts/prepare
social_posts_checkcofounder social posts check <post> --revision-id <revision>POST /cofounder-cli/v1/company/social/posts/check
social_posts_publishcofounder social posts publish <post> --revision-id <revision>POST /cofounder-cli/v1/company/social/posts/publish
social_posts_schedulecofounder social posts schedule <post> --revision-id <revision>POST /cofounder-cli/v1/company/social/posts/schedule
social_posts_revisecofounder social posts revise <post> --revision-id <revision> --idempotency-key <key>POST /cofounder-cli/v1/company/social/posts/revise
social_posts_cancelcofounder social posts cancel <post> --revision-id <revision> --idempotency-key <key>POST /cofounder-cli/v1/company/social/posts/cancel
social_posts_unpublishcofounder social posts unpublish <post> --revision-id <revision> --idempotency-key <key> --confirmPOST /cofounder-cli/v1/company/social/posts/unpublish
social_posts_retrycofounder social posts retry <post> --revision-id <revision> --idempotency-key <key>POST /cofounder-cli/v1/company/social/posts/retry
social_searchcofounder social search --platform <platform> --query <text> --resource-id <id> (Reddit: --subreddit <name> without --query reads the subreddit feed)GET /cofounder-cli/v1/company/social/search
social_queue_getcofounder social queue get <resource-id> [--count <1–100>]GET /cofounder-cli/v1/company/social/queue
social_queue_setcofounder social queue set <resource-id> --timezone <iana-zone> --slots <json>PUT /cofounder-cli/v1/company/social/queue

social posts lists posts, and social posts get reads one post's content and delivery state. prepare saves a draft for one account and returns a post ID and revision ID. Use that revision_id for check, publish, schedule, revise, and control operations. Use social accounts update <account> --default or --no-default to set or clear the platform default. Publish delivers now. For a specific time, prepare with --at <timestamp> --timezone <zone>, then call schedule. To use Zernio's profile-wide queue, inspect its slots with social queue get or request advisory upcoming times with social queue get --count 20; use social queue set to change the schedule. Prepare with --next-slot to pin a preview time in the draft. That preview reserves nothing; Zernio chooses the actual queue slot when schedule is submitted. Queue slots are shared by all social accounts in that Zernio profile. The delivery receipt reports the actual assigned time when Zernio returns it; the prepared preview is never presented as the confirmed delivery time. check tells you whether a draft is ready to go, and social posts shows drafts and what happened to each post. Use revise with the active revision ID to replace draft content or update an eligible scheduled post; publish or schedule with the newly returned revision ID. cancel stops an eligible scheduled delivery, while retry retries a definitively rejected dispatch or an eligible failed provider post. unpublish requires --confirm and works only on platforms that support removing a live post.

Provider retries are rejected for X posts; after a failed X delivery, review the provider state and resubmit through a fresh approval. Unpublish is rejected before dispatch on unsupported platforms such as Instagram and TikTok.

Inbox

MCPCLIAPI
social_inbox_listcofounder social inbox listGET /cofounder-cli/v1/company/social/inbox
social_platform_posts_getcofounder social platform-posts get --platform x --post-id <native-id-or-url> --resource-id <social-account-resource-id>GET /cofounder-cli/v1/company/social/post
social_inbox_replycofounder social inbox reply --item-id <id> --item-type <type> --resource-id <id> --content <text>POST /cofounder-cli/v1/company/social/inbox/{item_id}/reply
social_inbox_moderatecofounder social inbox moderatePOST /cofounder-cli/v1/company/social/inbox/{item_id}/moderate
social_dm_sendcofounder social dm sendPOST /cofounder-cli/v1/company/social/inbox/dm

The inbox exposes six views: needs_attention, commented_posts, post_comments, conversations, messages, and reviews. Use a social Resource to scope account-specific views; messages also requires its conversation_id. Results include which inbox capabilities are available and why other sources may be missing from a partial result. Replies go out right away; replying to a comment also needs its --post-id. Pass --idempotency-key on a DM or Google Business review reply when you need Zernio's 24-hour replay window for the same key and request body; the CLI leaves it unset by default because review support varies by provider. Facebook reviews work without a key, and a supplied key is rejected when the connected provider does not support it. Comment replies have no documented replay guarantee. Moderation requires explicit confirmed: true; its optional key is forwarded, but Zernio does not document deduplication for moderation, so it is not safe to assume retries happen only once.

Use social dm send to start a new direct-message conversation with a recipient who has not messaged the account yet - for example an X DM to --participant-username <handle> or --participant-id <numeric id> - through a social Resource. If a conversation with that recipient already exists, the provider appends to it. The response's item_id is the conversation id to pass to social inbox reply or the messages view.

Campaigns

MCPCLIAPI
social_campaigns_createcofounder social campaigns create --name <name> --starts-on <date> --ends-on <date> --placements <json>POST /cofounder-cli/v1/company/social/campaigns
social_campaigns_listcofounder social campaigns listGET /cofounder-cli/v1/company/social/campaigns
social_campaigns_getcofounder social campaigns get --campaign-id <id>GET /cofounder-cli/v1/company/social/campaigns/{campaign_id}
social_campaigns_attachcofounder social campaigns attach --campaign-id <id> --placement-id <id> --post-id <post-id> --revision-id <revision-id>POST /cofounder-cli/v1/company/social/campaigns/{campaign_id}/attach

A campaign is a dated plan of posts across accounts; creating one doesn't write or schedule anything. attach links a prepared post and its active revision_id to one planned slot, and publishing it is still a separate step. To swap in a newer revision, pass the one currently linked as --replace-revision-id. get shows each slot's linked post and whether it has changed since you linked it.

Brand and design

MCPCLIAPI
company_brand_getcofounder company brand getGET /cofounder-cli/v1/company/brand
design_extractcofounder design extract <website-url>POST /cofounder-cli/v1/design/extract
design_extractions_getcofounder design extractions get --job-id <id>GET /cofounder-cli/v1/design/extractions/{job_id}

brand get reports the brand kit state and lists the company's brand files. design extract pulls colors, type, and components from a live site and saves them to the Library under design/website-design-systems/. Extraction takes a minute or more, so it starts as a job and returns at once; in a terminal, or with -o, the CLI waits for it to finish (--wait forces this under --json, --no-wait skips it). design extractions get shows a job's status and, once it finishes, the extracted system.

Writing

MCPCLIAPI
writing_checkcofounder writing check --text <text>POST /cofounder-cli/v1/writing/check

writing check flags the tells that make prose read as machine-written, one paragraph at a time: dashes, stock vocabulary such as "delve" or "tapestry", "not X but Y" relabeling, decorative lists of three, stacked hedges, setup questions, restating closers, signposting, puffery, and generic claims. Each flag names the paragraph and says how to fix it; passed is true when nothing is flagged. Pass a file with --text "$(cat draft.md)". Code, headings, tables, and HTML are skipped, a list counts as one paragraph, and a call reads up to 60 paragraphs. The check is free and takes a few seconds. To have an agent rewrite a draft until it passes, start the writing-improvement playbook.

Payments

To take payments, cofounder payments setup --mode test sets the company up with a Stripe test account; products, prices, payment links, invoices, and going live are in Payments.

Next steps

To see what your company's agents have been doing, go to Watch It Run.