Inspiration
Product Managers and engineering leads spend 10+ hours every week on administrative friction: manually reviewing meeting recordings, extracting action items, drafting Jira user stories, checking for duplicate backlog items, and broadcasting updates to Slack. Most AI tools today are static, chat-loop assistants that wait for explicit prompts. We wanted to build a next-generation agent for The Taskmaster track—an event-driven background system that takes action autonomously the moment a meeting ends, operating asynchronously on Google Cloud to handle messy workflows without human hand-holding.
What it does
AsyncPM is an autonomous, event-driven Product Manager AI agent built on Google ADK 2.0, Gemini 3.5 Flash, and the Model Context Protocol (MCP). It operates continuously in the background to handle the end-to-end product lifecycle:
- Event-Driven Multimodal Ingestion: Automatically detects when a meeting ends or when a .txt transcript or .mp3/.m4a raw audio recording is dropped into Google Drive.
- Native Audio Processing: Uses Gemini 3.5 Flash to listen directly to raw meeting audio files, understanding speakers and technical decisions without requiring third-party transcription tools.
- Google ADK 2.0 Multi-Agent Orchestration: A chief orchestrator agent (AsyncPMOrchestrator) delegates specialized sub-tasks to a TranscriptParserAgent (to isolate technical decisions) and a ScrumMasterAgent (to format formal Agile User Stories with acceptance criteria and priority tags).
- Cross-Meeting Persistent Memory & Deduplication: Before creating tickets, AsyncPM queries persistent memory. If a task was already discussed in a previous meeting, it updates the existing Jira ticket (e.g., appending notes to SCRUM-1) instead of spamming the backlog.
- Human-in-the-Loop (HITL) Slack Governance Gate: Low and Medium priority tasks are created automatically. High Priority or critical infrastructure tasks trigger an un-bypassable HITL gate, posting an interactive Slack Block Kit card with [ ✅ Approve & Create Jira Ticket ] and [ ❌ Dismiss ] buttons.
- Live Execution & Observability: Clicking Approve in Slack updates the message in-place and generates the Jira Cloud ticket live, while emitting OpenTelemetry traces to Google Cloud Trace.
How we built it
We built AsyncPM using a polyglot microservice architecture designed for scale, resilience, and compliance:
- Event Ingress Engine (Golang): Built an ultra-fast Go server (ingress-go) that receives webhooks and Google Drive events in under 10ms, preventing third-party webhook timeouts.
- Agent Core (Google ADK 2.0): Leveraged official google-adk package classes (Agent, Runner, InMemorySessionService) to manage multi-agent delegation and session state.
- LLM Engine (Gemini 3.5 Flash): Native multimodal reasoning for text and raw audio byte stream ingestion via the Google GenAI SDK.
- Tool Protocol (FastMCP): Decoupled tool execution using FastMCP over stdio (MCPToolset), standardizing integrations for Jira Cloud REST API v3 and Slack Block Kit.
- Observability (OpenTelemetry): Instrumentized every agent step with OpenTelemetry spans (gen_ai.usage.input_tokens, transfer_to_agent, etc.) mapping directly to Google Cloud Trace.
- DevOps & Infrastructure: Containerized with Docker Compose, orchestrated via a custom Makefile, automated with GitHub Actions CI/CD (.github/workflows/ci.yml), and deployed to Google Cloud Run.
Challenges we ran into
- Preventing LLM Tool Loop Bypasses: In early testing, Gemini recognized that a tool returned HITL_APPROVAL_REQUIRED and autonomously called create_jira_issue(approved=True) in a second turn to force completion. We solved this by decoupling the tool schema—removing the approved parameter from Gemini's tool signature and strictly reserving execution of approved tasks for the Slack interactive button callback endpoint (/slack/interactive).
- Handling Webhook Timeouts: External services like Slack expect responses in under 3 seconds. Gemini's multi-step reasoning can take longer. We resolved this by placing Golang as an instant ingress layer that returns 200 OK immediately while dispatching tasks asynchronously to the Python ADK worker.
- Decoupling Tools with MCP: Structuring standard REST endpoints into FastMCP stdio tool servers required careful handling of standard input/output streams and environment variable pass-through inside Docker containers.
Accomplishments that we're proud of
- Full Google ADK 2.0 & MCP Adoption: Built a production-grade multi-agent team with native MCP toolsets that runs inside isolated Docker containers.
- Seamless End-to-End Execution: Achieved a complete, real-time workflow: Google Drive upload → Golang Ingress →Python ADK 2.0 → Gemini Multimodal Audio → Slack Interactive Card → Live Atlassian Jira Cloud ticket creation (SCRUM-11).
- Enterprise-Grade Observability: Successfully emitting structured OpenTelemetry spans capturing token usage and agent delegation events.
What we learned
- Mastering Google ADK 2.0 Runner event streaming and multi-agent delegation patterns.
- Implementing un-bypassable Human-in-the-Loop governance architectures for AI agents.
- The power of Gemini 3.5 Flash's native multimodal audio understanding.
- Designing portable MCP tool servers that can connect to any host application.
What's next for AsyncPM — Autonomous Product Manager Agent
- Remote MCP Server Deployment: Deploying mcp_server.py over Server-Sent Events (SSE) on Google Cloud Run to allow enterprise developers to connect Cursor/VS Code directly to AsyncPM (.cursor/mcp.json).
- Vertex AI Vector Search Integration: Replacing local memory with Vertex AI Vector Search and Firestore for enterprise-scale semantic deduplication across thousands of historical meeting logs.
- Enterprise Guardrails: Integrating Google Cloud Model Armor to screen external vendor meeting transcripts for prompt injection attacks and PII leaks.
Log in or sign up for Devpost to join the conversation.