Show HN: Tanchi – Open-source AI prospecting agent that only automates email Tanchi, an open-source AI prospecting agent that automates only email outreach, has been released on GitHub by tanchihq. The self-hostable system sources, researches, writes, and follows up on B2B prospects nightly, using verified intelligence from prospects' own websites or LinkedIn, and measures replies and meetings rather than opens. It runs in a single Docker image requiring only Docker and an Anthropic API key, with a setup wizard for configuration. Autonomous B2B prospecting engine — open source, self-hostable. The AI sources, researches, writes and follows up every night. You stay in control of what gets sent. The system learns from what actually converts, not from what looks nice. Tanchi takes the opposite stance to most AI prospecting tools: Email-first. The only channel that is genuinely safe to automate. Everything else is assisted the AI drafts, a human sends . Verified intelligence. Every fact in a prospect dossier is sourced from the prospect's own website or LinkedIn. Never invented, never a filled-in gap. Qualitative learning first. We distill, in plain language, what converts per ICP before any statistics. Interpretable, correctable, effective from month one. We measure replies and meetings, never opens. tanchi 探知 means "detection" in Japanese — the radar sweeping the dark for signals. The heart of the project — sourcing, the intelligence pipeline, the agents, the learning loop — is described in apps/api/README-moteur.md . Everything PostgreSQL, Redis, API, web in a single image. You only need Docker and an Anthropic API key. docker run -it --name tanchi \ -p 8080:8080 \ -v tanchi-data:/var/lib/postgresql/data \ tanchihq/tanchi On first run with a terminal attached -it , a short setup wizard asks how you want to use Claude API key or the claude CLI , for an optional Hunter.io key and optional SMTP, saves everything to the data volume, then starts. Next runs skip the wizard. Prefer a fully non-interactive start CI, one-liner ? Pass the key as an env var instead — the wizard is skipped when no terminal is attached: docker run -d --name tanchi \ -p 8080:8080 \ -e ANTHROPIC API KEY=sk-ant-... \ -v tanchi-data:/var/lib/postgresql/data \ tanchihq/tanchi To reconfigure later: docker exec -it tanchi entrypoint.sh setup , then restart the container. If you picked the claude CLI provider, authenticate once with docker exec -it tanchi claude mount -v tanchi-claude:/root/.claude to keep the session . Open http://localhost:8080 http://localhost:8080 . Database migrations run automatically; session secrets are generated and persisted to the data volume on first boot. Because the web app and API are served same-origin behind one port, cookie auth works out of the box over http://localhost . Email verification is off by default.Signing up logs you straight into the app: no confirmation email is sent and nothing asks you to click a link. Turn it on only if you have a mailer — -e REQUIRE EMAIL VERIFICATION=true together with MAIL SMTP HOST or RESEND API KEY . With verification on, sign-up still logs you in, but the app shows a "verify your email" screen and the API answers 403 everywhere until the link is clicked. The API refuses to boot with verification on and no mailer, since no account could ever be verified. git clone git@github.com:tanchihq/tanchi.git cd tanchi cp .env.example .env edit .env: ANTHROPIC API KEY, AUTH SECRET, ENCRYPTION KEY, POSTGRES PASSWORD docker compose up -d --build - Web: http://localhost:8080 http://localhost:8080 - API: http://localhost:3000 http://localhost:3000 Auth behind a domain.For a real deployment, serve the web app and API over HTTPS on a shared parent domain e.g. app.tanchi.io / api.tanchi.io via a reverse proxy Caddy, Traefik, nginx and set APP URL , AUTH BASE URL , VITE API URL accordingly in .env . Stack: Bun everywhere runtime, package manager, tests . No npm/pnpm/yarn. bun install install the whole workspace cp .env.example .env single .env at the repo root, read by both apps bun run dev api + web in parallel bun run dev:api api only http://localhost:3000 bun run dev:web web only http://localhost:5173 bun run typecheck typecheck api + web bun run test api tests The API needs PostgreSQL and Redis. Simplest in dev: docker compose up -d postgres redis bun run migrate OneBoth apps read the root .env at the repo root. .env the API via --env-file , the web via Vite envDir . Required keys: DATABASE URL , AUTH SECRET ≥32 chars , ENCRYPTION KEY ≥44 chars, openssl rand -base64 32 . The API test suite is end-to-end: it drives the real Hono app against a real PostgreSQL and Redis, and mocks only the external boundaries LLM, sourcing, mailbox, outbound web fetch . It uses a dedicated tanchi test database so it never touches your dev data — every test truncates all tables between cases. docker compose up -d postgres redis bun run test runs the API suite creates and migrates tanchi test itself The suite defaults to postgres://postgres:postgres@localhost:5432/tanchi test and redis://localhost:6379 ; override DATABASE URL / REDIS URL to point elsewhere. As a safety net it refuses any database whose name does not contain test , and rewrites the database name to tanchi test when DATABASE URL points at a non-test database. Every route of every module is covered, with multi-tenant isolation, auth, input-validation and secret-non-leakage assertions. tanchi/ apps/ api/ Hono + Bun + PostgreSQL backend raw SQL, no ORM + BullMQ web/ React + Vite frontend packages/ shared/ vocabulary and types shared front/back @app/shared docker/aio/ all-in-one image postgres + redis + api + web docker-compose.yml .env.example LICENSE AGPL-3.0 Each app keeps its own README.md and CLAUDE.md the backend and frontend conventions differ . The backend follows strict rules: raw SQL without an ORM, errors as values, zero comments, everything immutable — see apps/api/CLAUDE.md /tanchihq/tanchi/blob/main/apps/api/CLAUDE.md . Contributions are welcome — see CONTRIBUTING.md /tanchihq/tanchi/blob/main/CONTRIBUTING.md . In short: Bun only, follow each app's conventions, bun run typecheck and bun run test green before any PR. AGPL-3.0 /tanchihq/tanchi/blob/main/LICENSE . You may host and modify Tanchi freely; if you offer a modified version as a network service, you must publish its source. Status: early. Built for and battle-tested on our own company's prospecting. Expect rough edges — issues and PRs welcome.