MaskAgent MaskAgent ยท dev

Overview

MaskAgent is a privacy-first browser automation tool that runs entirely on your local machine. It combines a Chrome extension with Ollama to enable AI-driven browser interactions while automatically redacting sensitive information before it reaches the model.

Why MaskAgent?
  • ๐Ÿ”’ Local-first: All AI inference runs on your machine via Ollama
  • ๐Ÿ›ก๏ธ Privacy-preserving: PII is detected and redacted before AI processing
  • ๐ŸŽฏ Goal-driven: Describe what you want, and the agent figures out the steps
  • ๐Ÿ”ง Extensible: Add new PII detectors, actions, or AI models

What it Does

Given a natural language goal (e.g., "Fill out this contact form" or "Extract the main article text"), MaskAgent:

  1. Analyzes the current page's DOM and visual state
  2. Detects and redacts PII (emails, phone numbers, passwords, etc.)
  3. Sends sanitized context to a local AI model via Ollama
  4. Receives structured actions (CLICK, TYPE, SCROLL, SELECT, DONE)
  5. Validates and executes actions on the page
  6. Repeats until the goal is achieved

What it Doesn't Do

  • No cloud dependencies โ€” everything runs locally
  • No data storage โ€” page data is processed ephemerally
  • No credential capture โ€” passwords are redacted
  • No cross-origin automation โ€” works within a single tab

Quick Start

1. Clone the repository

git clone https://github.com/bhuvanesh-m-dev/maskagent.git
cd maskagent

2. Install Ollama & pull a model

# Install Ollama (macOS/Linux)
curl -fsSL https://ollama.com/install.sh | sh

# Pull a supported model
ollama pull deepseek-coder

# Verify models
ollama list

3. Load the extension in Chrome

  1. Open chrome://extensions/
  2. Enable Developer Mode
  3. Click Load unpacked
  4. Select the maskagent/code_files/ directory

4. Run your first agent

  1. Navigate to any webpage
  2. Click the MaskAgent extension icon
  3. Enter a goal (e.g., "Find and click the login button")
  4. Click Run Agent
๐Ÿ“– Next Steps

See Architecture to understand the system, or Codebase Guide to dive into the source.

Requirements

ComponentRequirementNotes
Browser Chrome 88+ / Brave / Edge Manifest V3 support required
Ollama Latest version Must be running locally
Model deepseek-coder / llava / qwen2.5-vl At least one text model required
Git 2.x+ For cloning the repository
โš ๏ธ Firefox Not Supported

MaskAgent uses Manifest V3 and Chrome-specific APIs. Firefox support is not currently implemented.

Installation

Directory Structure

maskagent/
โ”œโ”€โ”€ code_files/              # โ† Extension source
โ”‚   โ”œโ”€โ”€ manifest.json        # Extension configuration
โ”‚   โ”œโ”€โ”€ background.js        # Service worker & AI orchestration
โ”‚   โ”œโ”€โ”€ content.js           # Page interaction & privacy
โ”‚   โ”œโ”€โ”€ popup.html           # UI
โ”‚   โ”œโ”€โ”€ popup.js             # UI controller
โ”‚   โ””โ”€โ”€ styles.css           # UI styling
โ”œโ”€โ”€ img/                     # Assets
โ”œโ”€โ”€ docs/                    # Documentation
โ””โ”€โ”€ README.md

Loading the Extension

  1. Open Chrome and navigate to chrome://extensions/
  2. Toggle Developer Mode on (top-right)
  3. Click Load unpacked
  4. Select the code_files/ directory inside the repository
  5. Verify MaskAgent appears in your extensions list

Verifying Ollama Connection

# Check if Ollama is running
curl http://localhost:11434/api/tags

# If not, start it
ollama serve

# List installed models
ollama list
๐Ÿ” Pro Tip

After changing any source file, reload the extension at chrome://extensions/ by clicking the refresh icon on the MaskAgent card.

Architecture

MaskAgent is composed of three primary runtime components that communicate via Chrome's message-passing APIs.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Browser Environment โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Popup (popup.html/js) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Goal input โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Model selection โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Status display โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Agent control โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ chrome.runtime.sendMessage โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Background Service Worker (background.js) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Ollama API communication โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Model detection โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Agent loop orchestration โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Action validation โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Message routing โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ chrome.tabs.sendMessage โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Content Script (content.js) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข DOM analysis โ”‚ โ”‚ โ”‚ โ”‚ โ€ข PII detection & redaction โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Screenshot capture (canvas) โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Canvas redaction โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Browser action execution โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Trust Boundaries

Privacy is enforced at multiple boundaries in the system:

BoundaryBeforeAfter
Content Script Full DOM, raw text, raw screenshots Redacted DOM, redacted text, masked screenshot
Background โ†’ AI Sanitized context AI inference (no data stored)
AI โ†’ Action AI-generated action Validated action before execution
๐Ÿ”’ Privacy Assurance

No PII ever leaves the content script's privacy boundary. The AI model never sees raw sensitive data.

Codebase Guide

manifest.json

Extension configuration defining permissions, entry points, and content script injection rules.

{
    "manifest_version": 3,
    "name": "MaskAgent",
    "permissions": ["activeTab", "storage", "scripting"],
    "host_permissions": [
        "http://localhost:11434/*",
        "https://*/",
        "http://*/"
    ],
    "background": { "service_worker": "background.js" },
    "action": { "default_popup": "popup.html" },
    "content_scripts": [
        {
            "matches": [""],
            "js": ["content.js"],
            "run_at": "document_idle"
        }
    ]
}

background.js

Purpose: Service worker orchestrating the agent loop, communicating with Ollama, and coordinating between popup and content script.

Key Functions

  • runAgent(goal, model) โ€” Initializes a new agent session
  • agentLoop() โ€” Main execution loop (get state โ†’ AI โ†’ execute โ†’ repeat)
  • queryOllama(prompt) โ€” Sends prompt to Ollama, parses JSON response
  • validateAction(action) โ€” Validates action schema and parameters
  • executeAction(action) โ€” Sends action to content script

State Management

let session = {
    id: string,
    tabId: number,
    goal: string,
    model: string,
    step: number,
    maxSteps: 10,
    history: [{ step, action, result }],
    status: 'idle' | 'running' | 'complete' | 'error'
};

content.js

Purpose: Runs in page context for DOM analysis, PII detection/redaction, screenshot capture, and action execution.

Key Functions

  • getPageState(options) โ€” Collects DOM, text, and optionally screenshot
  • extractDOM() โ€” Builds structured element list with bounding rects
  • detectPII(dom) โ€” Scans for sensitive patterns (email, phone, password, etc.)
  • redactPII(dom) โ€” Replaces sensitive values with ***REDACTED***
  • captureScreenshot() โ€” Captures canvas, redacts sensitive areas
  • executeAction(action) โ€” Executes CLICK, TYPE, SCROLL, SELECT, DONE

PII Detection Patterns

const patterns = {
    email: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/,
    phone: /[\+\d]?[\( ]?\d{3}[\)\- ]?\d{3}[\- ]?\d{4}/,
    password: /password|passwd|pwd/i,
    creditCard: /\d{4}[\- ]?\d{4}[\- ]?\d{4}[\- ]?\d{4}/
};

popup.html & popup.js

Purpose: UI and controller for the extension popup. Handles goal input, model selection, and displays agent status/logs.

๐Ÿ“ File Interaction Matrix
FileSends ToReceives From
popup.jsbackground.jsbackground.js
background.jscontent.js, Ollamapopup.js, content.js
content.jsbackground.jsbackground.js

Agent Pipeline

Step 1: Goal Input User provides goal via popup โ”‚ โ–ผ Step 2: Initialize Session Background creates session with goal, model, tabId โ”‚ โ–ผ Step 3: Get Page State Background โ†’ Content: "getState" Content: extracts DOM, text, screenshot Content: detects & redacts PII Content โ†’ Background: sanitized state โ”‚ โ–ผ Step 4: Build Prompt Background constructs prompt with: โ€ข Goal โ€ข Redacted DOM โ€ข Redacted text โ€ข Available actions โ€ข Action history โ”‚ โ–ผ Step 5: AI Inference Background โ†’ Ollama: POST /api/generate Ollama โ†’ Background: AI response (JSON) โ”‚ โ–ผ Step 6: Validate Action Background: parse & validate action schema Check: type, target (if required) โ”‚ โ–ผ Step 7: Execute Action Background โ†’ Content: "executeAction" Content: finds element, performs action Content โ†’ Background: execution result โ”‚ โ–ผ Step 8: Check Completion If action.type === 'DONE' OR maxSteps reached: โ†’ session.status = 'complete' โ†’ notify popup Else: โ†’ loop back to Step 3

Action Schema

The AI model must respond with a JSON object matching one of these schemas:

ActionSchemaDescription
CLICK { "type": "CLICK", "target": "#button-id" } Clicks the specified element
TYPE { "type": "TYPE", "target": "#input", "value": "text" } Types text into an input/textarea
SCROLL { "type": "SCROLL", "target": "down" } Scrolls (up/down/top/bottom)
SELECT { "type": "SELECT", "target": "#select", "value": "option" } Selects an option from a dropdown
DONE { "type": "DONE" } Signals task completion
โš ๏ธ Important

All actions are validated before execution. Invalid actions (missing target, unknown type) are rejected and logged.

Privacy Architecture

MaskAgent's privacy model is built on the principle of data minimization โ€” only the minimum necessary information is sent to the AI model.

DOM-Level Redaction

The content script scans the DOM and marks elements as sensitive based on:

  • Field type: input[type="password"] โ†’ automatically sensitive
  • Field name: name="email", name="phone", etc.
  • Pattern matching: Email addresses, phone numbers, credit card numbers

Sensitive values are replaced with ***REDACTED*** before being sent to the background script.

Visual Redaction

When screenshots are captured (for vision models), the canvas is redacted by drawing black rectangles over sensitive element bounding boxes.

What the AI Sees

  • DOM: Element tags, IDs, classes, attributes โ€” but values are redacted
  • Text: Page text with patterns replaced by [EMAIL], [PHONE], etc.
  • Screenshot: Page image with sensitive areas masked in black
  • Never: Passwords, credit card numbers, private addresses

Limitations

โš ๏ธ PII Detection is Not Perfect
  • False negatives: Some sensitive fields may not be detected
  • False positives: Non-sensitive fields may be unnecessarily redacted
  • Dynamic content: JavaScript-rendered content may be missed
  • Shadow DOM: Limited support for shadow DOM elements
๐Ÿ”ฌ Testing Privacy

Always verify redaction works on your test pages. See the Testing section for guidelines.

Ollama Integration

API Endpoint

MaskAgent communicates with Ollama via the local API endpoint: http://localhost:11434/api/generate

Request Format

POST /api/generate
{
    "model": "deepseek-coder",
    "prompt": "... sanitized context + goal ...",
    "stream": false
}

Supported Models

ModelTypeUse Case
deepseek-coderTextGeneral browser automation (recommended)
llavaVisionVisual understanding of page layouts
qwen2.5-vlVisionAlternative vision model

Model Selection

Models are selected via the popup dropdown. The extension does not automatically detect installed models โ€” the user must choose one that is installed.

Verifying Models

# List installed models
ollama list

# Pull a model
ollama pull deepseek-coder

# Check model details
ollama show deepseek-coder
โš ๏ธ CORS & Localhost

The extension has host_permissions for http://localhost:11434/*, which allows communication with Ollama without CORS issues.

Models

MaskAgent currently supports three model types, each with different strengths and requirements.

DeepSeek-Coder (Recommended)

  • Size: ~4.7GB
  • Type: Text-only
  • Strength: Excellent at code-like structured outputs
  • Use: Most automation tasks, form filling, navigation

LLaVA

  • Size: ~4.3GB
  • Type: Vision + Text
  • Strength: Understands visual layout and UI elements
  • Use: Finding buttons by appearance, visual QA

Qwen2.5-VL

  • Size: ~7GB
  • Type: Vision + Text
  • Strength: Alternative vision model with strong reasoning
  • Use: Complex visual understanding tasks
๐Ÿ“Œ Recommendation

Start with deepseek-coder for most tasks. Switch to a vision model when the agent needs to "see" the page layout.

Action Contract

The AI model must output actions in a specific JSON format. MaskAgent validates these actions before execution.

CLICK

{
    "type": "CLICK",
    "target": "#submit-button"
}

Clicks the element matching the target selector. Target can be ID (#id), class (.class), or any valid CSS selector.

TYPE

{
    "type": "TYPE",
    "target": "#email-input",
    "value": "test@example.com"
}

Types the given value into the target input/textarea. Triggers input and change events.

SCROLL

{
    "type": "SCROLL",
    "target": "down"
}

Scrolls the page. Valid targets: "up", "down", "top", "bottom".

SELECT

{
    "type": "SELECT",
    "target": "#country",
    "value": "US"
}

Selects an option in a <select> dropdown. Triggers a change event.

DONE

{
    "type": "DONE"
}

Signals that the task is complete. The agent loop will stop.

๐Ÿ“ Prompt Engineering

To teach the model about these actions, include the action schema in the system prompt or examples.

Testing

Local Test Page

Create a test HTML page with various form elements:

<!DOCTYPE html>
<html>
<body>
    <h2>Test Form</h2>
    <form>
        <label>Name: <input type="text" name="name" value="John Doe"></label><br>
        <label>Email: <input type="email" name="email" value="john@example.com"></label><br>
        <label>Phone: <input type="tel" name="phone" value="123-456-7890"></label><br>
        <label>Password: <input type="password" name="password" value="secret123"></label><br>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

Privacy Tests

  • Verify email addresses are redacted โ†’ [EMAIL]
  • Verify phone numbers are redacted โ†’ [PHONE]
  • Verify password fields are marked sensitive
  • Verify screenshot redaction masks sensitive areas

Agent Tests

  • Test CLICK on buttons and links
  • Test TYPE into input fields
  • Test SCROLL navigation
  • Test SELECT dropdown options
  • Test DONE completion detection

Negative Tests

  • Missing element โ†’ agent should handle gracefully
  • Invalid action โ†’ validation should reject
  • Ollama unavailable โ†’ error handling
  • Malformed model output โ†’ parse errors
๐Ÿ”ด NEVER Use Real Data in Tests

Always use synthetic test data. Never submit real personal information, credentials, or sensitive content.

Debugging

Extension Debugging

Popup Console:

  1. Right-click the extension icon โ†’ Inspect Popup
  2. View logs in the Console tab

Service Worker Console:

  1. Go to chrome://extensions/
  2. Find MaskAgent and click service worker (or background page)
  3. View logs in the Console tab

Content Script Console:

  1. Open the page's developer tools (F12 or Cmd+Opt+I)
  2. Look for logs from content.js

Ollama Debugging

# Check Ollama status
ollama list

# View Ollama logs
ollama serve

# Test Ollama API directly
curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-coder", "prompt": "Hello", "stream": false}'

Common Issues

IssueLikely CauseSolution
Extension not loading Wrong directory selected Select code_files/ directory
Ollama connection error Ollama not running Run ollama serve
Model not found Model not installed Run ollama pull deepseek-coder
Invalid JSON from model Model output not JSON Check prompt, adjust examples
Action target not found Element not in page Wait for page to load, check selector

Extending MaskAgent

Adding a New PII Detector

  1. Open content.js
  2. Locate the detectPII() function
  3. Add your pattern to the patterns object
  4. Update the redactPII() function if needed
// In content.js - detectPII()
const patterns = {
    email: /.../,
    phone: /.../,
    // Add your new pattern here
    customId: /CUST-\d{4}-\d{4}/
};

Adding a New Browser Action

  1. Define the action schema in the prompt (background.js)
  2. Update validation in validateAction() (background.js)
  3. Implement execution in executeAction() (content.js)
  4. Add tests (see Testing)
  5. Update documentation
// In content.js - executeAction()
case 'NEW_ACTION':
    // Implement your logic
    // Return { success: true, action: 'new_action' }
    break;

Adding a New AI Model

  1. Add the model to the <select> in popup.html
  2. The model must support the same API contract (JSON response)
  3. Test with the new model
๐Ÿงช Best Practice

When adding new functionality, test with synthetic data first. Use the Testing guide for examples.

Contributing

Development Workflow

  1. Fork the repository on GitHub
  2. Clone your fork locally
  3. Create a branch for your change
  4. Make changes following the code style
  5. Test locally (see Testing)
  6. Verify privacy โ€” no sensitive data in logs
  7. Update documentation if needed
  8. Commit with clear messages
  9. Push to your fork
  10. Open a Pull Request

Pull Request Requirements

  • Explain what changed and why
  • Describe how you tested it
  • Confirm no privacy regression occurred
  • Update documentation if you changed behavior

Areas for Contribution

  • Privacy: Better PII detection, visual redaction, OCR
  • Agent Intelligence: Planning, better validation, task completion
  • Security: Prompt injection, action permissions, auditing
  • Performance: Faster inference, DOM extraction, context compression
  • Browser Compatibility: More browsers, better support
๐Ÿ”ด Never Submit Real Data

Do not include real credentials, personal data, or sensitive information in test cases, screenshots, logs, or pull requests.

Security Model

Local Inference

All AI processing runs locally via Ollama. No data leaves your machine. The extension only communicates with localhost:11434.

Permission Model

  • activeTab โ€” Only active tab access
  • storage โ€” Local settings only
  • scripting โ€” Required for content script injection
  • host_permissions โ€” For Ollama and web pages

Action Validation

  • All AI-generated actions are validated before execution
  • Invalid actions are rejected with errors
  • Actions are limited to safe operations (no destructive commands)

Known Risks

โš ๏ธ Important Security Considerations
  • Prompt Injection: User goals could influence model behavior
  • Model Hallucinations: AI may generate unexpected actions
  • Unintended Actions: The model might target wrong elements
  • Dynamic Content: Page changes after state capture
๐Ÿ“ง Vulnerability Reporting

If you discover a security vulnerability, please open a GitHub issue (private if sensitive) or contact the maintainers directly.

Limitations

AreaLimitationStatus
Browser Chrome/Chromium only Firefox not supported
Single Tab Operates on one tab at a time Architecture constraint
Cross-Origin Cannot interact with iframes Browser security boundary
PII Detection Not perfect (false positives/negatives) Improvement needed
Shadow DOM Limited support Improvement needed
Dynamic Content May miss changes after initial capture Improvement needed
Model Dependence Quality depends on LLM capabilities Model-specific
Max Steps 10-step limit (configurable in code) Hard-coded
๐Ÿ” TODO

These limitations are known and being addressed. Contributions are welcome in all these areas.

MaskAgent ยท Smart India Hackathon 2026 (SIH26171) ยท GitHub ยท Back to top โ†‘