Inspiration Amazon’s hackathon put Fire TV, Alexa+, Ring, and Bee in one brief, and the Alexa+ track asked for an agent that can use tools, not a chatbot that only talks. The idea behind Axio was a personal operator for a real evening: unfinished work, a deadline, and time that has to stay protected for interview preparation. The operator should show its plan before it changes anything.
What it does Axio takes one instruction:
Organize my evening. Prioritize my unfinished tasks and leave time for interview preparation.
It reads unfinished tasks from SQLite, orders them by priority and due date, and shows that plan in the operator. Preview does not create or edit anything. The interview-preparation block is created only after an explicit confirmation. Running the same instruction again reuses that task instead of adding a duplicate. Completed and cancelled work stays out of the evening order. Every status on the screen comes back from the API.
The agent in this build is deterministic. It recognizes that evening instruction. It does not call a live language model, and it is not a live Alexa+ skill.
How we built it The backend is FastAPI, SQLAlchemy, and SQLite, with Pydantic v2 for validation. Tools are exposed with the official Python MCP SDK over Streamable HTTP at /mcp, using the 2025-11-25 specification. The tools are get_tasks, create_task, update_task_status, and get_user_preferences.
POST /api/agent/run builds the plan in-process. dry_run previews it. approve is required before a write. The operator is a Next.js, React, and TypeScript app with Tailwind. It shows a four-step path: instruction, preview, approval, and a verified result. The task ledger uses the same order as the plan.
Challenges we ran into The first API root returned {"detail":"Not Found"}, which is a bad first screen in a demo, so / is now a service page for browsers and a JSON index for clients. Naive SQLite timestamps were displayed as the wrong local time until they were serialized as UTC. A wildcard CORS origin could not be combined with credentialed requests, so the API allow-list had to name the local operator origins. MCP tests wrote into the real demo database because those tools open their own session, so the ledger hides finished rows until they are expanded. A root .gitignore rule for lib/ also ignored web/src/lib, and that would have shipped an operator with no API client.
Accomplishments that we're proud of Preview is actually read-only. Approval is a separate, explicit step, and the execute call uses the instruction that was previewed. A second run does not create a second interview task. The UI reports skipped and failed steps from the backend instead of inventing a success. The suite is 31 tests, covering tasks, MCP, ordering, approval, and duplicate prevention.
What we learned An agent demo is only convincing when the screen and the database agree. Human approval has to be a real gate in the API, not a button that the client pretends was checked. MCP Streamable HTTP is enough to expose a small, validated tool set, and the hard part is keeping preview, execution, and the ledger on one contract.
What's next for Axio - AI Personal Operator Interpret more than the evening instruction, connect a real Alexa+ Agent Skill or MCP client, and add tools beyond the task list. The approval record should become a short audit trail, and the MCP test suite should stop writing into the demo database.
Built With
- context
- css
- fastapi
- html
- http
- javascript
- mcp
- model
- next.js
- node.js
- protocol
- pydantic
- pytest
- python
- react
- sdk
- sqlalchemy
- sqlite
- streamable
- tailwind
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.