-
-
Architecture: 6 Strands agents on Amazon Bedrock AgentCore Runtime, AgentCore Memory, Lambda, DynamoDB, EventBridge.
-
Everything happens in the background: nightly research, re-checks, and interruptions only when it matters.
-
Skip it with "too big" and the coach agent splits the task into small steps.
-
The one decision card: why you're stuck, what waiting costs, 3 priced options and a drafted email.
-
Nightly re-check found nothing material, so it stayed quiet.
-
Multi-agent pipeline: triage, research, cost of waiting and decision agents, working overnight.
Inspiration
I lost the first hours of this hackathon unable to pick an idea. I opened tab after tab of research and kept "just checking one more thing". It's the same thing that happens every time I try to buy a laptop or sort out insurance: the research never ends, so the decision never happens.
Most procrastination isn't laziness. Tasks sit on a list for months because the first step is research, and that step is fuzzy, boring and has too many options. Reminder apps remind you, and shopping assistants answer questions, but nothing does the part that stops you from starting.
What it does
You add the things you keep putting off in the web app (or text them to the Unstuck Telegram bot, which is included in the repo), such as buy a MacBook for coding, get health insurance for my parents or email my landlord about the deposit.
Overnight, a team of Strands agents takes over each task:
- Triage works out what kind of task it is and why you're probably avoiding it: unclear first step, too many options, perfectionism, boring or stressful, a cost that feels far away, or overwhelm.
- Research searches the web on a hard budget (so it can't spiral like I do) and collects current prices, options, deadlines and the exact link or form.
- Cost of waiting works out what delay really costs, with dates. It also says so honestly when waiting is the smarter move.
- Decision card writes one card: a clear recommendation, at most 3 options, at most 3 reasons, drafted text for the unpleasant part, and cited sources.
In the morning you get one card, never the whole pile. It takes about 2 minutes, with Done / Not today buttons. With the Telegram bot connected, the card is sent to you as a message.
When you skip it, Unstuck asks why and a coach agent picks what to do:
- Too big: splits it into small steps.
- Not sure: researches your specific doubt.
- No time: snoozes it, never past a real deadline.
- Don't care: drops it guilt-free, unless waiting has a serious cost.
Every night it re-checks the decisions you haven't made yet. A change-detector agent compares the new card with the old one, and Unstuck only flags it when something material changed: the price of the pick moved, or an offer or deadline appeared or ended. Otherwise it stays silent. It interrupts you only when it matters.
Every skip and completion goes into AgentCore Memory, so Unstuck learns your patterns over time.
Unstuck never buys, pays or sends anything on its own: you always click the final button.
How we built it
- Strands Agents SDK, multi-agent: six specialised agents, each with one job, handing structured output to the next.
- Triage, cost of waiting, the card and the change detector use structured output with Pydantic schemas.
- Research is a tool-using loop with Tavily web search.
- The coach chooses exactly one of four
@toolactions. - The research budget is enforced by Strands
limits(turns and tokens), not by the prompt.
- Amazon Bedrock: Amazon Nova 2 Lite for triage, research, cost of waiting, change detection and coaching; OpenAI gpt-oss-120b for the decision card (it wrote the most decisive cards in our comparison).
- Amazon Bedrock AgentCore Runtime: hosts all agents (direct code deploy).
- AgentCore Memory: user-preference and semantic strategies turn skip and completion events into long-term procrastination patterns.
- AWS Lambda + Function URL: runs the FastAPI backend and web UI.
- DynamoDB stores tasks.
- Research runs as async Lambda self-invocations.
- EventBridge Scheduler starts the real 2 AM research and re-check run (plus an 8 AM morning card when Telegram is connected).
- Telegram bot (in the repo, set up with one script): a webhook on the same Lambda, verified with Telegram's secret token. It captures tasks, sends cards with inline buttons, and handles skip reasons as button taps. The public live demo is the web app.
- Grounding guards in code:
- Any URL on a card that research didn't actually return is removed.
- Deadlines in the past are thrown out.
- A "drop it" on a task with a serious cost of waiting is refused and turned into a snooze.
- A re-check "change" that is just research noise (same pick, price within 3%, no new offer or deadline) is vetoed, so it never messages you for nothing.
Challenges we ran into
- Structured output loops: the card model sometimes sent
nullfor a list, failed validation, and retried forever. We made nulls fall back to defaults and capped structured-output retries. - Invented links and stale offers: early cards had made-up product URLs and recommended an offer that had ended three weeks earlier. That led to the code-level grounding guards and explicit date rules.
- Out-of-date model knowledge: triage asked research about old MacBook models, so we told triage never to name products and to let research find what's current.
- False alarms from re-checks: web results vary between runs, so the first change detector flagged "price range expanded" for the same laptop at the same price. We made silence the default and added a code guard that compares the pick and its price.
- Showing "overnight" in a demo: a per-user demo clock ("Skip to tomorrow") runs the real overnight pipeline in about 30 seconds.
Accomplishments we're proud of
- The product design comes straight from why people procrastinate, and each cause maps to a specific agent behaviour.
- The skip loop: asking "why?" and responding differently is the moment that feels like help instead of nagging.
- It's fully deployed on AgentCore and works end to end on real web data.
What we learned
The agent's real job isn't answering questions; it's ending the research. Budgets, "more research won't change this" and only ever showing one card turned out to matter more than extra intelligence.
What's next
- Email capture, so you can forward a bill or notice directly.
- Calendar booking for the "no time" answer.
- An optional accountability buddy.
- More countries beyond India.
Try it
- Code: https://github.com/bharath22180/unstuck
- Live demo: https://23tlxxntasbw5bsckygpgbcybe0jmybo.lambda-url.ap-south-1.on.aws/ (click "Skip to tomorrow" to fast-forward a night). It runs on an AWS Free plan account that ends on 15 Sept 2026. If it's offline, the video shows the deployed system end to end and the README explains how to run it locally.
Built With
- agentcore-memory
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-dynamodb
- amazon-eventbridge
- amazon-nova
- aws-lambda
- fastapi
- gpt-oss
- python
- strands-agents
- tavily
- telegram
Log in or sign up for Devpost to join the conversation.