尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
You say the goal, VOYA does the clicks.
Siri can tell you the weather. It can't fill out your benefits form. VOYA can.
VOYA is a voice-first browser agent for people who can't easily use a mouse or keyboard, such as someone with a spinal cord injury, limited mobility or a motor impairment. You tell it what you want done. VOYA finds the right website, reads the page, clicks, types and fills in forms. It reads each form question to you, so you can answer out loud, and it never submits anything without your yes.查看完整 README ↗You say the goal, VOYA does the clicks.
Siri can tell you the weather. It can't fill out your benefits form. VOYA can.
VOYA is a voice-first browser agent for people who can't easily use a mouse or keyboard, such as someone with a spinal cord injury, limited mobility or a motor impairment. You tell it what you want done. VOYA finds the right website, reads the page, clicks, types and fills in forms. It reads each form question to you, so you can answer out loud, and it never submits anything without your yes.
Built at Hack Midwest 2026 for the AWS challenge, best use of the Strands Agents SDK. VOYA runs on a Strands agent with Claude models on Amazon Bedrock.
Start on an empty tab and press the one button (or tap Control twice):
You: "What benefits do I qualify for?"
.gov eligibility checker, and clicks Start.While it works, the side panel shows every step the Strands agent takes, live.
Built for people who can't use a mouse
stop, stop everything, cancel, quiet, repeat, help, start over.Does whole tasks, on sites it has never seen
Safe and private by design
flowchart LR
U["You (voice or text)"] --> P["Side panel<br/>(Chrome extension)"]
P <-->|WebSocket, localhost| B["Python backend"]
B --> R{"Router"}
R -->|"scroll down, click 5"| D["Direct command<br/>no AI"]
R -->|"search cats, ask ChatGPT …"| S["Site memory<br/>instant, no AI"]
R -->|"everything else"| A["Strands agent<br/>Claude on Amazon Bedrock"]
A -->|tools| T["read_page · read_text · act<br/>fill_form · ask_user"]
D & S & T --> P
P -->|"page commands"| C["Content script<br/>in the web page"]
| Part | Where | Job |
|---|---|---|
| Side panel | extension/sidepanel/ | The one button, mascot, status, questions, Strands steps and stats, settings |
| Content script | extension/content.js | Numbers every button, link and field; clicks, types, reads text; finds search and chat boxes; waits for pages to settle |
| Background worker | extension/background.js | Relays commands to the active tab and reports page loads |
| Backend | backend/server.py | WebSocket bridge, command queue, page-load waiting, control words |
| Agent | backend/agent.py | Routing, the Strands agent, its tools and hooks, site memory, instant commands |
| Voice | backend/transcribe.py | Records from the system microphone and turns speech into text |
Three tiers, so simple things are instant:
click 5, scroll down, back, new tab youtube, settings overlay off.search cat videos, play wheelchair transfers on youtube, ask ChatGPT what is the biggest animal.| Strands feature | What VOYA does with it |
|---|---|
Agent loop + custom tools (@tool) | The agent plans each step itself using read_page, read_text, act (click, type, search, ask, open, new tab), fill_form and ask_user. Nothing is scripted per site. |
Hooks: BeforeToolCallEvent | Safety guard: before any click on a submit-type button, the hook asks the user, and cancels the tool call unless they say yes. |
Hooks: Before/AfterToolCallEvent | Stream every tool call to the side panel live, with status and timing. |
| Human in the loop | ask_user pauses the agent for missing details and confirmations, answered by voice or typing. |
| Structured output | New websites are classified into a typed SiteProfile (name, type, summary) for site memory. |
Cancellation (agent.cancel()) | stop and new commands interrupt the agent mid-task, cleanly. |
Metrics (event_loop_metrics) | After each task the panel shows Strands' own numbers: model calls, tool calls, tokens, cache hit rate and time. |
Prompt caching (CacheConfig) | Long form tasks reuse the cached prompt, tools and conversation. |
| Amazon Bedrock models | Claude Haiku 4.5 and Claude Sonnet 4.5, chosen per request. |
| Say | What happens |
|---|---|
| "What benefits do I qualify for?" | Finds the official checker and walks you through it |
| "What's the weather in Chicago tomorrow?" | Finds a forecast and tells you |
| "search cat videos" | Searches the site you're on (or Google) instantly |
| "play wheelchair transfers on YouTube" | Searches YouTube and opens a video |
| "ask ChatGPT what is the biggest animal" | Opens ChatGPT and sends the question |
| "open Claude in a new tab" | Opens it in a new tab |
| "read it out loud for me" | Reads the page or the last answer aloud |
scroll down · back · click 5 · list | Direct commands, instant |
stop | Interrupts the current task |
stop everything / start over | Stops the task, clears the queue, closes any question |
cancel | "No" at a question (nothing is submitted); otherwise stop |
quiet · repeat · help | Stop speaking · say it again · list the commands |
settings overlay on/off | Show or hide the numbers on the page |
settings speak on/off | Always read replies aloud, or only when asked |
You need:
us-east-11. Install
git clone https://github.com/aayush64x/voya.git
cd voya
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r backend/requirements.txt
2. Add AWS credentials
cp .env.example backend/.env # then fill in your keys
backend/.env is gitignored. Temporary credentials (for example from AWS Workshop Studio) expire after a few hours; paste fresh ones and restart the backend.
3. Start the backend
python backend/agent.py
Wait for [agent] Ready. The first time you use the mic, allow microphone access for your terminal app (on a Mac: System Settings → Privacy & Security → Microphone).
4. Load the extension
chrome://extensions and turn on Developer mode.extension/ folder.Shortcuts
python -m pytest tests -q # backend: routing, tools, safety hook, page waiting, site memory, control words
npm install && npm test # extension: page reading, forms, typing, the side panel and bridge
backend/
agent.py routing, Strands agent, tools, hooks, site memory, instant commands
server.py WebSocket bridge, command queue, page-load waiting, control words
site_memory.py what each site is and where its search/chat boxes are
transcribe.py microphone capture and speech-to-text
extension/
manifest.json MV3 manifest, permissions, shortcut
background.js relays commands to the active tab, page-load events
content.js reads and acts on the page
sidepanel/ the VOYA panel: one button, mascot, states, steps, settings
js/bridge.js connects the panel to the backend
tests/ pytest and jest suites
docs/ design brief, SSA questionnaire walkthrough, test log
Built at Hack Midwest 2026 by Rylan Begaye, Aayush Nakarmi and Ari Lee
Side panel design: Soft Glass Companion, by our teammate.
Powered by the Strands Agents SDK, Claude on Amazon Bedrock, and Three.js for the mascot.