Project Info
About BusyBrain
Inspiration
I'm a Computer Engineering student who runs on a busy schedule, which means a calendar that just tells me when something is happening has never been the problem. The problem is everything invisible around the event: the travel time, the study blocks I never schedule, the social plans that fall apart because nobody accounts for how drained everyone already is by 6pm.
What it does
BusyBrain is a multi-agent planning system that doesn't just place events on a calendar. It explains why it placed them there. Every study block, workout, and meal reminder comes with a real reason computed from my actual energy windows: "matches your high-energy window," or "your energy is only medium here, lower than ideal for this task." A dedicated "Today's Flow" view turns that same logic into a real energy chart for the day, with each task scored as a Peak Match, Energy Dip, or Steady fit against my actual schedule. It's not a decorative gauge, it's an honest computation. When I want to meet a friend, BusyBrain ranks shared time windows using real signals: calendar load, transition gaps, and how demanding the prior event was. It explains exactly why one slot beats another. It then searches the live web (via Browserbase) for a real nearby venue, pulling actual address, hours, and phone number from the venue's own site, with a layered fallback (fast fetch, then a full browser session, then an honest "nothing found") so it never fabricates details about a place that doesn't exist online the way you'd expect. How I built it The backbone is a multi-agent system on Fetch.ai's uAgents framework. An orchestrator fans a request out to three specialist agents (study, calendar, wellness) registered on the Almanac, each calling ASI:One's hosted LLM, with the orchestrator synthesizing their responses into one plan. On top of that sits a deterministic scheduling core: energy-window matching, focus-block splitting, drive-time buffers. That means the "why this time" explanations are literally the scoring logic that picked the slot, not an LLM guessing after the fact. The frontend started as a Claude Design mockup to nail the visual identity (a soft jellycat aesthetic) before any backend existed, then got rebuilt as plain HTML/JS talking to a real FastAPI layer. Same design, but every number on screen is now a real computation. For location intelligence, I integrated Browserbase across three of its primitives: search.web() to find candidate venues, fetch_api for fast page reads, and a Stagehand browser session as an automatic fallback when a site's bot protection blocks simple fetching. I also built real content-extraction logic that searches fetched pages for address, phone, and hours patterns and explicitly skips promotional banner text. That's the difference between a demo that looks impressive once and one that's actually reliable across a dozen different sites. Challenges I ran into A four-hour debugging chain that came down to one stray environment variable. A placeholder API key exported into a shell profile months earlier silently overrode the correct .env value, breaking ASI:One auth in a way that looked like a credentials problem but wasn't. Two of my four uAgents never registered an Agentverse mailbox, invisible until I checked each agent's dashboard individually. Real websites fight back. Early venue lookups returned bot checkpoint pages instead of content. I built a tiered fallback (cheap fetch, then full browser, then honest failure) and smarter extraction that scores sentences by whether they contain a real address, phone, or hours pattern, actively skipping promotional text that happened to load first. Pika MCP access was blocked for live video generation across every path I tried. The chat based MCP connection, the developer API signup, and the hackathon's dedicated Claude Code setup flow all hit account tier restrictions, with the final attempt blocked by an authentication issue before it could complete. I did successfully generate one video through Pika MCP using a licensed stock reference image, confirming the integration itself works end to end. The blocker was specifically live, in app generation access on my account tier, not the technical integration. Rather than fake a live connection that wasn't real, the app's invite flow honestly reflects this: it shows the real permission gating UI and a "sent to Pika" confirmation rather than claiming a video renders live in app. What I learned The redundancy critique was right, and fixing it taught the actual lesson: an agent earns its place by being accountable for its decisions, not just fast at making them. A static calendar app can place a block on a grid. Mine has to be able to say why, and mean it, even when that means admitting a feature didn't fully work.
BusyBrain Multi-Agent Planner
BusyBrain turns an overwhelming week into a humane plan. Instead of producing a generic to-do list, one public orchestrator coordinates three independently registered Fetch.ai uAgents that reason about study workload, calendar logistics, and sustainable pacing. The final answer includes the invisible work that ordinary calendars miss: setup, travel, food, transitions, breaks, and recovery.
Why agents?
The specialists have intentionally different goals. The Study Planner protects learning progress, the Calendar Planner protects time constraints, and the Wellness Planner protects the student's capacity. The orchestrator must reconcile their recommendations into one usable plan. This makes agent coordination central to the product rather than an eligibility wrapper around a chatbot.
Agent network
| Agent | Responsibility | Port | Address |
|---|---|---|---|
| BusyBrain Orchestrator | ASI:One Chat Protocol entry point and final synthesis | 8001 | agent1q2qrnqd6v20qx0ltq2pnt2r85fadkekgs2js07w84h9jj87lhgm2crewv4j |
| Study Planner | Focus rhythms, workload, deadlines, and daily study limits | 8002 | agent1qdchqqjrvhyvx9cxxtmgwy498zwscn9ac9yqja43cqv90w3q3asq70rjrww |
| Calendar Planner | Fixed events, conflicts, travel, preparation, and transitions | 8003 | agent1qvv9585yydz2r9p3n245t9y6l46kqpsa0e299n93nl5y60f6lgfwx64wygz |
| Workload & Social Context | Calendar-pressure signals, fair meetup timing, recovery, and rationale | 8004 | agent1q0pkvdgsxv4w8r5lqh2chmlhantxtlk28e5yh9g06ah5xwnuvqznqzenkwe |
End-to-end flow
- A user sends a natural-language request from ASI:One.
- BusyBrain acknowledges the Chat Protocol message and creates a request ID.
- It dispatches a typed
PlanningRequestto the Study, Calendar, and Workload & Social specialists. - Each specialist returns a signed
SpecialistResponse. - BusyBrain verifies each sender, waits for all three, resolves conflicts, and returns ranked options through the Chat Protocol.
- The user replies
choose option 1,choose option 2, orchoose option 3. - BusyBrain persists a confirmed-event action receipt and returns a populated Google Calendar action link—all inside the ASI:One conversation.
If a specialist is unavailable, the orchestrator finalizes after 45 seconds with the verified partial results and names the missing specialist instead of hanging.
Local setup
Python 3.12 or 3.13 is recommended.
python3.13 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
Add an ASI:One key and four unique private seeds to .env. Never commit .env;
changing a seed after registration changes that agent's address.
Run each agent in its own terminal:
make orchestrator
make study
make calendar
make workload
Open each Inspector URL, choose Connect → Mailbox, and keep all four processes running for the live demo. Each agent needs its own mailbox.
Before testing in ASI:One, validate the exact same Chat Protocol route locally in a fifth terminal:
make smoke-test
The client prints TEST PASSED after the orchestrator has collected all three
specialist responses and returned the final plan. Press Ctrl+C after the result.
ASI:One demo prompt
Find me 45 minutes with Maya in the next seven days, preferably in the afternoon and not right after class. Compare both calendars, give me the three best options, and explain why the top time is fair to both of us.
Then reply:
choose option 2
The terminal logs show the orchestrator dispatching the request and receiving three specialist responses before returning the synthesized plan. The Workload & Social agent calls the deterministic ranking engine against seeded calendars, so the times and fit scores are evidence rather than invented availability. The second turn produces a durable confirmation receipt and a Google Calendar action.
Pika invitation handoff
After the user approves a meetup time, the Streamlit experience prepares a consent-gated Pika invitation using a saved cartoon avatar rather than a real person's face. The creative concept turns her wrist calendar into a glowing jellyfish portal whose bubbles assemble into the confirmed date, time, and place.
The Pika MCP workflow is deliberately multi-step: generate a short spoken invitation, animate the approved avatar to that audio, and render the confirmed event details as stable mobile-safe text. The output is an 8-second vertical clip displayed beside the calendar confirmation. Scheduling remains independent, so a media-provider delay can never lose or invalidate the confirmed event. This combines an original visual story, privacy-aware generation, and a shareable action outcome instead of treating video as decoration.
Existing product prototype
The repository also contains a Streamlit interface and deterministic scheduling engine:
streamlit run app.py
python main.py
These modules demonstrate the broader product direction; the Agentverse workflow is
implemented by agent.py, study_agent.py, calendar_agent.py, and
wellness_agent.py.
For the complete browser demo (calendar UI + interactive Pika message), run:
.venv/bin/uvicorn api:app --reload --port 8000
python3 -m http.server 8080
Then open http://localhost:8080/. Keep both processes running during the demo.
To start the website, API, and all four Fetch.ai agents from one terminal instead:
make app
Press Ctrl+C once to stop every Busy Brain process.
Safety and scope
BusyBrain provides planning support, not medical diagnosis, therapy, or professional academic advice. Specialist responses are treated as recommendations, and missing schedule information is surfaced as an assumption rather than silently invented.
Hackathon submission checklist
- Public GitHub repository
- Four Agentverse profile links documented
- Shared ASI:One chat session
- Three-to-five-minute demo video
- Devpost explanation and architecture
Tests
python -m unittest discover -s tests -v
The suite covers natural-language constraints, collision prevention, recovery-gap ranking, option selection, durable confirmation, and Google Calendar handoff URLs.
Analysis
View
Metric
- 7
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- OpenAIIn code
- PythonIn code
- StreamlitIn code
- AnthropicClaimed
- CSSClaimed
6 of 8 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
1.0 MB
Source files
73
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
miaaoyama/BusyBrain
89 files · 8.2 MB · @ 192c2b9
Structure
Interface
14 files · 16%Screens, components and styles rendered to the user.
Application logic
23 files · 26%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Markdown76%
- HTML12%
- Python11%
- Shell0%
- JavaScript0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 8- browserbase
- fastapi
- openai
- python-dotenv
- stagehand
- streamlit
- uagents
- uvicorn
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.