Project Info
This project did not submit a demo video on Devpost.
Inspiration
Millions of hours are collectively wasted on computers every single day. Instead of going out to lunch with your friends, you're resolving repetitive support tickets and answering questions that have been asked 50 other times. Steve Jobs said in the 1980s that computers should be natural extensions of humans, like bicycles for the mind. Moreover, he said that computers would anticipate exactly what the user wants to do next by themselves. Over 40 years later, computers are still fully reliant on users directly interacting through the mouse and keyboard interface. Turing is built to modernize this with context of how you use your computer and with a faster speed and degree of accuracy than the blind desktop agents that exist today are just by themselves.
What it does
Turing watches how you do tasks, how you reply to messages, how you work, and personalizes workflows to follow your patterns and automate your desktop use while you go out and grab a meal with your friends.
How we built it
We combine context retained from recorded desktop workflows processed and encoded by Vision Language Models (Gemini 2.5 Flash), which analyze screen recordings to extract semantic actions. For instance, it learns "click Submit button" and not just "click at co-ordinates (543, 210)". These workflows are decoded and executed by personalized desktop agents powered by Gemini Computer Use, which provides vision-based screen understanding and adaptive execution. Workflow storage and retrieval uses Snowflake Cloud, storing semantic actions, parameters, and metadata. Workflow matching uses Snowflake Vector Search for direct semantic similarity analysis, comparing user requests to stored workflow intentions. We enable speech-to-text via Groq Whisper and TTS human-like responses with ElevenLabs (using Eleven Turbo v2.5) through LiveKit for real-time voice pipelines. The voice agent uses Groq Llama 3.3 70B for conversational intelligence. This enables a truly autonomous agent that learns to automate your workflows with no hands required.
Challenges we ran into
One of the major challenges from the start was to get the desktop agent to convert raw text instructions into actionable steps from the desktop assistant. Another huge challenge was to encoding the actions using the screen recordings. We ran into a few issues with screen recording alongside tkinter on python, since the process would get locked and Mac OS would throw a SIGTRAP error. So, we switched to using the AVFoundation codex with ffmpeg to record videos on a subprocess and that resolved the screen recording bug with Mac OS. It took us several iterations of trial and error to find the right amount of detail that the VLM would output based on screenshots and action timestamps, such that the executor agent can both generalize and reproduce workflows that the user would have recorded earlier.
What's next
One of the immediate first things would be to make it come with TONS of pre-recorded workflows for diverse software and use-cases, so that it can be smarter on new workflows but also not need a recording for existing ones. We would also love to make it easier to chain workflows so you can mix-and-match steps or build on top of other workflows, kinda like Lego. Another idea we would love to explore is to enable all of this via the cloud. This could let you, theoretically, chain and run complicated workflows on your computer using your phone, even when you are nowhere physically close to it.
Turing - Learn by Observation
Turing is an AI agent that learns by watching you work. Like an intern that shadows you, learns your workflows, and then executes them autonomously.
π― Vision
Imagine telling your computer:
"Open my DataVis class on Canvas and clone the notebook"
And it just... does it. Because it watched you do it once for your Machine Learning class.
That's Turing.
β¨ Features
π΄ Record Mode
- Click "record", perform your workflow naturally
- System captures:
- Every click, scroll, and keystroke
- Screenshots before/after each action
- Visual context (what you clicked on)
- OCR of text elements
π§ Visual Learning
- AI analyzes your recording to understand:
- What steps you took
- What the workflow accomplishes
- Which values are parameters (e.g., class names)
- Visual signatures of UI elements
π Smart Replay
- Tell it what you want in natural language
- System:
- Finds matching workflow
- Extracts new parameters from your request
- Executes workflow with visual guidance
- Uses OCR to locate elements dynamically
π Workflow Library
- Store unlimited workflows
- Search by name, description, tags
- Export/import workflow packages
- Track usage statistics
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββ
β User Interface β
β "Open my DataVis class on Canvas" β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββ
β Workflow Matching Engine β
β β’ Find similar learned workflows β
β β’ Extract parameters from user request β
β β’ Calculate confidence score β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββ
β Visual Memory β
β workflows/ β
β βββ {uuid}/ β
β β βββ metadata.json β
β β βββ steps/ β
β β β βββ step_001.json β
β β β βββ step_001_before.png β
β β β βββ step_001_after.png β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββ
β Visual-Guided Execution β
β 1. Take screenshot β
β 2. Use OCR to find target element β
β 3. Use Vision LLM to understand UI β
β 4. Calculate click coordinates β
β 5. Execute action β
β 6. Verify state change β
βββββββββββββββββββββββββββββββββββββββββββββββ
π Quick Start
Installation
# Navigate to backend directory
cd Turing/backend
# Activate virtual environment
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
Set API Key
export GOOGLE_API_KEY='your_gemini_api_key_here'
Run Enhanced Agent
python agent_enhanced.py
π Usage Guide
Recording a Workflow
-
Start the enhanced agent:
python agent_enhanced.py -
Enter
recordcommand -
Provide workflow details:
Workflow name: Open Canvas Class Description: Navigate to Canvas and open a specific class Tags: canvas, education -
Perform your workflow naturally - the system is watching!
- Open browser
- Navigate to canvas.asu.edu
- Click on your class
- Do whatever you need to do
-
When done, enter
stopcommand -
System analyzes and identifies parameters:
π Identified Parameters: - class_name: Name of the class to open Example: Machine Learning β Workflow saved!
Using a Learned Workflow
Just describe what you want:
π¬ Open my DataVis class on Canvas
β¨ Found matching workflow: Open Canvas Class
Confidence: 90%
Execute this workflow? [Y/n]: y
π¬ Executing learned workflow...
β
Done!
List All Workflows
π¬ list
π Learned Workflows:
=================================================================
Open Canvas Class
ββ Navigate to Canvas and open a specific class
Steps: 3 | Uses: 5
Parameters: class_name
Tags: canvas, education
Download Bank Statement
ββ Log into bank and download statement PDF
Steps: 8 | Uses: 2
Parameters: month, year
Tags: finance, banking
π οΈ Components
1. visual_memory.py
Stores workflows with complete visual context.
from visual_memory import VisualWorkflowMemory
memory = VisualWorkflowMemory()
# Create workflow
wf_id = memory.create_workflow(
name="My Workflow",
description="What it does",
tags=["tag1", "tag2"]
)
# Add steps
memory.add_step(
workflow_id=wf_id,
action_type='click',
action_data={'x': 500, 'y': 300},
screenshot_before=screenshot,
screenshot_after=screenshot,
visual_context={'clicked_text': 'Submit'}
)
# Finalize
memory.finalize_workflow(wf_id, parameters=[...])
2. recorder.py
Monitors user actions and captures visual context.
from recorder import WorkflowRecorder
recorder = WorkflowRecorder()
# Start recording
wf_id = recorder.start_recording("My Workflow")
# User performs actions...
# System automatically captures everything
# Stop recording
recorder.stop_recording()
3. visual_analyzer.py
Extracts meaning from screenshots using OCR and computer vision.
from visual_analyzer import VisualAnalyzer
analyzer = VisualAnalyzer()
# Analyze what was clicked
context = analyzer.analyze_click_context(
screenshot,
click_x=500,
click_y=300
)
print(context['clicked_text']) # "Submit Button"
# Find text in screenshot
matches = analyzer.find_text_in_screenshot(
screenshot,
target_text="Machine Learning"
)
for match in matches:
print(f"Found at: {match['center']}")
4. agent_enhanced.py
Main interface with recording and learned execution.
π¬ Advanced Topics
Parameter Identification
The system uses Google's Gemini LLM to analyze workflows and identify parameters:
Workflow: Open Canvas Class
Steps:
1. Navigate to https://canvas.asu.edu
2. Click on "Machine Learning"
3. Click on "Assignments"
AI identifies:
- "Machine Learning" is a parameter (varies per class)
- "Assignments" is NOT a parameter (always same)
Visual Element Matching
When executing with new parameters, system uses multiple strategies:
- OCR Text Matching: Find text "DataVis" on screen
- Visual Similarity: Compare to recorded element appearance
- Position Heuristics: Similar elements often in same region
- Vision LLM: Ask AI "where is the DataVis class link?"
Confidence Scoring
if confidence > 0.9:
# Execute automatically
elif confidence > 0.7:
# Ask for confirmation
else:
# Ask user to demonstrate
π Storage Format
Workflows are stored as structured directories:
workflows/
βββ 550e8400-e29b-41d4-a716-446655440000/
β βββ metadata.json
β βββ steps/
β β βββ step_001.json
β β βββ step_001_before.png
β β βββ step_001_after.png
β β βββ step_002.json
β β βββ step_002_before.png
β β βββ step_002_after.png
metadata.json:
{
"workflow_id": "550e8400-...",
"name": "Open Canvas Class",
"description": "Navigate to Canvas and open class",
"tags": ["canvas", "education"],
"created": "2025-10-25T10:30:00",
"status": "ready",
"steps_count": 3,
"parameters": [
{
"name": "class_name",
"type": "string",
"example": "Machine Learning",
"step": 2,
"description": "Name of class to open"
}
]
}
step_001.json:
{
"step_id": "step_001",
"step_number": 1,
"timestamp": 1698234567.89,
"action_type": "click",
"action_data": {
"x": 500,
"y": 300,
"normalized_x": 340,
"normalized_y": 314
},
"visual_context": {
"clicked_text": "Machine Learning",
"element_type": "link",
"ocr_confidence": 0.95
},
"screenshot_before": "step_001_before.png",
"screenshot_after": "step_001_after.png"
}
π Use Cases
Customer Support
Record: "Resolve ticket #1234 for product XYZ"
Execute: "Resolve ticket #5678 for product ABC"
β System learns ticket resolution workflow
Data Entry
Record: "Enter invoice from ACME Corp"
Execute: "Enter invoice from Widget Co"
β Learns invoice entry pattern
Testing
Record: "Test login flow with valid credentials"
Execute: "Test login flow with invalid credentials"
β Learns UI testing patterns
Research
Record: "Download paper from arXiv and save to Papers folder"
Execute: "Download paper [URL] and save to Papers folder"
β Learns research paper workflow
π§ Current Limitations
In Beta
- Visual-guided execution: Core logic implemented, needs refinement
- OCR accuracy: Depends on text clarity and font
- UI variations: Works best with consistent UI layouts
- Cross-application: Currently optimized for web applications
Coming Soon
- Advanced visual element matching with ML
- Support for conditional logic in workflows
- Workflow editing and debugging tools
- Multi-monitor support
- Windows/Linux support
- Browser extension for better web automation
π€ Contributing
This is research-grade software under active development. Contributions welcome!
Areas of focus:
- Improving OCR accuracy
- Better parameter identification
- Visual element matching algorithms
- Cross-platform support
- UI/UX improvements
π License
MIT License - See LICENSE file
π Acknowledgments
Built with:
- Google Gemini AI (computer use & vision)
- PyAutoGUI (screen control)
- EasyOCR (text extraction)
- pynput (action monitoring)
Inspired by:
- Robotic Process Automation (RPA) systems
- Programming by Demonstration research
- The dream of truly intelligent assistants
π Documentation
See additional documentation:
ARCHITECTURE.md- System architecture and designRESEARCH.md- Deep dive into technologies usedcomputer_use_simple.py- Core computer controlagent_interface.py- Original agent interface
Made with β€οΈ for CalHacks 2025
Teaching computers to learn by watching, one workflow at a time.
Analysis
View
Metric
- 27
- 10
- 4
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
- CSSIn code
- FastAPIIn code
- Hugging FaceIn code
- JavaScriptIn code
- LangChainIn code
- Next.jsIn code
- OpenAIIn code
- PythonIn code
- PyTorchIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Google GeminiClaimed
12 of 13 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig
- CursorConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
2.2 MB
Source files
251
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
ekagra1602/Turing
326 files Β· 147.5 MB Β· @ 4191e37
Structure
Interface
5 files Β· 2%Screens, components and styles rendered to the user.
API & routing
5 files Β· 2%Request entry points: routes, handlers and controllers.
Application logic
149 files Β· 46%Domain rules, services and shared utilities.
+1 moreData & schema
5 files Β· 2%Schema definitions, migrations and data access.
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
- Python77%
- Markdown16%
- JavaScript5%
- Shell1%
- TypeScript1%
- YAML0%
- Other (1)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
WALT/pyproject.toml
pypi Β· 46- aiofiles
- beautifulsoup4
- boto3
- faiss-cpu
- ffmpy
- langchain
- langchain_community
- langchain-anthropic
- langchain-aws
- langchain-google-genai
- langchain-openai
- lxml
- markdownify
- numpy
- patchright
- playwright
- posthog
- pydantic
- +28 more
backend/voice/frontend/package.json
npm Β· 20- @livekit/components-react
- framer-motion
- livekit-client
- livekit-server-sdk
- next
- react
- react-dom
- +13 more
backend/voice/requirements.txt
pypi Β· 5- livekit-agents[silero,turn-detector]
- livekit-plugins-elevenlabs
- livekit-plugins-groq
- livekit-plugins-noise-cancellation
- python-dotenv
requirements.txt
pypi Β· 4- customtkinter
- pillow
- pyautogui
- pynput
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.