Project Info
Inspiration
We wanted to build a browser that adapts to people instead of forcing everyone into the same default experience. Browsers serve billions of users, but most customization still requires extensions, settings menus, or technical knowledge. At the same time, tools like Claude Code, Cursor, Devin, and other agentic coding systems have shown that software can now be generated from intent. Conjure started from that idea: what if changing your browser was as simple as asking for what you want? Instead of browsing around limitations, users could describe the experience they need and have Conjure build it directly into their browser.
What it does
Conjure is a self-building browser agent. You ask for a browser feature, and it generates a Chrome MV3 extension mod for that task. For example, a user can ask Conjure to remove YouTube Shorts, add custom page controls, modify a website UI, or create cross-site workflow helpers. The Chrome extension gathers browser context and gives the user a command interface, while the FastAPI backend routes the request to an agent provider such as Devin, Claude, or Nemotron. Conjure also keeps memory through Redis, so projects, conversations, rules, sandbox results, and agent job streams persist across sessions. Generated mods can be verified in a sandbox before being applied, and the side panel tracks build progress, sandbox results, screenshots, and active mods.
How we built it
Frontend React + TypeScript: Chrome extension UI, side panel, settings, voice overlay, design/run surfaces. Vite + CRXJS: Builds the MV3 Chrome extension. Chrome Extension APIs: sidePanel, tabs, scripting, userScripts, offscreen, storage. Vite + CRXJS: Builds the MV3 Chrome extension. Chrome Extension APIs: sidePanel, tabs, scripting, userScripts, offscreen, storage. Backend FastAPI: HTTP + WebSocket backend for chat, voice, mods, and browser-agent tasks. Python async stack: Handles streaming agent events, tool calls, voice requests, and cloud-browser jobs. LangChain: Shared tool-calling loop across Groq, Claude, and Nemotron. AI / Agent Services Groq: Primary fast LLM provider. Anthropic Claude: Higher-quality fallback/model option. NVIDIA Nemotron / NIM: Alternative hosted or self-hosted model path. Deepgram: Speech-to-text with nova-2, text-to-speech with Aura. Browserbase: Cloud Chrome sessions for browsing, testing, and replay. Stagehand: AI browser automation inside Browserbase. Data / Observability Redis: Persists conversations, messages, memory rules, job state, sandbox cache. Filesystem: Stores generated browser mods under demo_code//mods. Sentry: Captures backend, extension, sandbox, and generated-mod errors. Flow Extension gathers browser context and sends chat/voice input to FastAPI. Backend runs the selected LLM agent through LangChain tools. Agent creates or edits browser mods on disk. Extension fetches active mod bundles and injects them via chrome.userScripts. Browserbase/Stagehand verify or browse pages off-device. Redis stores app state; Sentry tracks failures.
Challenges we ran into
Difficulty sleeping Wifi issues Working between workshops Ideating alone took us 12 hours
Accomplishments we're proud of
We built what we set out to build and more. This AI agent codes extensions which are loaded directly into the user's browser in real-time. Here are some cool extensions we created (these were all one shotted, taking only one prompt): 1) We added a search functionality to a website that had none. We used Deepgram to speak to our browser directly using natural language. 2) We blocked YouTube Shorts to lock in on the devpost submission 3) Thomas gets a lot of spam emails for things he is not interested in. Being the intelligent young man he is, he uses Conjure to create an email filter that quickly deletes all these spam emails from his inbox.
What we learned
Chromium is very difficult to fork :(
What's next
Next, we want to move beyond Chrome extension mods into a custom Chromium fork for deeper browser control. That would let Conjure modify more of the browser experience directly instead of being limited to extension APIs. We also want to improve the Simular/Sai testing loop, expand the mod registry, add richer cross-site workflows, and make Conjure usable by people who have no idea how browser extensions work. The long-term goal is simple: describe the browser you want, and Conjure builds it.
conjure
conjure is a self-building browser agent. A local Chrome extension gathers browser context and hosts the chat UI; a FastAPI backend routes work to the configured coding provider, tracks progress, stores conversation/session state, and reports finished agent session or PR links back to the user.
See the left-to-right system diagram for the implemented stack and MASTER_DESIGN_DOC.md for the architecture source of truth.
Expected Layout
backend/ FastAPI agent service, Redis store, sandbox/test/heal loop
conjure-extension/ Vite + React + CRXJS MV3 Chrome extension
tests/ repo-level smoke and integration checks
.env.example local configuration template, no real secrets
Configuration
Create a local env file from the template:
Copy-Item .env.example .env
Fill in real values for the selected coding provider, Redis, Browserbase, Simular, and Sentry in .env. Do not commit secrets. The extension reads only VITE_ values at build time, so do not put private API keys behind VITE_ names.
Required config groups:
- Agent provider:
CONJURE_AGENT_PROVIDER=groq(default, fastest),CONJURE_AGENT_PROVIDER=claudefor Claude, orCONJURE_AGENT_PROVIDER=nemotronfor NVIDIA Nemotron - Groq:
GROQ_API_KEYandGROQ_MODEL(default qwen/qwen3-32b) - Claude:
ANTHROPIC_API_KEYandCONJURE_ANTHROPIC_MODEL - Nemotron:
NVIDIA_API_KEY,NVIDIA_MODEL, and optionalNVIDIA_API_BASE_URLfor self-hosted NIM - Redis:
REDIS_URL,REDIS_NAMESPACE, sandbox cache TTL - Browserbase: API key, project ID, session settings
- Simular: API key and optional endpoint/model override
- Sentry: backend DSN, sandbox DSN, environment, trace sample rate
- Backend URL: HTTP and WebSocket base URLs
- Extension config: Vite-exposed backend URLs, extension environment, public Sentry DSN
Backend Setup
Run these after the backend worker lands backend/pyproject.toml and backend/main.py:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r .\backend\requirements.txt
python -m playwright install chromium
npm run dev:backend
The backend should read .env, connect to Redis, expose the WebSocket contract from the design doc, and route each Conjure conversation to the selected provider. Demo mode simulates provider progress without external credentials.
Nemotron uses NVIDIA's LangChain ChatNVIDIA integration and the same local backend tool loop as Claude. For hosted API Catalog usage, set CONJURE_AGENT_PROVIDER=nemotron, CONJURE_DEMO_MODE=false, NVIDIA_API_KEY, and optionally override NVIDIA_MODEL. For local NIM later, set NVIDIA_API_BASE_URL=http://localhost:8000/v1.
Extension Setup
Run these after the extension worker lands conjure-extension/package.json:
npm --prefix conjure-extension install
npm run dev:extension
For manual Chrome testing, build the extension and load the unpacked output directory from Chrome's Extensions page. Keep Groq, Claude, Nemotron, and other provider keys server-side; the extension should use VITE_BACKEND_URL and VITE_BACKEND_WS_URL only.
Dev Commands
npm run dev:backend # FastAPI on 127.0.0.1:8000
npm run dev:extension # Vite/CRXJS extension dev server
npm run build:extension # extension production build
npm run test # root smoke checks
npm run test:smoke # same smoke checks, explicit name
npm run test:backend-smoke
npm run test:backend-smoke is opt-in. Set CONJURE_SMOKE_BACKEND_URL to a running backend URL when the service exists; without it, the test skips.
Test Commands
The current scaffold uses stdlib unittest so it works before backend and extension dependencies exist:
python -m unittest discover -s tests/smoke
Pytest is also configured for future workers:
python -m pytest
When backend and extension implementations arrive, add focused tests under tests/ or e2e/ without importing generated extension projects from demo_code/.
Integration Notes
- Redis should hold projects, conversations, memory rules, sandbox result cache entries, and sandbox job streams.
- Browserbase owns disposable Chrome sessions and replay/screenshot capture.
- Simular owns autonomous functional, crash, and security passes against the Browserbase session.
- Sentry should use separate environments or projects for backend, extension, and sandbox crashes.
- Generated extension artifacts belong in
demo_code/and are ignored by Git.
Analysis
View
Metric
- 12
- 4
- 4
- 1
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
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- HTMLIn code
- LangChainIn code
- PythonIn code
- ReactIn code
- RedisIn code
- TypeScriptIn code
- JavaScriptClaimed
9 of 10 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 CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
771 KB
Source files
104
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Preet37/AIHACKS2026
121 files · 1.1 MB · @ fd39fe7
Structure
Interface
31 files · 26%Screens, components and styles rendered to the user.
Application logic
53 files · 44%Domain rules, services and shared utilities.
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
- Python39%
- TypeScript37%
- HTML12%
- Markdown6%
- CSS6%
- YAML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
backend/requirements.txt
pypi · 16- agentspan
- anthropic
- browserbase
- fastapi
- httpx
- langchain
- langchain-anthropic
- langchain-core
- langchain-nvidia-ai-endpoints
- langchain-openai
- playwright
- python-dotenv
- redis
- sentry-sdk
- stagehand
- uvicorn[standard]
conjure-extension/package.json
npm · 14- @fontsource/jetbrains-mono
- @sentry/browser
- conjure-workspace
- lucide-react
- react
- react-dom
- react-markdown
- +7 more
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.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.