{"id":51014364,"url":"https://github.com/aitit-inc/leadace","last_synced_at":"2026-06-21T08:04:01.684Z","repository":{"id":361317134,"uuid":"1252420534","full_name":"aitit-inc/leadace","owner":"aitit-inc","description":"Outbound sales, autopiloted.","archived":false,"fork":false,"pushed_at":"2026-06-16T13:51:10.000Z","size":2381,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-16T15:26:38.677Z","etag":null,"topics":["claude-code","claude-code-plugin","claude-skills","outbound-sales","sales-automation"],"latest_commit_sha":null,"homepage":"https://leadace.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aitit-inc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-28T13:58:38.000Z","updated_at":"2026-06-16T13:51:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aitit-inc/leadace","commit_stats":null,"previous_names":["aitit-inc/leadace"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aitit-inc/leadace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aitit-inc%2Fleadace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aitit-inc%2Fleadace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aitit-inc%2Fleadace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aitit-inc%2Fleadace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aitit-inc","download_url":"https://codeload.github.com/aitit-inc/leadace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aitit-inc%2Fleadace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34601678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","claude-code-plugin","claude-skills","outbound-sales","sales-automation"],"created_at":"2026-06-21T08:04:00.792Z","updated_at":"2026-06-21T08:04:01.673Z","avatar_url":"https://github.com/aitit-inc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LeadAce\n\nAutonomous lead generation plugin for Claude Code.\nBuilds prospect lists, runs outbound outreach, and iterates on strategy — all hands-free.\n\n\u003e **Two ways to run it.** Use the hosted service at [app.leadace.ai](https://app.leadace.ai) (Free tier — 5 outreach/day, paid plans from $29/mo), or [self-host](docs/self-host.md) the backend on your own Cloudflare + Supabase. The plugin is the same in either case — point it at the hosted MCP or your own.\n\n## For Users\n\n### Prerequisites\n\n- Claude Code\n- A LeadAce account at https://app.leadace.ai (Free tier — no card)\n- A connected Gmail account — for sending email (granted when you sign in with Google, or via the \"Connect Gmail\" banner in the web app)\n- Gmail MCP (claude.ai built-in) — for checking email replies\n- claude-in-chrome MCP — for form submission and SNS DMs (forms can alternatively use any other browser-automation MCP you configure yourself, e.g. Playwright; SNS DMs require claude-in-chrome)\n\n### Installation\n\nIn Claude Code:\n\n```\n/plugin marketplace add aitit-inc/leadace\n/plugin install leadace@leadace\n```\n\nTo update later:\n\n```\n/plugin marketplace update\n/plugin update leadace@leadace\n```\n\n### Sign in to LeadAce\n\nThe first time the plugin calls a LeadAce tool, your browser opens for Google\nsign-in (the same Google account as the web app). The token is cached locally\nfor subsequent runs. See [plugin/README.md](plugin/README.md) for details and\ntroubleshooting.\n\n### Usage\n\nMost commands take your project name as the first argument (chosen during `/leadace` onboarding); `/leadace` itself takes a free-form question or homepage URL.\n\n| Command | Purpose |\n|---|---|\n| **Setup** | |\n| `/leadace` | Entry point — onboarding, environment setup / re-check, strategy authoring, overview, and routing |\n| **Add prospects** (pick one) | |\n| `/build-list \u003cname\u003e` | Web search for new prospects |\n| `/import-prospects \u003cname\u003e` | Load CSV / Excel / SQLite |\n| `/match-prospects \u003cname\u003e` | Reuse prospects already in your tenant |\n| **Sales loop** | |\n| `/outbound \u003cname\u003e` | Send via email, contact forms, SNS DMs |\n| `/check-responses \u003cname\u003e` | Collect Gmail + SNS replies → DB |\n| `/evaluate \u003cname\u003e` | PDCA — analyse, auto-improve strategy, and surface tactical rejection signals (recontact queue, decision-maker referrals, targeting hints) |\n| **Reflection** | |\n| `/check-feedback \u003cname\u003e` | Surface PMF signals from rejection feedback (feature gaps, competitor presence) — ad-hoc product reflection |\n| **Automation** | |\n| `/daily-cycle \u003cname\u003e [count]` | One-shot bundle: check-responses → evaluate → outbound + build-list |\n| `/setup-cron \u003cname\u003e` | Schedule `/daily-cycle` on the OS (LaunchAgent / Task / cron) |\n| **Maintenance** | |\n| `/delete-project \u003cname\u003e` | Permanently delete a project and all its data |\n\nProjects, prospects, outreach logs, and strategy documents live in the cloud\n— there are no local files to manage. Review everything in the web app at\nhttps://app.leadace.ai.\n\n### Flow\n\n```mermaid\nflowchart TD\n  LA[\"/leadace\u003cbr/\u003eonboard · setup · strategy\"] --\u003e P{add prospects}\n\n  P -- web search --\u003e BL[\"/build-list\"]\n  P -- CSV / Excel --\u003e IP[\"/import-prospects\"]\n  P -- reuse tenant --\u003e MP[\"/match-prospects\"]\n\n  BL --\u003e OB[\"/outbound\"]\n  IP --\u003e OB\n  MP --\u003e OB\n\n  OB --\u003e CR[\"/check-responses\"]\n  CR --\u003e EV[\"/evaluate\"]\n  EV -- next round --\u003e P\n\n  CR -. PMF signals .-\u003e CF[\"/check-feedback\"]\n  CF -. revisit strategy .-\u003e LA\n\n  DC[\"/daily-cycle\u003cbr/\u003echeck + outbound + build, one shot\"]\n  SC[\"/setup-cron\u003cbr/\u003eOS schedule\"] --\u003e DC\n  DC -. replaces manual loop .-\u003e P\n\n  DEL[\"/delete-project\"]\n```\n\nSolid arrows = the main loop. Dashed = optional / occasional / wrapper.\n`/evaluate` also consumes the tactical slice of rejection feedback (recontact requests, decision-maker referrals, `not_relevant` industry clusters) recorded by `/check-responses` — no separate user step.\n\n---\n\n## License\n\nLeadAce is released under the [LeadAce Open Source License](LICENSE) — a\nmodified Apache 2.0 with two additional conditions:\n\n- **No multi-tenant SaaS** for third parties without a commercial license\n  from SurpassOne Inc. Self-hosting for your own organization is fine.\n- **Frontend logo and copyright** must be preserved in any deployment\n  exposing the LeadAce console.\n\n### Hosted service (cloud)\n\n- **Free tier:** 1 project, 500 prospects, 5 outreach actions per day (50 lifetime cap)\n- **Paid plans** start at $29/month. Manage your subscription from the web app.\n\n### Self-host\n\nSee [docs/self-host.md](docs/self-host.md). The self-hosted edition runs on\nthe unlimited tier — no Stripe, no caps. For commercial-license inquiries,\ncontact leo.uno@surpassone.com.\n\n---\n\n## For Developers\n\n### Repository layout\n\n```\nplugin/                          # Claude Code plugin\n├── .claude-plugin/plugin.json   # Manifest\n├── .mcp.json                    # MCP server config (uses LEADACE_MCP_URL)\n├── skills/                      # Slash commands (each directory has SKILL.md)\n├── scripts/fetch_url.py         # Local web fetch helper\n└── references/                  # Shared reference docs\nbackend/                         # API + MCP servers (Cloudflare Workers, Hono, Drizzle)\nfrontend/                        # Web app (SvelteKit, Cloudflare Pages)\ndocs/                            # Project-wide docs (deploy runbook, self-host, architecture)\ndocker-compose.yml               # Bare Postgres for non-Supabase local dev\n```\n\n- Plugin conventions and the schema-change workflow: [CLAUDE.md](CLAUDE.md)\n- Self-hosting and local dev: [docs/self-host.md](docs/self-host.md)\n\n### Quick start (local dev)\n\nOne-time setup — copy the env templates:\n\n```bash\ncp backend/.dev.vars.example backend/.dev.vars\ncp frontend/.env.example frontend/.env\n```\n\nFill in the Supabase keys from `supabase status` — it prints them once the\nlocal stack is running, so run `make dev` once first (it starts Supabase), then\npaste the keys in.\n\nFor Google sign-in to your local stack, also create a Google OAuth client and\nexport `SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID` / `_SECRET` in your shell (via\n`.envrc`) **before** the first `make dev` — it boots Supabase, which reads them\nfrom the shell at start time. See\n[docs/self-host.md → Local development](docs/self-host.md#local-development).\n(These shell vars gate sign-in; the `GOOGLE_CLIENT_ID` / `_SECRET` in\n`backend/.dev.vars` are separate — they power Gmail *send*.)\n\nThen start the whole stack with one command — Supabase, migrations, the master\nseed, the API/MCP Workers, and the frontend, all together. Ctrl-C tears the dev\nservers down (Supabase stays up for a fast restart; `make stop` halts it):\n\n```bash\nmake dev          # or: ./scripts/dev.sh\n```\n\n| Service | URL |\n|---|---|\n| Frontend | http://localhost:5173 |\n| API Worker | http://localhost:8787 |\n| MCP Worker | http://localhost:8788 |\n| Supabase Studio | http://localhost:54323 |\n\nTo run on different ports (e.g. 5173 is taken by another dev server), copy\n`dev.ports.env.example` to `dev.ports.env` and set the ports there — `dev.sh`\nrewires every dependent URL (and Google sign-in keeps working). Defaults are\nunchanged when the file is absent.\n\n\u003cdetails\u003e\n\u003csummary\u003eRun the steps manually instead\u003c/summary\u003e\n\n```bash\nnpx supabase start                      # Auth + Postgres on ports 54321/54322\ncd backend\nnpm install\nnpm run db:migrate\nnpx tsx scripts/seed-master-documents.ts\n\nnpm run dev:api                         # API → http://localhost:8787\nnpm run dev:mcp                         # MCP → http://localhost:8788  (separate terminal)\n\ncd ../frontend\nnpm install\nnpm run dev                             # → http://localhost:5173\n```\n\u003c/details\u003e\n\nPre-release checks:\n\n```bash\ncd backend \u0026\u0026 npm run typecheck\ncd frontend \u0026\u0026 npm run check\n```\n\n### Updating dependencies (lockfile gotcha)\n\n`npm install` with `node_modules` already present can prune other-platform\noptional deps (`@emnapi/*`, `@img/sharp-*`, `esbuild` binaries) from\n`package-lock.json` ([npm/cli#7961](https://github.com/npm/cli/issues/7961), npm\n10.3+–11.x). CI then runs `npm ci` against that pruned lockfile and fails with\n`Missing: … from lock file`. This bites both `backend/` and `frontend/`, and is\nwhat makes Dependabot's npm PRs go red.\n\nWhen you change a `package.json` / `package-lock.json` (or repair a Dependabot\nPR), regenerate the lockfile under the repo's pinned toolchain — **not** in\nDocker:\n\n```bash\nnvm use                 # node 22 (repo .nvmrc) — matches CI\ncd backend              # or cd frontend\nrm -rf node_modules     # removing this first is what avoids the prune\nnpm install --no-audit --no-fund\n```\n\nThen commit the regenerated `package-lock.json`. Code-only changes don't need\nthis — CI consumes the committed lockfile as-is.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faitit-inc%2Fleadace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faitit-inc%2Fleadace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faitit-inc%2Fleadace/lists"}