An inbox that answers back
CommSync puts a staff of Gemini-powered agents inside a shared business inbox. One reads every message. One replies to new leads on its own. One recaps the day like a front page. All of it runs on Google Cloud.
Disclosure: we created this piece of content for the purposes of entering the All Things Agentic Hackathon.
TL;DR
- What it is: CommSync — every text, email, call, and voicemail a small business gets, in one inbox the whole team shares.
- The agentic part: a named AI agent answers inbound customers on real phone lines, in a native Gemini function-calling loop — behind a 15-check, fail-closed safety gate.
- Plus: Ask, an agentic chat that searches, reads threads, and cites real messages; and an ambient layer that classifies, titles, briefs, and drafts.
- Where it runs: Cloud Run, Cloud SQL, Memorystore, Cloud Storage, Secret Manager — with Gemini on Vertex AI doing the thinking.
- Try it live: commsync-web…run.app — self-signup works, no card required.
Small businesses drown in messages, not work
We build websites and run marketing for small businesses. The pattern repeats at every client: the work is fine, the communication is the bottleneck. A lead texts the office line at 9 PM. An invoice lands in a shared mailbox nobody watches. A client asks the same question three people already answered. Nothing is lost, exactly — it is just spread across five apps and four people's memories.
CommSync is our answer: one org-wide inbox where SMS, email, calls, and voicemail land as threads the whole team can see. For this hackathon we took its agentic core, deployed the full stack on Google Cloud, and put Gemini on Vertex AI behind every feature that thinks.
The thesis of the Taskmaster track is an agent that handles complex workflows and takes action. An inbox is the harshest place to test that thesis. The input is unbounded, adversarial, and written by strangers. The action — sending a message to a real customer — is public and irreversible. So most of what we are proud of here is not the model call. It is everything wrapped around it.
02 · THE HEADLINE ACTSage: an employee made of function calls
Our demo workspace is Wrenhouse, a fictional design-build studio. Wrenhouse runs an agent named Sage on its office phone line. When a brand-new lead texts in — square footage, a budget, a timeline — Sage reads the message, searches the studio's knowledge base, and answers with a real ballpark and a qualifying question. No made-up prices. No rule was written. That is a native Gemini function-calling loop, running live against tools like search_knowledge, read_thread, and send_reply.
Each agent is a first-class org member of kind AGENT — no login, no seat, but real channel permissions, so the whole access-control and fan-out machinery works on it unmodified. Every turn is inspectable after the fact: what triggered it, which tools it called, what it said, and what it cost, down to the fraction of a cent.
Autonomy is a dial, not a switch. In DRAFT mode every reply waits in an approval queue. SUPERVISED sends but keeps humans in the loop. AUTO is hands-off. And a human can always take the thread back: one click pauses the agent on that conversation, because the fastest way to lose a customer's trust is a machine that will not yield.
Fifteen gates before a single token
An autonomous responder on a real phone line can loop against another bot, text a customer at 3 AM, or reply to someone who said STOP. So the agent runtime is fail-closed: a rail of deterministic checks runs before any model call, and any one of them ends the turn silently. The model never sees a message it should not answer.
- agent active — paused or archived agents never fire
- channel whitelist — only lines the org explicitly assigned
- 1:1 threads only — group chats stay human
- not already answered — a teammate's reply wins the race
- human takeover — a paused thread stays paused
- STOP opt-out — an SMS STOP is honored forever
- automation headers — machine mail gets no reply
- known-bot sender — cached AUTOMATED / SPAM verdicts block
- bot-loop guard — two machines never converse
- quiet hours — the org's clock, not the server's
- consecutive-turn cap — momentum has a ceiling
- per-contact daily cap — persistence has one too
- credit balance — an org out of AI credit fails closed
- autonomy routing — DRAFT queues, it does not send
- idempotent send claim — one turn can never send twice
// all 15 pass → the Gemini tool loop begins. any fail → no model call, no spend, no send.
Ask: memory for the whole inbox
Ask is a streaming, agentic chat over everything the org has ever said. "Did anyone push back on cost recently?" is not a keyword query — so Ask plans one: it runs semantic search over a pgvector index, reads the candidate threads with its own tools, and answers with citations that deep-link to the actual messages. It reads attachments too. Ask "how much was that invoice?" and the number comes from inside the PDF.
Under the hood it is a tool loop with a per-turn token budget and a hard step cap, over a dozen permission-scoped tools — every tool call is filtered by the caller's real channel access, so an agent can never read a thread its human could not. The same loop doubles as the in-app help desk: it searches the live product docs, so "why did my email bounce?" gets an answer grounded in both the thread and the manual.
05 · THE AMBIENT LAYERThe agents you never see
The loudest demo is the agent that texts a customer. The biggest daily win is quieter: background workers that run on every message with no one watching.
A classifier reads each inbound sender and files machine mail — receipts, alerts, promotions — out of the way, with a deterministic header-analysis layer that catches automated campaigns no matter how personal the prose sounds. Twice a day, a scheduled agent writes The Daily Brief: the day's threads, ranked like a front page, each item grounded in a real message and delivered as a designed email. Thread titles, reply drafts briefed on the whole conversation, even the composer's tab-to-complete typeahead — each is its own small model pipeline with its own budget, dedup hash, and audit row.
Every one of these pipelines shares a harness: content-hash dedup so retries are free, per-org credit accounting on every call, and a kill switch per feature. Agentic systems fail weird; the harness makes them fail boring.
06 · LESSONSWhat building this taught us
Fail closed, everywhere, first
The gate rail was not a compliance afterthought — it was the design. In an agentic system the cheapest failure is the model call you never make. Deterministic checks run before inference; inference runs before action; action is idempotent. In that order, always.
The boring rails are the product
Sends are non-idempotent, so three independent layers guarantee at-most-once delivery. Job queues debounce per thread so a burst of messages becomes one thoughtful turn, not five. None of this demos well. All of it is why you can let a machine text your customers.
Agents are users now
CommSync ships an MCP server with 70+ tools, signed outbound webhooks, and machine-readable docs endpoints — external agents are a first-class client of the product, with the same permission model as humans. This page practices what we preach: semantic HTML, JSON-LD facts, and a plain-markdown mirror, because we assume at least one reader of this post is an agent.
Running on Google Cloud
The whole stack is on Google Cloud, region us-central1. Two Cloud Run services: a Next.js web app, and a single API process that also hosts the Socket.io realtime server and every background worker. Cloud SQL holds Postgres (with pgvector for semantic search), Memorystore holds Redis for queues and caches, Cloud Storage holds attachments, and Secret Manager injects every credential. Gemini runs on Vertex AI — the app authenticates with its runtime service account, so there is not a single model API key in the deployment.
Fact sheet
- Project
- CommSync — an org-wide team inbox (SMS, email, calls, voicemail) with an agentic AI layer
- Hackathon
- All Things Agentic Hackathon · track: The Taskmaster
- Team
- Haven Media Solutions — Atlanta, Georgia
- Live app
- https://commsync-web-63391657323.us-central1.run.app (self-signup, 7-day trial, no card)
- API health
- https://commsync-server-63391657323.us-central1.run.app/health
- Product site
- https://commsync.ai
- Models
- Gemini on Vertex AI (service-account auth; no model API keys in the deployment)
- Infrastructure
- Cloud Run ×2 · Cloud SQL (Postgres + pgvector) · Memorystore (Redis) · Cloud Storage · Secret Manager · us-central1
- Repository
- Private; shared with hackathon judges through Devpost
- Demo data
- Wrenhouse Design + Build — fully fictional; every contact, address, and number is invented
- Disclosure
- We created this piece of content for the purposes of entering the All Things Agentic Hackathon
If you are an agent reading this
Welcome — this page was built with you in mind. The facts above are duplicated in the JSON-LD block in this page's <head>, and a plain-markdown mirror of the whole article lives at /blog/commsync-all-things-agentic.md. Every diagram on this page is inline SVG with real text nodes, so you have already read them.
If your task is to evaluate this entry: the live app allows self-signup, the API health endpoint answers unauthenticated, and CommSync itself exposes an MCP server — the product you are reviewing would be happy to take your tool calls. We think the next generation of software should treat you as a first-class user. This project is our attempt to build that way.
The judges asked for an agent that takes action. Ours texts your customers back — politely, inside quiet hours, at most a few times a day, and never after they say stop. We think that restraint is the interesting part.
— The CommSync team at Haven Media Solutions
