streamable-httpupdated 18d ago
Claude Code skills + a small helper + cron wrappers for the aictrl outreach pipeline: one unified CRM, grade-driven, three daily crons (LinkedIn connect, accept-tracker, email sequence), all approve-before-send except the connects. Shared so the team can run the same playbook.
What can you do with aictrl?
aictrl Team Skills β Marketing & Sales
Claude Code skills + a small helper + cron wrappers for the aictrl outreach pipeline: one unified CRM, grade-driven, three daily crons (LinkedIn connect, accept-tracker, email sequence), all approve-before-send except the connects. Shared so the team can run the same playbook.
See
docs/process-flow.mdfor the end-to-end flow diagram (renders on GitHub).
The model (read this first)
- One CRM = the
Logtab of the shared sheet. One row per contact β Apollo-sourced (auto-synced) and hand-picked alike. Column blocks:- AβQ Apollo state (synced by
aictrl-crm-refresh; never hand-edit) - O
Our Grade(A/B/C/D) β the dial that steers every cron (set byaictrl-crm-qualifyor by hand) - RβV LinkedIn outreach Β· WβZ LinkedIn accept-tracker
- AAβAF OUR email sequence:
Email Status Β· Email Step Β· Email Last Sent Β· Email Next Due Β· Email Reply? Β· Why/Hook
- AβQ Apollo state (synced by
- Grade A = priority. Connect cron does grade-A leads first (then the Apollo backlog); our email cron emails grade-A only, β€5/day. B/ungraded are left to Apollo's own sequences (~50/day).
- Never double-email: a row whose
Email Statusstartsskip(already in an Apollo email sequence) is excluded. If an A-grade lead is in an Apollo sequence but not yet emailed, pull them out of Apollo and run ours instead. - Approve-before-send: LinkedIn follow-up DMs and all emails are drafted to the operator's Telegram DM for approve/edit/skip. Connects are the only auto step.
What's here
skills/ β drop into ~/.claude/skills/:
| Skill | What it does |
|---|---|
aictrl-crm-refresh |
Upserts live Apollo state for H1/H2/H3 contacts into the Log (non-destructive). |
aictrl-crm-qualify |
Grades each contact AβD into col O. |
aictrl-linkedin-outreach |
Daily connect batch (interactive form). |
aictrl-linkedin-status-tracker |
Polls accepts β researches β drafts follow-up β approve before send. |
email-sequencer |
General approval-gated cold-email cadence engine. |
prospect-research |
Person β research brief + ICP-fit verdict + outreach angle. |
outreach-copy-review |
Critiques a draft vs the research + intended outcome; flags slop/unverifiable claims. |
inbox-triage / reply-audit / bounce-diagnosis |
Inbox sort / unanswered-reply audit / NDR diagnosis. |
scripts/aictrl-sheets.py β ~/.claude/scripts/. The CRM helper: direct Google Sheets API (works in a headless cron, unlike the Sheets MCP). Subcommands: candidates (connect, grade-A first then Apollo), pending/track-update (accepts), due-steps/email-update (email).
crons/ β ~/.claude/scripts/. The three wrappers (aictrl-linkedin-cron.sh 10:00, aictrl-linkedin-tracker-cron.sh 10:15, aictrl-email-sequence-cron.sh 10:30). Each runs claude -p headless with a scoped --allowedTools (NO send tools β sends stay behind your approval) and posts results/drafts to your Telegram DM.
project-config/ β <your-aictrl-project>/.claude/. Per-project config the engines read.
Install
cp -r skills/* ~/.claude/skills/cp scripts/* ~/.claude/scripts/ && chmod +x ~/.claude/scripts/*.sh ~/.claude/scripts/aictrl-sheets.pycp project-config/* <your-aictrl-project>/.claude/- Add the three cron lines (weekdays) β
crontab -e:0 10 * * 1-5 ~/.claude/scripts/aictrl-linkedin-cron.sh >> ~/.claude/logs/aictrl-linkedin-cron-wrapper.err 2>&1 15 10 * * 1-5 ~/.claude/scripts/aictrl-linkedin-tracker-cron.sh >> ~/.claude/logs/aictrl-linkedin-tracker-wrapper.err 2>&1 30 10 * * 1-5 ~/.claude/scripts/aictrl-email-sequence-cron.sh >> ~/.claude/logs/aictrl-email-sequence-wrapper.err 2>&1 - Restart Claude Code so the skills load.
βοΈ ADAPT THESE before first run (the scripts carry Vas's values)
In scripts/aictrl-sheets.py:
CREDSpath β your own google-workspace-mcp OAuth creds file (must have edit access to the shared sheet β ask Vas to share it with your Google account).VAS_USER_IDβ your Apollo user_id (fromapollo_users_api_profile); this scopes the connect queue to your Apollo tasks.SID(spreadsheet) + the H1/H2/H3SEQSβ keep as-is (shared team CRM + sequences).
In crons/*.sh:
- All
/home/vas/...paths β your home/project paths. CHAT_ID="<YOUR_TELEGRAM_DM_CHAT_ID>"β your Telegram DM chat_id."Vas Parshin"sender label (connect cron) β your name.- The MS365 sender (email cron prompt,
<YOUR_SENDING_MAILBOX>) β your aictrl address.
Prereqs (your own accounts): LinkedIn MCP (uvx linkedin-scraper-mcp@latest --login), Apollo MCP, MS365 (@softeria/ms-365-mcp-server), Google Workspace MCP, Firecrawl.
Security
No secrets are committed β scripts read ~/.claude/secrets.env (Apollo key), .telegram/.env (Telegram token), and the GWS creds file from your own machine at runtime. The crons deliberately exclude all send tools so nothing is sent without your Telegram approval. Keep this repo private.
Install
Add aictrl to your client. Pick the one you use.
claude mcp add --transport http aictrl https://aictrl.dev/mcpcodex mcp add aictrl --url https://aictrl.dev/mcp{
"mcpServers": {
"aictrl": {
"url": "https://aictrl.dev/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"aictrl": {
"type": "http",
"url": "https://aictrl.dev/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"aictrl": {
"url": "https://aictrl.dev/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"aictrl": {
"serverUrl": "https://aictrl.dev/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance19/25
- Trust6/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 10 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 1.0.0-beta.1Latest | Aug 7, 2026 |