My outbound work every week is repeatable. Pulling fresh contacts. Checking mailbox health. Spinning up a new workspace for a different market. Adding LinkedIn steps to email sequences. Rotating out a sender that is drifting.
Running all of that through different dashboards takes longer than the work itself deserves. So I moved the repeatable parts into the terminal. Below is what that means, how it compares to an MCP setup, and the cold outreach workflows I script first across both email and LinkedIn.
CLI stands for command line interface. It is a way to interact with software by typing commands instead of clicking through a screen. If you have ever opened Terminal on a Mac or PowerShell on Windows, you have used a CLI.
A CLI for cold outreach is the same idea. Instead of opening a dashboard to find your sequences, you type a command that lists them. Instead of clicking into a warmup tool to check a score, you type a command that returns the score as data.
Commands always return the same output for the same input, which makes them useful for repeatable work. Put commands in a script, run that script on a schedule, and the result is identical every time.
Both a CLI and an MCP setup let you run cold outreach tasks without clicking through dashboards. They are not the same thing, though, and the right one depends on what you are trying to do.
A CLI is a tool you (or a script) call directly. You type a command, the tool runs it, you get a result. The same input gives the same output every time.
An MCP setup is a way to expose those same actions to an AI assistant like Claude Code, Cursor, or Windsurf. You describe what you want in plain English. The assistant picks the right tool and runs it.
Same underlying actions, different interfaces. Here is when I reach for each.
CLI and MCP are not strictly either-or. A CLI can also be exposed to an AI assistant as a tool.
The reason this matters is tokens. Benchmarks show MCP servers can use up to 35x more tokens than equivalent CLI tools on identical tasks, because the full tool schema gets injected into the model's context on every turn. A CLI is leaner because the assistant only loads help text for the command it wants to run. I cover the setup later in this post.
A lot of cold outreach work is the same task done over and over. Pull a list. Check a number. Rotate a mailbox. Add a LinkedIn step to a sequence. Start a new campaign workspace.
When I script that kind of work, three things change.
Three things.
That is the full prerequisite list. Basic terminal comfort is enough.
One command installs the CLI globally.
Generate an API key for each product. Log into the app, go to Settings then API, and click Generate API Key.
Stored config lives at ~/.config/forge-cli/config.json with file mode 0600.
The CLI talks directly to each Forge product's API using your keys. Three things to know.
All six Forge products are supported through a single binary. You only need API keys for the products you actually use.
Commands for products without a configured key return an authentication error. You do not have to install six separate tools.
Once the CLI is installed and at least one product is configured, the simplest thing to try is listing your Salesforge workspaces.
Every command follows the same shape: product, resource, action, flags. Data comes back as JSON.
The CLI has a built-in command browser, so documentation lives inside the tool itself.
Show every command available with the keys you currently have configured.
Every command can be called in two ways.
forge salesforge workspaces listforge list_workspacesFlags use kebab-case and map to API field names, so --workspace-id becomes workspaceId automatically.
Seven. Four on the email side, three on the LinkedIn side. They cover most of the repeatable work for any team running outbound at scale.
Goal: pull a fresh list of contacts matching the ICP from Leadsforge each morning, then push them straight into a Salesforge sequence.
Doing it before the team logs in means the first cohort is already in the sequence by 8am.
Wrap that in a script and trigger it via cron at 7am. The list is fresh and the sequence is loaded before the team has finished their first coffee.
Goal: pull warmup stats from Warmforge and reply-rate data from Salesforge, then post a summary to a Slack channel every Monday.
This is the single most useful thing I script. Catching a drifting mailbox in week one is cheap.
Pipe the JSON into a small script that flags anything under an 85 heat score or under a 1 percent reply rate, then post to Slack.
Goal: list all active domains and mailboxes across Mailforge, Infraforge, and Primeforge, identify any that are flagged, and reassign senders.
My rule: keep about 50 percent of installed capacity as warmed backups. When something gets flagged, I pause it and replace it the same day.
A small script identifies underperformers, pauses them in Salesforge, and assigns a warm backup.
Goal: stand up a new Salesforge workspace for a new market or test campaign. Doing this by hand takes about an hour. Scripted, it takes seconds.
This is the workflow that lets me run more experiments in a quarter.
Salesforge sequences are multi-channel by design. The same sequence object can mix email steps with LinkedIn connection requests, profile visits, and InMail messages. The CLI exposes those sequences and the sender profiles attached to them.
Goal: take a sequence that started life as email-only and add a LinkedIn connection request step on day 3, plus a LinkedIn message step on day 7.
Goal: list LinkedIn sender profiles, identify any that are flagged, and reassign to a healthy backup. Same pattern as email mailbox rotation, different channel.
Goal: launch a new multi-channel campaign from a saved template that already has the right mix of email and LinkedIn steps. Turns a 30-minute dashboard task into a 10-second command.
By default, the CLI prints compact JSON to stdout. That is the format that makes everything else possible.
Pretty-print when reading, pick only the fields you need, or pipe into jq for filtering.
Suppress output when you just want to fire off a create or update.
Errors go to stderr as JSON, so scripts can detect them cleanly. Exit codes follow standard conventions: 0 for success, 1 for runtime errors, 2 for usage errors, 3 for auth errors.
If you want to keep your main Salesforge keys separate from a sandbox, or run the same script against two team workspaces, profiles handle it.
Each profile holds its own keys.
Three errors cover most setup issues.
forge: command not found. The global npm bin directory is not on your PATH. Run npm bin -g and add the result to your shell profile.
Salesforge API key is required. Either log in for that product, or export the matching environment variable.
Wrong key being used. Per-command flags override environment variables, which override stored config. Run forge status --pretty to see what is active.
If a command needs complex nested input, three options: inline JSON, a file, or piped stdin.
Yes. The same binary also runs as an MCP server, which makes the same Forge commands available to an AI assistant as tools.
Add this to the assistant's MCP config.
Only configure keys for the products you actually use.
If you do not want to install the CLI at all, the hosted Forge MCP Server covers the same ground without a local install. The trade-off is more token overhead per turn. For high-volume AI workflows, the local CLI in MCP mode is leaner.
The Forge CLI is a single command-line tool that runs Salesforge, Mailforge, Primeforge, Infraforge, Leadsforge, and Warmforge from your terminal. It talks directly to each product's API using your keys, so every action you do in the dashboards becomes a command you can script, schedule, or chain.
No. Basic terminal comfort is enough. The setup is a single npm install, a few API keys, and one config file.
The CLI itself is free. You only pay for the Forge products it talks to. If you already have a Salesforge, Mailforge, Warmforge, or any other Forge account, the CLI adds no extra cost.
Yes. The CLI uses the same API as the dashboards, so anything you do from the terminal shows up in the dashboard immediately. Most teams use both.
A CLI is a tool you call directly. An MCP setup exposes the same actions to an AI assistant like Claude Code, Cursor, or Windsurf, which decides which command to run based on a plain-English prompt. Use a CLI for repeatable cold outreach work. Use MCP for conversational analysis or sequence drafting.
Generally yes, in token terms. Published benchmarks show MCP servers can use up to 35x more tokens than equivalent CLI tools on identical tasks, because the full tool schema gets injected into the model's context on every turn. Running the Forge CLI in MCP mode means the assistant only loads help text for the specific command it wants to run.
On the email side: daily lead refresh from Leadsforge into a Salesforge sequence, weekly mailbox health checks across Warmforge and Salesforge, domain and mailbox rotation across Mailforge, Infraforge, and Primeforge, and spinning up a new campaign workspace. On the LinkedIn side: adding a LinkedIn touch to an existing sequence, rotating LinkedIn sender profiles, and building a multi-channel sequence from a template.
Both. Salesforge sequences are multi-channel by design, so the same sequence object can mix email steps with LinkedIn connection requests, profile visits, and InMail messages. The CLI exposes sequences, sender profiles, and enrollments, which means anything you can build in a multi-channel sequence in the dashboard can also be built from the terminal.
npm package: https://www.npmjs.com/package/@salesforge/forge-cli
GitHub repository: https://github.com/SalesforgeAI/forge-cli
If you run into issues, the Salesforge support chat is the fastest way to get unblocked.
.jpg)

.jpg)