Marketing and sales tools
SEO, content, creative, social, email, ads, CRM, and Google tools, plus their safeguards.
These tools need a tool pack in tools.gtm.packs. Every one is also available as a rolit <area> <job> command (see Commands).
Drafting tools write files create-only under the brand's output directory, with lineage recording what each file came from. Nothing here contacts a social platform or sends an email on its own. Publishing, sending, and spending always go through an approval.
SEO and AEO
Packs: marketer, blogger. The SEO tools audit a website for search and AI-answer visibility, and help you fix what they find.
- Audit a site. Point it at a build directory (such as
dist/), a single page, or a live URL. It checks page metadata, structured data,robots.txt, the sitemap, broken links, internal linking, and whether AI crawlers can reach your content. - Find the file to fix. Each finding names the file in your project that causes it, for common frameworks such as Next.js, Astro, SvelteKit, Hugo, and plain HTML. When it can't tell, it says so rather than guessing.
- Fix and re-check. With
--fix, simple, safe fixes are applied through your approval mode and then re-checked. Edits torobots.txtand the sitemap refuse changes that would block your whole site. - Track changes.
rolit seo monitorshows what is new, resolved, or unchanged since the last run. - Use Search Console. After
/connect search-console, the agent can look at content that is losing clicks and pages competing for the same queries. - Paid data. Keyword rankings, backlinks, and AI-answer visibility are metered. They show the credit cost first and always ask.
Audits of a local directory are free and work offline. Live-site crawls obey robots.txt and are rate-limited.
rolit seo audit dist/ --fail-on fail # exits 30 if a finding reaches that level
rolit seo all dist/ # run every unattended check
rolit seo monitor # compare with the last runIn chat, /seo opens a panel to turn the tools on or off, run all checks, and review results. For CI use, see Automation.
Content and creative
Packs: marketer, blogger, creator (creative.* needs creator or marketer). The model writes, the tool validates the output and saves it. Deterministic tools never call a model.
| Tool | Tier | What it does |
|---|---|---|
research.competitor, research.audience, research.trend | Write | Saves a research brief. Every statement cites a source and fetch date, or is labeled as inference. At most 25 page fetches. |
content.brief | Write | Brief with persona, intent, outline, answer-first summary, and internal links. |
content.draft | Write | A draft of a given type (blog, landing page, newsletter, script, and more). Fabricated testimonials are refused. |
content.repurpose | Write | One artifact per channel. |
content.claims_check | Read | Marks claims supported (by the claims register or a cited source) or unsupported, and checks sponsored-content disclosure. |
content.brand_consistency | Read | Banned terms, topics to avoid, product-name casing, and tone. |
calendar.plan, calendar.export | Write | Plans slots from a cadence; exports Markdown, CSV, or iCalendar. |
creative.images, creative.thumbnails | Generate | 1 to 8 variants using the brand style. |
creative.audio | Generate | Speech, music, or sound, downloaded and indexed. |
creative.transcribe | Generate | Transcription. |
creative.captions | Write | SRT and WebVTT with at most two lines per cue. |
creative.clips | Write | An edit decision list. |
creative.render | Command | Renders with local ffmpeg. |
creative.bio_page, creative.media_kit | Write | Static, script-free HTML. Audience statistics need a source and date. |
social.adapt | Write | Per-platform variants checked against platform limits. Over-limit text is flagged, never truncated. |
social.preview | Read | Feed preview with the fold position and hidden characters. |
email.draft | Write | HTML and plain text with subject alternatives and a preheader. |
email.lint | Read | Unsubscribe and address placeholders, link and image checks, and spam phrases. |
email.domain_check | Read | SPF, DMARC, and (with a selector) DKIM. |
analytics.utm | Read | UTM tagging under your naming conventions. |
creative.render needs ffmpeg installed.
Google, ESP, and CMS handoff
Connect first with /connect or rolit connect google --scope <capability>. No command accepts a token or key.
| Tool | Tier | What it does |
|---|---|---|
google.gmail_send | Send | Sends one email per recipient from your connected Gmail. Shows recipients, subject, and body. |
google.docs_create, google.sheets_create, google.sheets_update, google.drive_upload | Write | Creates or updates Docs, Sheets, and Drive files. A Sheets update overwrites from range (default A1); the preview says so. |
google.calendar_create_event | Send | Creates an event and invites attendees. |
google.calendar_events, google.gmail_search, google.drive_search, google.drive_read, google.docs_read, google.sheets_read | External MCP | Reads. Results are marked untrusted. |
google.calendar_free_busy | Read | Busy intervals only. |
content.export | Write | Exports a calendar to Sheets, text to Docs, or a file to Drive. |
email.handoff | External MCP | Lints, then creates a draft in Klaviyo, Mailchimp, Kit, or Beehiiv. Nothing is sent. |
email.esp_send | Send | Schedules or sends a draft. The preview shows the audience and the platform's recipient count. |
content.cms_draft | External MCP | Runs pre-publish checks and creates a draft in WordPress, Ghost, Webflow, Contentful, or Sanity. |
content.cms_publish | Publish | Publishes or schedules the draft. |
Bulk marketing email never goes through a one-to-one channel. One approval covers at most tools.gtm.limits.sendBatchMax recipients (default 50, maximum 500).
Sales
Pack: sales. Works against Rolit CRM or a connected CRM (HubSpot, Salesforce, Pipedrive, Attio) through MCP. Contact emails and phone numbers are masked before the model sees them (for example j***@acme.com) and never written to workspace files.
| Tool | Tier | What it does |
|---|---|---|
crm.search, crm.get, crm.timeline, crm.opportunities, crm.insights, crm.campaigns | Read | Look up contacts, history, and aggregates. |
crm.create, crm.update, crm.capture, crm.opportunity_create, crm.stage, crm.campaign_create | Write | Change CRM records. crm.update needs the current revision, and a stale one fails with conflict. |
crm.campaign_members | Write or Bulk write | More than 25 contacts always asks. |
research.account | Write | Cited company dossier with masked CRM history. |
meeting.brief, meeting.recap | Write | Internal brief; summary, decisions, and a follow-up draft. |
sales.battlecard, sales.proposal | Write | Claims-checked from your latest research or opportunity. |
outreach.design | Write | Designs a sequence with masked samples. Sends nothing. |
outreach.send_step | Send | Sends one approved batch of one step. The preview lists recipients, suppression reasons, samples, claims, and the send window. |
outreach.triage | Write | Classifies replies and drafts responses. Never sends. |
meeting.book | Send | Creates a calendar event and invitations. |
Importing contacts requires consent_source and consent_basis columns. Replies stop later sequence steps.
Social publishing
Packs: marketer, creator. Connect accounts with rolit connect social <platform> (YouTube, TikTok, Instagram, Facebook Pages, LinkedIn pages, X, Threads, Pinterest). Tokens stay on the backend.
| Tool | Tier | What it does |
|---|---|---|
social.prepare | Read | Validates one post for one platform and checks the live quota, access state, and any fee. |
social.publish | Publish (Spend on X) | Publishes one item to one destination. Content is re-hashed, so an edit after approval is refused. |
social.metrics | Read (Spend on X) | Post and channel metrics, never summed across platforms. |
Platforms in a private review state post privately, and the preview says so. Posts on X carry a fee, so they are Spend as well as Publish.
Paid ads
Pack: marketer, with Meta, Google, or LinkedIn Ads connected through MCP.
| Tool | Tier | What it does |
|---|---|---|
ads.creative, ads.check | Write, Read | Variant matrix for a format; text, image, and policy checks. Contacts no account. |
ads.report | External MCP | Per-platform performance, never summed across platforms. |
ads.propose | Write | Evidence-backed proposal. Changes with too little data are insufficient_data. |
ads.apply | Spend | One spend-raising change. Campaigns are created paused, and enabling is a separate approval. Enforces adDailyCap. |
ads.pause | External MCP | One reduction or pause. Always asks. |
Spend increases need a daily cap (tools.gtm.adDailyCap or per brand) and are refused past it. rolit ads revert <change-id> proposes the inverse of a logged change.