v0.01
An agentic Sales Development Representative that works with you to build enriched lists for outbound prospecting, manage pipeline, or pair with channel partners. Runs entirely locally for data security. Uses CSVs as state and Git as history.
Designed to be operated by a professional — not to produce AI outbound slop. The agent handles the grunt work so you can focus on the go-to-market experience.
This is designed to be operated by an AI agent.
The CLI exposes tools that an agent can call to build and manage your outbound operation. You can use any agentic coding tool:
- GitHub Copilot CLI
- Claude Code CLI
- Codex CLI
- Gemini CLI
- OpenCode CLI
- Aider CLI
- Cursor CLI
- OpenClaw CLI (Particularly good)
The agent reads AGENT.md for instructions, discovers available tools via the skill registry, and uses the CLI to persist data. You have a conversation, the agent does the work.
You can also run CLI commands directly as a human — useful for checking status, resetting data, or viewing the portal.
- Product — Define what you're selling
- Personas — Define who you're targeting
- Regions — Segment your market into territories
- Targets — Identify specific companies in each region
- Contacts — Find decision makers at target companies
npm install
npm run dev -- start- Open this folder in your agentic tool of choice
- The agent will read
AGENT.mdfor instructions - Start chatting — the agent drives the process interactively
- Run
npm run dev -- portalto visualize progress
If you want Playwright CLI or an agent to use a specific local Chrome profile, store the real path in .env.local. That file is ignored by git in this repo.
Example .env.local:
OPEN_SDR_CHROME_PROFILE_PATH="/Users/hayden/Library/Application Support/Google/Chrome/Profile 1"
OPEN_SDR_CHROME_USER_DATA_DIR="/Users/hayden/Library/Application Support/Google/Chrome"
OPEN_SDR_CHROME_PROFILE_DIR="Profile 1"If you need to derive those values manually, open the target Chrome profile and check chrome://version.
- Copy the
Profile Pathvalue. - Use the parent folder as
OPEN_SDR_CHROME_USER_DATA_DIR. - Use the last path segment as
OPEN_SDR_CHROME_PROFILE_DIR.
Example:
/Users/you/Library/Application Support/Google/Chrome/Profile 1
From that path:
- the user data dir is
/Users/you/Library/Application Support/Google/Chrome - the profile directory is
Profile 1
Before running Playwright CLI from your shell, load the local env file:
set -a
source .env.local
set +aFor Playwright CLI, the important part is the user data dir:
npx playwright codegen --user-data-dir="$OPEN_SDR_CHROME_USER_DATA_DIR" https://example.comIf you need a specific profile inside that directory, launch Chrome yourself with that profile first:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--user-data-dir="$OPEN_SDR_CHROME_USER_DATA_DIR" \
--profile-directory="$OPEN_SDR_CHROME_PROFILE_DIR"Then use Playwright against that browser session or the same user data directory. An agent can also reference the same values from .env.local instead of storing your real Chrome path in git.
These commands can be run by you or by the agent:
npm run dev -- start # Interactive start menu
npm run dev -- status # Show summary
npm run dev -- portal # Open web dashboard
npm run dev -- skills # List available tools
npm run dev -- reset # Clear all data
npm run dev -- mock # Demo with sample data├── AGENT.md # Agent instructions
├── src/
│ ├── cli.ts # CLI interface
│ ├── core/
│ │ ├── agent_state.ts # State tracking
│ │ └── skill_registry.ts # Tool discovery
│ ├── skills/
│ │ └── sdr_skills.ts # SDR tools
│ └── tools/
│ └── csv_manager.ts # CSV operations
├── data/ # All data (CSV files)
│ ├── product.csv
│ ├── personas.csv
│ ├── regions.csv
│ └── regions/{region_id}/
│ ├── targets.csv
│ └── targets/{target_id}/
│ └── contacts.csv
└── index.html # Web portal
All data is stored in CSVs for transparency:
Product (1) → Personas (N) → Regions (M) → Targets (K) → Contacts (2-5 per target)
Contacts are stored per-target to keep files small and focused.
Everything is a tool the agent can use via CLI. Planned additions:
- Outreach drafting — Generate personalized email sequences
- Email integration — Send directly from the agent
- Research tools — Web scraping, LinkedIn enrichment
- CRM sync — Push data to Salesforce, HubSpot, etc.
- Data export — CSV/JSON export for other systems
- Scheduling — Book meetings directly