Inspiration

Every sprint, our team spent 30+ minutes copying standup notes into GitHub Issues. Comments like "fix the auth bug" or "update the docs" would get lost in Slack threads. I wanted an agent that actually does the work instead of just chatting.

What it does

DevPulse listens to GitHub webhooks (issue comments & PR comments), reads the conversation with Gemini Flash, extracts action items / blockers / decisions, and automatically creates real GitHub Issues with proper titles, context, and labels. It then posts a summary back to Slack.

How we built it

  • Google ADK orchestrates the agent and tool calling
  • Gemini 3.5 Flash extracts structured action items from unstructured developer chatter
  • Cloud Run hosts the Flask webhook receiver (scales to zero, costs nothing when idle)
  • GitHub API creates real issues in a sandbox repo
  • In-memory session service manages agent state (architecture supports Firestore migration for production)

Challenges we ran into

The Python ADK's FirestoreSessionService doesn't exist (it's Java-only), so I had to pivot to InMemorySessionService and design the architecture so Firestore can be swapped in later without touching agent logic. I also fought Cloud Run cold starts until I realized the agent imports must be lazy-loaded.

Accomplishments that we're proud of

  • The agent actually creates real tickets on real GitHub — not a mock demo
  • End-to-end latency is under 12 seconds from comment to ticket
  • Zero idle cost: Cloud Run sleeps when no webhooks are firing

What we learned

  • ADK's tool-calling is powerful but requires extremely explicit prompts ("You MUST call the tools")
  • Event-driven agents are more reliable than polling architectures
  • Lazy initialization is critical for serverless deployments

What's next for DevPulse

  • Wire real Slack API (currently stubbed)
  • Migrate to Firestore for cross-session memory
  • Add a dashboard to review agent-created tickets before they go live

Built With

Share this project:

Updates

Submission history