Black Magic AI
Black Magic AI
Surfaces
AI Chat
One chat box, every agent, your whole stack.
Agents
Sixteen revenue agents that run your GTM playbook.
Drafts
Review, edit, and auto-send every AI reply.
Triggers
Event-driven dispatch — webhooks, CRM, schedules.
Desktop app
Native macOS & Windows — local, offline-first.
Foundations
Context
Your playbook as markdown — read by every agent.
Knowledge
Import docs & research the agents can cite.
Skills
Compose tools into reusable agent doctrine.
Integrations
27 first-party connectors — HubSpot, Gmail, Apollo.
BYOK
Bring your own keys — no data-vendor markup.
By role
RevOps Automation
Retire brittle Zaps with agent-driven workflows.
Demand Gen
Turn anonymous traffic into booked meetings.
Sales
Walk into every call with full context.
By use case
Website Visitor ID
Deanonymize visitors and route them to reps.
Signal-Based Outbound
Reach buyers the moment they show intent.
Automated Lead Qualification
Score, enrich, and triage in under 60 seconds.
Contact Data Enrichment
Fill in every CRM record on autopilot.
Reply Guy
On-brand peer replies on Reddit & X.
PricingBlogAbout
Log in
Start free
Black Magic AI

Your AI GTM Engineer. Turn any revenue workflow into an agentic process — from prompt to pipeline.

Product
  • AI Chat
  • Agents
  • Drafts
  • Triggers
  • Desktop app
  • Pricing
Foundations
  • Context
  • Knowledge
  • Skills
  • Integrations
  • BYOK
Solutions
  • Website Visitor ID
  • Signal-Based Outbound
  • Lead Qualification
  • Contact Enrichment
  • Reply Guy
Roles
  • RevOps
  • Demand Gen
  • Sales
Company
  • About
  • Blog
  • Changelog
  • Privacy
  • Terms
© 2026 Black Magic AI. All rights reserved.
blackmagic.engineering
blackmagic ai
Product — BYOK + Local-First

Your keys. Your vault.
Your .env.

Every integration is bring-your-own-key. Keys live in a local JSON file and mirror to a plain-text .env in your vault — so scripts, skills, and other tools can all read them naturally. Nothing leaves your Mac except the LLM calls you bill credits for.
Start freeContact sales
See it in the app

Your keys, your vault, your .env.

BlackMagic AI · Acme
A
Acme
Home
Search⌘K
Agents1
  • Company Profiler
  • Researcher
  • Outbound
  • SDR
  • AE
  • Meeting Prep
  • GEO Analyst
Triggers
Chat History
Drafts3
Data
Companies
Contacts
Deals
Pipeline
GEO
Sequences
Integrations
Settings
Billing
BlackMagic AI
v0.5.17
12,480 credits
Settings

Integrations

.bm/integrations.json → vault/.env

Your keys live in your vault. LLM billing runs through our gateway; everything else never leaves your Mac.

Apollo
Enrichment
on
Apify
Discovery
on
HubSpot
CRM
on
Salesforce
CRM
add
Slack
Notifications
on
Gmail
Outbound
on
LinkedIn
Outbound
on
Unipile
Outbound
add
Cal.com
Scheduling
missing
.bm/integrations.json
{
"apollo": { "api_key": "ap_live_…8f2c" },
"hubspot": { "token": "pat-…4d1a" },
"slack": { "webhook": "https://hooks…" }
}
The problem

Your buyers visit every day. You see almost none of them.

SaaS tools hold your integration keys hostage

Every tool asks for your HubSpot / SES / Apify / Stripe keys and stores them server-side. Switching tools means pasting every key again — and trusting a vendor you'll abandon.

You pay the same LLM call twice

Tool X marks up OpenAI tokens 3× and bundles them as "AI features." You pay both the tool's markup and your own provider bills for the same underlying infrastructure.

Your data vanishes if the company pivots

Every "here's our shiny AI SaaS" launched in 2023 is 30% gone by now. Your workflows, prompts, and data went with them.

Custom scripts can't reach the keys

You want a Python cron to re-run a report using the Apify key you pasted in the dashboard. You can't — the key is in the vendor's DB, not on your machine.

The solution

Black Magic AI turns every session into a revenue action.

BYOK — you paste, you own

22+ integrations, every one BYOK. Paste once in Integrations → Apify (or SES, GSC, Ghost, Unipile, Stripe, GitHub, …). Keys stay in ~/BlackMagic/.bm/integrations.json on your disk, forever.

.env mirror for scripts

Every saved integration also writes a plain KEY=value line to <vault>/.env. Your Python / Node / shell scripts just load_dotenv() and read APIFY_API_TOKEN, AWS_ACCESS_KEY_ID, FEISHU_WEBHOOK, SES_FROM, etc.

Vault is just files

companies/*.md, contacts/*.md, deals/*.md, signals/*.md, playbooks/*.md, drafts/*.md. Readable in any text editor. Version-controllable with git. Movable to any Mac with rsync.

Daemon runs on your machine

All tool execution — fetch, scrape, send_email, cms_create_draft, GSC query — runs in a local Node daemon. The only outbound traffic is the target API call + our LLM proxy for billed reasoning.

Nothing to migrate when you switch

Stop paying us and the vault stays on your disk. Open it with a text editor. The keys in .env still work with whatever replaces us. Literally no lock-in.

Git-native

Your vault is git-init'd by default. Diff a contact's history. Revert a bad enrichment. Branch a new ICP to experiment. It's just files.

0+
BYOK integrations
0%
of your keys on your disk
0
vendor lock-in
.env
the universal interface

LLM billing is the only shared bit

Your credits token (`ck_...`) lives in .bm/config.toml and is read only by our codex runtime for billed LLM calls. Skills never see it. Integration tokens never commute.

Integration vault = source of truth

UI writes integrations.json. Daemon mirrors to .env. Scripts read .env. Any other script, cron, or custom tool on the machine can share the same keys without re-authentication.

Pre-flight teaches the system

Each Skill declares `requires: { integrations, us_files, cli }` in frontmatter. Point-of-run check + one-click fixes. Users learn exactly what each Skill needs — no hidden state.

Capabilities

Every moving part, already built.

integrations.json

Canonical store at ~/BlackMagic/.bm/integrations.json. Per-provider `{ status, connectedAs, connectedAt, credentials }`. UI reads + writes, daemon consumes.

Auto .env mirror

Every save regenerates <vault>/.env with predictable names — APIFY_API_TOKEN, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, SES_FROM, FEISHU_WEBHOOK, GHOST_ADMIN_API_KEY, GHOST_ADMIN_API_URL, GSC_SERVICE_ACCOUNT_JSON, …

LLM keys stay separate

zenn_api_key (your credits token) lives in .bm/config.toml and is never mirrored to .env. A Skill cannot accidentally use your billing token to bypass the proxy.

One file per entity

A company is a markdown file. A contact is a markdown file. A run is a markdown file. You can grep, git-log, and rm -rf with confidence.

Pure Node network layer

SES requests use Node's native https module, sidestepping any Electron / Chromium network interference. GSC JWT signing uses Node crypto. No wrapper SDKs that phone home.

Your own provider bills

Apify charges you directly. AWS SES charges you directly. Unipile charges you directly. We charge you only for credits on the LLM proxy. No 3× markups.

Works with
ApifyAmazon SESUnipileGoogle Search ConsoleGhostWordPressHubSpotSalesforceFeishuSlack

Frequently asked

Does any of my integration data hit your servers?

No. Keys live in .bm/integrations.json on your Mac. Integration API calls (Apify → api.apify.com, SES → email.us-east-1.amazonaws.com, GSC → googleapis.com, etc.) go directly from your daemon to the provider. We route only LLM reasoning calls through our proxy — and even those carry your `ck_` credits token, not your integration keys.

Can I audit what leaves the machine?

Yes. Daemon logs every outbound request to ~/Library/Logs/BlackMagic AI/. Plus you can set a proxy and inspect every packet — SES, Apify, Feishu, and all CMS calls are plain HTTPS to the providers' public APIs.

What happens if I stop paying for BlackMagic?

The vault stays on your disk, integrations.json stays on your disk, .env stays on your disk. The desktop daemon stops receiving updates but continues to run. Skills you've customized are yours. Migrate everything to a text editor if you want — it's just .md + .json + .env.

Can I share a vault across devices?

Yes — the vault is designed to be rsync'able / Dropbox-syncable / git-pushable. Keys in integrations.json are machine-local by convention (don't check them into git), but if you want to sync them, that's your call.

Why mirror to .env if integrations.json already has the keys?

.env is the universal interface. Every Python, Node, Go, or shell script in the world knows how to load_dotenv(). Mirroring means any script you write in your vault picks up the same keys you pasted in the UI — zero glue code.

Your keys, your vault, your rules.

Start free
Contact sales