🔥 Complete page intelligence for AI-driven development with Hot Reload Intelligence - captures DOM, network, console, performance, HMR events, and comprehensive page analysis
Project description
CursorFlow
The measurement tool for web testing - we capture reality, not fiction
CursorFlow is a pure data collection engine that captures comprehensive web application intelligence. Unlike simulation tools that let you control reality, CursorFlow measures actual reality - giving you complete trust in your test results.
🎯 The CursorFlow Philosophy
📊 We Collect Reality, Not Fiction
Other tools are simulation tools - they let you control reality:
- Mock network responses
- Simulate user interactions
- Create test environments
CursorFlow is a measurement tool - we capture reality as-is:
- Real API response times
- Actual network failures
- Genuine browser behavior
- Complete page intelligence
🔬 Pure Observation Principle
CursorFlow is like a scientific instrument:
- Microscopes don't create the cells they observe
- Telescopes don't generate the stars they capture
- CursorFlow doesn't mock the web it measures
When CursorFlow reports "average_response_time": 416.58ms, you can tell stakeholders: "This is what actually happened" - not "this is what happened in our test simulation."
🌟 The Trust Factor
Complete Reliability: Every data point reflects real application behavior
- No mocked responses hiding slow APIs
- No simulated interactions missing real edge cases
- No test environments different from production
Documentary vs Movie: Both are valuable, but if you're trying to understand reality, you watch the documentary. CursorFlow is the documentary of web testing.
🎯 Pass-Through Architecture
CursorFlow doesn't limit you - it exposes the full power of Playwright:
94+ Playwright actions available:
# Any Playwright Page method works
cursorflow test --actions '[
{"hover": ".menu"},
{"dblclick": ".editable"},
{"press": "Enter"},
{"drag_and_drop": {"source": ".item", "target": ".zone"}},
{"check": "#checkbox"},
{"evaluate": "window.scrollTo(0, 500)"}
]'
Full configuration pass-through:
{
"browser_config": {
"browser_launch_options": {"devtools": true, "channel": "chrome"}
},
"context_options": {
"color_scheme": "dark",
"geolocation": {"latitude": 40.7128, "longitude": -74.0060},
"timezone_id": "America/Los_Angeles"
}
}
Forward-compatible: New Playwright features work immediately without CursorFlow updates.
See: Playwright API Documentation
🧹 Artifact Management
CursorFlow generates valuable debugging data (screenshots, traces, sessions). Manage disk space:
# Clean old artifacts (>7 days)
cursorflow cleanup --artifacts --old-only
# Clean all artifacts
cursorflow cleanup --artifacts
# Clean saved sessions
cursorflow cleanup --sessions
# Clean everything
cursorflow cleanup --all
# Preview before deleting
cursorflow cleanup --all --dry-run
See: Complete Usage Guide
🔐 Authentication & Testing Protected Pages
Test authenticated pages with automatic session management.
Quick Start: Simple Username/Password Login
No configuration needed - just login with inline actions:
# Step 1: Login once and save session
cursorflow test --base-url http://localhost:3000 --actions '[
{"navigate": "/login"},
{"fill": {"selector": "#username", "value": "myuser"}},
{"fill": {"selector": "#password", "value": "mypass"}},
{"click": "#login-button"},
{"wait_for": ".dashboard"},
{"screenshot": "logged-in"}
]' --save-session "myuser"
# Step 2: Reuse session for all future tests (no re-login!)
cursorflow test --use-session "myuser" \
--path /admin/settings \
--screenshot "admin-panel"
# Step 3: Test another protected page
cursorflow test --use-session "myuser" \
--path /profile \
--screenshot "user-profile"
What's saved:
- All cookies (session cookies, auth tokens)
- localStorage and sessionStorage
- Complete authentication state
Session persists across tests - login once, test forever (until session expires).
Alternative: Config-Based Authentication
For repeated testing, configure auth once in .cursorflow/config.json:
# 1. Configure auth in .cursorflow/config.json
{
"base_url": "http://localhost:3000",
"auth": {
"method": "form",
"username": "test@example.com",
"password": "testpass",
"username_selector": "#email",
"password_selector": "#password",
"submit_selector": "#login-button"
}
}
# 2. Login once and save session
cursorflow test --base-url http://localhost:3000 \
--path /login \
--save-session "user"
# 3. Reuse session for protected pages (no re-login!)
cursorflow test --use-session "user" \
--path /dashboard \
--screenshot "dashboard"
Supports:
- Form authentication (username/password)
- Cookie authentication (JWT tokens, session cookies)
- Header authentication (Bearer tokens, API keys)
- SSO authentication (Google, Microsoft, Okta, Auth0)
SSO/OAuth Quick Start (Streamlined - No Manual Steps!):
# RECOMMENDED: Capture and save session in one command
cursorflow capture-auth --base-url http://localhost:3001 \
--path /dashboard \
--save-as-session "sso"
# Session is immediately ready to use!
cursorflow test --use-session "sso" --path /dashboard
# Or capture + test in one command:
cursorflow capture-auth --base-url http://localhost:3001 \
--path /dashboard \
--save-as-session "sso" \
--test-immediately
Features:
- ✅ Saves directly to
.cursorflow/sessions/sso_session.json(no manual copying!) - ✅ Captures cookies + localStorage + sessionStorage
- ✅ Works with Microsoft Azure AD, Google, Okta, Auth0
- ✅
--test-immediatelyvalidates session works - ✅
--debug-sessionfor troubleshooting
Tip: Use --browser chrome on macOS for better window visibility
See: Complete Authentication Guide
🚀 Complete Page Intelligence
Every test captures everything needed for debugging:
📊 Comprehensive Data Collection
- DOM: All elements with 7 selector strategies + event handlers
- Network: Requests, responses, and complete request/response bodies
- Console: All logs, errors, warnings - displayed prominently
- JavaScript: Global functions, variables, specific window objects
- Storage: localStorage, sessionStorage, cookies (sensitive data masked)
- Forms: All field values at capture time (passwords masked)
- Performance: Load times, memory usage, reliability indicators
- Visual: Screenshots with comprehensive page analysis
- Sessions: Save/restore authenticated browser state (requires auth_config - see Authentication below)
🔄 Hot Reload Intelligence
- Framework auto-detection (Vite, Webpack, Next.js, Parcel, Laravel Mix)
- Perfect timing for CSS change detection
- HMR event correlation for understanding change impact
- Persistent sessions that survive code changes
🎯 Enhanced Screenshot Options
# Clip to specific components
{"screenshot": {"name": "header", "options": {"clip": {"selector": "#header"}}}}
# Hide sensitive information
{"screenshot": {"name": "profile", "options": {"mask": [".user-email", ".api-key"]}}}
# Full page with quality control
{"screenshot": {"name": "page", "options": {"full_page": True, "quality": 90}}}
📱 Parallel Viewport Testing
# Test across multiple viewports simultaneously
await flow.test_responsive([
{"width": 375, "height": 667, "name": "mobile"},
{"width": 768, "height": 1024, "name": "tablet"},
{"width": 1440, "height": 900, "name": "desktop"}
], [
{"navigate": "/dashboard"},
{"screenshot": "responsive-test"}
])
🤖 AI-First Design
All data structured for AI consumption:
- Consistent JSON format across all features
- Multi-selector element identification for robust automation
- Accessibility-aware element analysis
- Error correlation with smart screenshot deduplication
- Performance insights with reliability metadata
✨ What's New in v2.7.1
AI-Optimized Output with Complete Data Type Coverage - All CursorFlow features now organized for AI consumption:
- Multi-File Structure: Split 3.7M token JSON → organized files under 100K tokens each
- Complete Coverage: Browser console, server logs, network, DOM, screenshots - all queryable
- AI Data Digest: Auto-generated markdown summary with server logs included
- Query Interface: Fast data extraction for ALL data types without manual JSON parsing
- Session Comparison: Compare test results to detect regressions
- Export Formats: JSON, Markdown, CSV outputs for any use case
# Test generates AI-optimized output automatically
cursorflow test --base-url http://localhost:3000 --path /app --logs local
# Query ANY data type instantly
cursorflow query session_123 --errors # Console errors
cursorflow query session_123 --server-logs # Server logs
cursorflow query session_123 --network --failed # Network failures
cursorflow query session_123 --screenshots # Screenshot index
cursorflow query session_123 --responsive # Responsive results
cursorflow query session_123 --css-iterations # CSS iterations
# Enhanced filtering
cursorflow query session_123 --errors --from-file "app.js" --contains "undefined"
cursorflow query session_123 --network --url-contains "/api/" --over 500ms
cursorflow query session_123 --server-logs --level error --pattern "database"
# Cross-referencing (time-based correlation)
cursorflow query session_123 --errors --with-network --with-server-logs
# Contextual queries
cursorflow query session_123 --context-for-error 2 --window 10
cursorflow query session_123 --group-by-url "/api/users"
# Enhanced comparison
cursorflow query session_A --compare-with session_B --errors
Impact:
- ✅ 100% AI-readable results (vs 0% before - exceeded context limits)
- ✅ 90% faster error diagnosis with AI assistants
- ✅ Zero manual JSON parsing required
- ✅ Complete backend + frontend visibility (server logs included)
Complete Data Coverage:
.cursorflow/artifacts/sessions/session_XXX/
├── server_logs.json # ⭐ Server-side logs (SSH/local/Docker)
├── errors.json # Browser console errors
├── network.json # Network requests/responses
├── screenshots.json # ⭐ Screenshot metadata
├── data_digest.md # AI summary (includes server logs)
└── + 6 more data files covering all CursorFlow features
🤖 For AI Agents: Start Here
3-Second Decision Guide
| User Says | Command | What You Get |
|---|---|---|
| "Debug this error" | cursorflow test → query session_X --errors --with-network |
Error + network + server logs correlated |
| "Fix this CSS" | Python: css_iteration_persistent() |
Visual comparison of CSS variations |
| "Why is this slow?" | query session_X --network --over 500ms |
Slow requests identified |
| "Test login flow" | cursorflow test --actions '[...]' |
Complete flow with server correlation |
Complete Debugging Example
# User: "There's a JavaScript error on the dashboard"
# 1. Capture (5 seconds)
cursorflow test --base-url http://localhost:3000 --path /dashboard
# 2. Diagnose (10 seconds)
cat .cursorflow/artifacts/sessions/session_XXX/data_digest.md
cursorflow query session_XXX --errors
# 3. Get context (5 seconds)
cursorflow query session_XXX --context-for-error 0 --export markdown
# 4. Fix based on correlated data
# (You now have: error message, stack trace, network requests, server logs)
Total time: 20 seconds from problem to actionable diagnosis
When User Mentions...
"Error", "Broken", "Not working"
cursorflow testto capturequery --errorsto identifyquery --context-for-errorto understand- Fix based on correlated data
"Slow", "Performance", "Takes forever"
cursorflow testto baselinequery --network --over 500msto find bottlenecksquery --performancefor metrics- Optimize slow requests
"CSS", "Styling", "Layout", "Spacing"
- Python API:
css_iteration_persistent() - Test 2-3 CSS approaches
- Compare screenshots
- Apply best result
"Login", "Auth", "Session"
cursorflow test --actions '[...]'with login flow--save-sessionto preserve auth--use-sessionfor subsequent tests- Check auth errors with
query --errors --contains "auth"
"Responsive", "Mobile", "Tablet"
cursorflow test --responsivequery --responsive --viewport mobile- Compare viewport results
- Fix mobile-specific issues
"Compare", "Regression", "What changed"
query session_before --compare-with session_after- Focus on
new_errorsandtiming_changes - Investigate specific regressions
🚀 Quick Start
Step 1: Install CursorFlow Package
pip install cursorflow
playwright install chromium
Step 2: Initialize Your Project (One-Time Setup)
cd /path/to/your/project
cursorflow install-rules
# Or skip prompts for automation/CI
cursorflow install-rules --yes
This creates:
.cursor/rules/- Cursor AI integration rules.cursorflow/config.json- Project-specific configuration.cursorflow/- Artifacts and session storage.gitignoreentries for CursorFlow artifacts
Step 3: Start Testing
Simple page capture:
cursorflow test --base-url http://localhost:3000 --path /dashboard
Interactive testing with inline actions:
cursorflow test --base-url http://localhost:3000 \
--path /messages \
--wait-for ".message-item" \
--hover ".message-item:first-child" \
--click ".message-item:first-child" \
--screenshot "clicked" \
--show-console \
--open-trace
# Full page screenshot (captures entire scrollable content)
cursorflow test --base-url http://localhost:3000 \
--path /dashboard \
--screenshot "complete-page" \
--full-page
Custom actions with JSON:
cursorflow test --base-url http://localhost:3000 --actions '[
{"navigate": "/login"},
{"fill": {"selector": "#email", "value": "test@example.com"}},
{"click": "#login-btn"},
{"screenshot": {"name": "result", "options": {"mask": [".sensitive-data"]}}}
]'
💻 Python API Examples
Complete Page Intelligence
from cursorflow import CursorFlow
async def capture_reality():
flow = CursorFlow("http://localhost:3000", {"source": "local", "paths": ["logs/app.log"]})
# Capture everything
results = await flow.execute_and_collect([
{"navigate": "/dashboard"},
{"screenshot": "complete-analysis"}
])
# Access comprehensive data
screenshot = results['artifacts']['screenshots'][0]
print(f"Real load time: {screenshot['performance_data']['page_load_time']}ms")
print(f"Actual memory usage: {screenshot['performance_data']['memory_usage_mb']}MB")
print(f"Elements found: {len(screenshot['dom_analysis']['elements'])}")
Enhanced Screenshot Options
# Component-focused testing
await flow.execute_and_collect([
{"navigate": "/components"},
{"screenshot": {
"name": "button-component",
"options": {"clip": {"selector": ".component-demo"}}
}}
])
# Privacy-aware testing
await flow.execute_and_collect([
{"navigate": "/admin"},
{"screenshot": {
"name": "admin-safe",
"options": {
"full_page": True,
"mask": [".api-key", ".user-data", ".sensitive-info"]
}
}}
])
Hot Reload Intelligence
# Perfect CSS iteration timing
async def hmr_workflow():
flow = CursorFlow("http://localhost:5173", {"headless": False})
# Auto-detect and monitor HMR
await flow.browser.start_hmr_monitoring()
# Baseline capture
await flow.execute_and_collect([{"screenshot": "baseline"}])
# Wait for real CSS changes with perfect timing
hmr_event = await flow.browser.wait_for_css_update()
print(f"🔥 {hmr_event['framework']} detected real change!")
# Capture immediately after actual change
await flow.execute_and_collect([{"screenshot": "updated"}])
Parallel Viewport Testing
# Test responsive design across multiple viewports
async def test_responsive_design():
flow = CursorFlow("http://localhost:3000", {"source": "local", "paths": ["logs/app.log"]})
# Define viewports
viewports = [
{"width": 375, "height": 667, "name": "mobile"},
{"width": 768, "height": 1024, "name": "tablet"},
{"width": 1440, "height": 900, "name": "desktop"}
]
# Test same actions across all viewports
results = await flow.test_responsive(viewports, [
{"navigate": "/dashboard"},
{"click": "#menu-toggle"},
{"screenshot": {"name": "navigation", "options": {"clip": {"selector": "#nav"}}}}
])
# Analyze responsive behavior
print(f"Tested {results['execution_summary']['successful_viewports']} viewports")
print(f"Fastest: {results['responsive_analysis']['performance_analysis']['fastest_viewport']}")
🔧 CLI Commands
⚠️ Two Ways to Specify Actions
1. Inline CLI Flags (use = separator for fill):
cursorflow test --base-url http://localhost:3000 \
--path /login \
--fill "#email=test@example.com" \
--fill "#password=mypass" \
--click "button[type='submit']" \
--screenshot "result"
2. JSON Actions (use dict with selector and value):
cursorflow test --base-url http://localhost:3000 --actions '[
{"navigate": "/login"},
{"fill": {"selector": "#email", "value": "test@example.com"}},
{"fill": {"selector": "#password", "value": "mypass"}},
{"click": "button[type=\"submit\"]"},
{"screenshot": "result"}
]'
❌ Don't mix formats! Using | or = inside JSON actions won't work.
Universal Testing
# Simple page test with complete intelligence
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
# Responsive testing across multiple viewports
cursorflow test --base-url http://localhost:3000 --path "/dashboard" --responsive
# Complex interaction testing
cursorflow test --base-url http://localhost:3000 --actions '[
{"navigate": "/form"},
{"fill": {"selector": "#name", "value": "Test User"}},
{"click": "#submit"},
{"screenshot": {"name": "result", "options": {"clip": {"selector": ".result-area"}}}}
]'
# Responsive testing with custom actions
cursorflow test --base-url http://localhost:3000 --responsive --actions '[
{"navigate": "/products"},
{"fill": {"selector": "#search", "value": "laptop"}},
{"screenshot": "search-results"}
]'
# Custom output location
cursorflow test --base-url http://localhost:3000 --path "/api" --output "api-test-results.json"
# Inline action flags
cursorflow test --base-url http://localhost:3000 \
--path /dashboard \
--screenshot "full-page-capture" \
--full-page # Captures entire scrollable page
Design Comparison (Pure Measurement)
# Compare mockup to implementation - get similarity metrics
cursorflow compare-mockup https://mockup.com/design \
--base-url http://localhost:3000 \
--implementation-actions '[{"navigate": "/dashboard"}]'
# Output: 87.3% similarity, diff images, element measurements
# Test CSS variations - observe real rendering
cursorflow iterate-mockup https://mockup.com/design \
--base-url http://localhost:5173 \
--css-improvements '[
{"name": "spacing-fix", "css": ".container { gap: 2rem; }"},
{"name": "tighter-spacing", "css": ".container { gap: 1rem; }"}
]'
# Output: Similarity data for each variation (Cursor decides which to apply)
Element Analysis & CSS Debugging
# Comprehensive element inspection with full CSS analysis
cursorflow inspect --base-url http://localhost:3000 --selector "#messages-panel"
# Show all computed CSS properties
cursorflow inspect -u http://localhost:3000 -s ".card" --verbose
# Quick dimension check (surgical precision)
cursorflow measure --base-url http://localhost:3000 --selector "#panel"
# Measure multiple elements at once
cursorflow measure -u http://localhost:3000 -s "#panel1" -s "#panel2"
# Verify CSS changes with all properties
cursorflow measure -u http://localhost:3000 -s ".button" --verbose
AI Integration
# Install Cursor AI rules
cursorflow install-rules
# Update to latest version and rules
cursorflow update
🧠 Why This Matters
For Any Web Application:
- Trust your test results - they reflect actual behavior
- Find real performance bottlenecks - no artificial speed boosts
- Discover actual edge cases - no simulation gaps
- Debug genuine issues - real errors, real timing, real context
🌟 Framework Support
Universal Compatibility:
- Works with any web application regardless of technology
- Framework-agnostic core operations
- Smart adaptation to different environments
HMR Auto-Detection:
- ✅ Vite (port 5173)
- ✅ Webpack Dev Server (port 3000)
- ✅ Next.js (port 3000)
- ✅ Parcel (port 1234)
- ✅ Laravel Mix (port 3000)
📖 Documentation
- Usage Guide - Complete usage documentation (included in pip install)
- Examples - Practical usage examples (included in pip install)
🎪 The CursorFlow Advantage
Other Tools Say:
"We let you mock and simulate"
CursorFlow Says:
"We tell you the truth"
When you need to understand reality, choose the measurement tool - not the simulation tool.
Complete page intelligence • Real behavior measurement • AI-first design • Pure observation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cursorflow-2.8.7.tar.gz.
File metadata
- Download URL: cursorflow-2.8.7.tar.gz
- Upload date:
- Size: 232.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31175a433bcbe1403d327e28f23423bbb2ee21194c0b990d91118548b3844e0e
|
|
| MD5 |
73074d4578f4fb80172d4aea04ae301d
|
|
| BLAKE2b-256 |
6633f1476866cf19bbb7a7029729b2d0206c388206ba09e731e7d08a8b6f82ee
|
File details
Details for the file cursorflow-2.8.7-py3-none-any.whl.
File metadata
- Download URL: cursorflow-2.8.7-py3-none-any.whl
- Upload date:
- Size: 210.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7a0654c32b105612eea71babbc19829f72747c348afa69a8a773d97b98534a8
|
|
| MD5 |
6a302533dfc95862293f519bc177345c
|
|
| BLAKE2b-256 |
e5689882fa405184d7f3e1361c566729e3e3c4ce0a07d83a414d3749bfa91683
|