Inspiration
Every day my inbox mixes real opportunities — freelance inquiries, bug reports from people using my projects — with routine noise. I kept thinking about how much of my own response to these emails was mechanical: read, classify, respond, repeat. The Taskmaster track's focus on agents that act autonomously in the background, rather than waiting for a prompt, felt like the right excuse to actually automate it instead of just thinking about automating it.
What it does
Inbox Task Router watches a Gmail inbox and, without any human clicking anything:
- Classifies each new email's intent using Gemini 3.5 Flash
- If it's a freelance inquiry, it drafts a personalised proposal reply (referencing my real past projects) and saves it directly to Gmail Drafts
- If it's a bug report, it automatically files a GitHub issue with the relevant details
- Labels the email
agent-handledso it's never processed twice - Runs on a recurring schedule via GitHub Actions, so it keeps working with nobody watching it
How we built it
I'm a beginner to agentic development, so I built this incrementally, testing every piece in isolation before wiring anything together: first a standalone Gemini API call, then Gmail OAuth and message parsing, then the intent classifier, then the two action branches (Gmail Drafts API for proposals, GitHub's REST API via PyGithub for issues), and only then the full polling loop that ties it all together with error handling so one failed API call doesn't take down the whole agent.
The stack: Python, the Gemini API (Google GenAI SDK) with gemini-3.5-flash, the Gmail API for reading/drafting, PyGithub for issue creation, and GitHub Actions as the scheduled runtime.
Challenges we ran into
The biggest challenge wasn't the AI logic — it was infrastructure. I spent significant time on Windows path/environment issues (files landing in the wrong folder, venv activation quirks) and OAuth setup (consent screens, test users, the "unverified app" warning flow). The hardest blocker was Google Cloud billing verification: across two separate Google accounts and both UPI and card payment attempts, I repeatedly hit a OR_BACR2_59 billing setup error that never resolved before the deadline, which blocked deploying to Cloud Run specifically. Rather than let that stall the whole submission, I pivoted to deploying the agent via GitHub Actions on a schedule — free, reliable, and something I could actually verify working end-to-end. The Cloud Run Dockerfile and deploy command are still in the repo, ready to run the moment that billing issue clears.
Accomplishments that we're proud of
Getting a genuinely autonomous, multi-step pipeline working end-to-end as a beginner — real emails in, correct classification, correct branching action, zero manual intervention — and proving it live, twice, with two different real test emails producing two different real actions (a Gmail draft and a GitHub issue). Also proud of not letting an infrastructure roadblock outside my control stop the submission — adapting to a working deployment path under deadline pressure felt like its own small win.
What we learned
I learned the practical difference between "calling an LLM" and "building an agent" — the routing logic, state tracking (via Gmail labels), and failure handling matter as much as the classification prompt itself. I also learned a lot about OAuth in headless/scheduled contexts, and that GitHub Actions is a genuinely solid, free option for lightweight scheduled agents when cloud billing setup becomes a blocker.
What's next for Inbox Task Router
- Resolve the Cloud Run billing issue and complete the Google Cloud deployment as originally planned
- Add more intent categories beyond freelance/bug-report (e.g. meeting requests, spam/newsletter filtering)
- Add a Firestore-backed log of every processed email for auditability
- Expand the freelance proposal drafter to pull dynamically from a live portfolio instead of a hardcoded project list
Built With
- agentic-ai
- automation
- docker
- gemini
- gemini-3.5-flash
- github-actions
- github-api
- gmail-api
- google-cloud
- google-cloud-run
- google-genai-sdk
- googleapis
- llm
- oauth2
- pygithub
- python
- python-dotenv
Log in or sign up for Devpost to join the conversation.