Today
Anything waiting on you, then everything Franco has built so far.
Signals
Franco proposes what it knows how to look for. You decide what actually defines a good prospect — nothing is collected until you confirm it.
A prospect list is a query, not a file. Pick the signals a good prospect must have — and any that disqualify them — and see how many companies match right now.
Discover
Find businesses matching your ICP. Pick a source, see what it will cost, then run it — nothing is called until you press the button.
Companies
Organizations Franco has researched. Click a row to see its contacts.
Contacts
People Franco has found and verified, or you imported.
Campaigns
Email sequences Franco has written and deployed.
Outbox
Every outgoing email stops here. Read one, decide, move on — A approve, R reject, J/K to move.
Conversations
Every reply, and how Franco handled it.
Activity
A running log of every action Franco's agents have taken.
Usage
Actual model usage — your active subscription's quota (Claude or Codex), calls, and tokens per provider, agent and task. Subscription plans aren't billed per token, so no dollar costs here.
Settings
Credentials are stored locally in .env — never sent anywhere except the services themselves.
Email Provider
How Franco sends and reads replies. Active provider: … — change it by setting channels.email.provider in franco.yaml to gmail, smtp, or instantly.
Use a mailbox on a dedicated secondary domain. Create an OAuth client (type "Desktop app") in Google Cloud Console → Gmail API, paste the id/secret, save, then run franco gmail auth in your terminal.
Any real mailbox (AgentMail, Fastmail, a Workspace app password). IMAP defaults to the SMTP host/login if left blank.
Email Verification strongly recommended
Add at least one so found emails get verified. Without any, addresses stay guess and are never sent. Reoon has the best free tier (600/mo).
LinkedIn optional
For automated LinkedIn prospecting. Franco logs in and searches like a human.
Cloudflare optional
For deep website crawling with JavaScript rendering during product training. ~$5/month.
Controls
Start and stop Franco's heartbeat loop, and watch what it's doing.
Agent
Recent Logs
Help
What Franco is, how it works, and how to fix the usual problems.
What is Franco?
Franco is an autonomous AI sales agent. Once set up, Franco runs on its own: finds people who match your ideal customer, writes personalized cold emails, sends them through your email platform, reads every reply, handles objections, and works toward booking a meeting. You review everything through this dashboard.
Franco runs on your Claude Max subscription (or, if you opt in, your ChatGPT plan through Codex), so there are no extra AI costs. Everything stays on your machine in one folder.
Getting Started
There are three things to do:
1. Go to the Settings tab and enter your Instantly API key 2. Train Franco on your product (through Claude or the command line) 3. Go to the Controls tab and click Start
The Setup tab shows you exactly what's done and what still needs to happen.
Where Everything Lives
Everything Franco needs is inside this one project folder. Nothing is stored elsewhere.
| .env | Your API keys and credentials (never shared or committed) |
| franco.yaml | Your product info, target customers, and behavior settings |
| skills/ | Sales knowledge files. Edit these to change how Franco writes and sells. |
| skills/product_knowledge.md | Everything Franco knows about your product (auto-generated from training) |
| prompts/ | Prompt templates for each agent. Advanced customization. |
| data/franco.db | Database with all prospects, campaigns, and conversations |
| data/franco.log | Log file showing what Franco is doing |
Getting Your API Keys
Instantly API Key (required)
Instantly is the email platform Franco uses to send campaigns.
1. Sign up at instantly.ai (you need the Growth plan for API access)
2. Go to Settings > Integrations
3. Copy your API key
4. Paste it in the Settings tab here
LinkedIn Credentials (optional)
If you want Franco to find prospects on LinkedIn, enter your LinkedIn email and password. Franco uses a real browser to search LinkedIn like a human would, with random delays and rate limits to avoid detection.
If you skip this, Franco will find prospects through Google searches and company website scraping instead.
Cloudflare Browser Rendering (optional)
This is only used during product training (when Franco crawls your website to learn about your product). It handles JavaScript-heavy websites that a basic crawler can't read.
1. Sign up at Cloudflare (paid Workers plan, ~$5/month)
2. Go to Workers & Pages > Browser Rendering
3. Create an API token with Browser Rendering Edit permissions
4. Enter your Account ID and API Token in the Settings tab
Without this, Franco uses a built-in crawler that works fine for most websites but can't render JavaScript.
Common Issues
"command not found: franco"
source .venv/bin/activateInstantly API returns 401
Claude headless mode fails
claude login in your terminal and have an active Claude Max subscription. Franco uses your existing subscription, not a separate API key.Codex calls fail
brain.provider: codex, set brain.model: gpt-5.5 (the verified text-only model; a blank model fails on current ChatGPT accounts and code-mode models are refused), run codex login and choose "Sign in with ChatGPT" (API-key logins are refused). Franco never renews your Codex login: if the log says it has expired or is due for renewal, use Codex once or run codex login. Franco needs Codex CLI 0.159.3 on macOS or Linux (Codex isn't supported on Windows; use Claude there) and refuses other versions. While Codex can't be used, Franco pauses (the Actions card shows "Codex paused" and why), leaves replies and queued emails untouched, and resumes once it's fixed; franco status --check checks on demand. If the log says isolation could not be verified, a Codex config layer is forcing a tool, hook, MCP server or custom endpoint back on — Franco refuses to send prompts until it is removed. Franco never falls back to Claude on its own.