"I'm the Bear. The Bounty Bear. I can find them anywhere!"
🔗 Live Demo: bounty-bear.vercel.app
An AI search agent inspired by "Until the End of the World" (1991) directed by Wim Wenders.
Watch the original scene: YouTube
In 1991, this film predicted AI agents with real-time feedback, personality, and the ability to find anyone, anywhere. 35 years later, we're living it.
# Clone and run - no dependencies needed
git clone https://github.com/YOUR_USERNAME/bounty-bear
cd bounty-bear
open web-demo/bounty-bear.htmlThat's it. No npm install. No server. Just open the HTML.
Works everywhere:
- Mac, Windows, Linux (browser)
- iOS (Safari, add to home screen)
- Android (Chrome, install as app)
- Offline support (service worker)
- Web Speech API - works in all modern browsers
- Click the search box or voice button to initialize audio
- Press
Vto toggle voice on/off (when not typing) - Bear speaks the key lines from the film
- Speech queues naturally - no cutoffs or overlapping
- CRT scanline effect
- Phosphor green on black
- Real-time progress bars
- Dynamic Mobile Interface: Auto-scales for maximum terminal visibility
- Big Bear Search: Prominent search animation that takes center stage
- Ready Pulse: Rhythmic visual CTA on the reset button when search is complete
"I'm the bear - the bounty bear!"
"I can find them anywhere!"
"I'm searching..."
"I am identifying..."
"I got him!"
"This is your guy!"
"Finders fee: 500 thousand dollars!"
bounty-bear/
├── web-demo/
│ ├── bounty-bear.html # Main interactive demo (standalone with voice)
│ ├── prophecy.html # Film tribute page
│ └── index.html # Knowledge Navigator demo
├── openclaw/
│ ├── bounty-bear-client.html # Live OpenClaw frontend (SSE stream)
│ ├── AGENT.md # Agent personality for OpenClaw
│ └── config.json # Status message templates
├── install-skill.sh # Interactive CLI installer for OpenClaw
├── manifest.json # PWA manifest
├── sw.js # Service worker for offline
├── icons/ # App icons
├── LICENSE # MIT
└── README.md
open web-demo/bounty-bear.htmlThe full 1991 experience:
- Type a name, press Enter
- Watch the bear search
- Hear "I GOT HIM!"
- Collect your bounty
open web-demo/prophecy.htmlA tribute showing 1991 vs 2026 - what the film predicted vs what we have now.
The Bounty Bear UI is fully positioned to act as the actual frontend terminal for an OpenClaw agent skill.
We have provided a dedicated live-wired template at openclaw/bounty-bear-client.html that strips out the cinematic fake timers and replaces them with a live EventSource web stream ready to connect to your local OpenClaw server.
The fastest way to get started. No terminal, no code editing.
- Open
openclaw/bounty-bear-client.htmlin your browser (just double-click the file). - Click the ⚙️ gear icon in the top-right corner of the header.
- Paste your OpenClaw or n8n streaming URL (e.g.,
http://127.0.0.1:8080/v1/agent/stream). - Click 🔌 TEST to verify your server is reachable.
- Click 💾 SAVE. Your URL is stored in
localStorageand persists across refreshes. - Type a name and start hunting!
If the connection fails during a search, the terminal will remind you to click ⚙️ to check your URL.
If you prefer the command line, run this from the project root:
chmod +x install-skill.sh
./install-skill.shThe script will prompt you for your API URL and automatically update the client file.
If you prefer full manual control:
Your OpenClaw backend needs to know it is the Bounty Bear so it behaves correctly and emits the proper cinematic status updates.
# Copy the provided personality definition to your OpenClaw agent directory
cp openclaw/AGENT.md ~/.openclaw/workspace/AGENT.md
# Restart your gateway to load the new personality
openclaw gateway restartOpen openclaw/bounty-bear-client.html in your code editor and locate the API URL variable:
const DEFAULT_API_URL = "http://localhost:3000/api/stream"; // API_URL_PLACEHOLDEROr, just use the built-in ⚙️ Settings panel in the browser — no code editing needed!
Your backend (OpenClaw, n8n, or a custom Python/Node script) must send data as Server-Sent Events (SSE).
Think of this like a "text message feed" from your server to the Bounty Bear. For the Bear to understand your messages, they need to be formatted as specific JSON "packets":
- Thinking/Searching Packets: For every live update (like querying a site), send:
{ "type": "status", "message": "Querying LinkedIn..." } - Success Packets: When the target is caught, send:
{ "type": "final_response", "content": "Full name, location, and bio here." }
-
If you are using Node.js / Express: Your server route should look like this. Note the
text/event-streamheader which is required for the "live" feel:app.get('/api/stream', (req, res) => { res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); // To send a progress update: const statusUpdate = { type: 'status', message: 'Hacking mainframe...' }; res.write(`data: ${JSON.stringify(statusUpdate)}\n\n`); // To send the final result: const result = { type: 'final_response', content: 'John Doe caught in Berlin.' }; res.write(`data: ${JSON.stringify(result)}\n\n`); });
-
If you are using n8n: In your "HTTP Response" node:
- Set Response Mode to
Last Node. - Set a custom Header:
Content-Type: text/event-stream. - In the Body, use an expression to format your output exactly like the JSON packets above, prefixed with
data:and ending with two newlines (\n\n).
- Set Response Mode to
-
Troubleshooting: If the Bear doesn't speak, check your browser's "Network" tab. Each message from your server must start with
data:and contain the exact JSON keys"type"and"message"or"content".
You don't need NPM, React, or a build step. Simply double-click openclaw/bounty-bear-client.html to open it in your browser natively.
Type your target name, hit Enter, and the retro UI will dynamically narrate OpenClaw's live web scraping and thinking process exactly like the 1991 movie!
| Component | Technology | Why |
|---|---|---|
| UI | Pure HTML/CSS/JS | Zero dependencies, runs anywhere |
| Voice | Web Speech API | Built into all browsers |
| Audio | Web Audio API | Success sound synthesis (cha-ching) |
| Persistence | LocalStorage | Remembers your bounties & history |
| Offline | Service Worker | PWA support |
| Styling | CSS Variables | Easy theming |
| Fonts | Google Fonts | VT323, Press Start 2P |
- Dynamic Mobile Flow: Bear icon scales up to 100px during search, then condenses to 64px when target is found, maximizing terminal scroll space.
- Condensed Result Card: Compact "Positive ID" badge with tight spacing reclaims ~80px vertical space for terminal output on mobile.
- Pixel-Perfect Alignment: Consistent 16px horizontal padding across all sections with baseline-aligned search input for clean text flow.
- Pulsing Ready State: A rhythmic green/amber glow appears on the Bear icon when search is complete, signaling it's ready for a manual reset.
- Manual Layout Reset: Clicking the Bear icon restores the full-sized layout while preserving terminal scroll history.
- Universal Compatibility: Zero-dependency Flexbox architecture ensures 100% stability on iOS Safari and modern mobile browsers.
- OpenClaw Skill Native: Architected to plug directly into OpenClaw as a live frontend.
Browsers require user interaction before playing audio (autoplay policy). Here's how we handle it:
- First click on search box → initializes audio, plays the original film MP3 snippet alongside the TTS intro.
- Cinematic Pacing → Utterances are perfectly timed with
sleep()delays to match the 1991 film, including a massive 12.3-second silent progress bar climb and an 8-second dramatic pause before announcing the prize money! - Emergency Mute → Pressing the 🔊 button or
Vkey instantly triggersstopAllAudio()to forcefully halt both the Web Speech API and any background MP3 tracks immediately.
function stopAllAudio() {
if (synth) synth.cancel(); // cuts TTS mid-sentence
const imAudio = document.getElementById('imSearchingAudio');
if (imAudio) {
imAudio.pause(); // forcefully stop the MP3
imAudio.currentTime = 0;
}
}This ensures full control over the audio while delivering a perfectly paced, suspenseful user experience.
This project was built by an AI agent (Claude) after a human asked it to recreate the 1991 vision.
The prophecy typed itself.
- "Until the End of the World" (1991) - Wim Wenders
- YouTube: The AI Search Scene
- The Criterion Collection
- Real web search integration (Tavily, DuckDuckGo)
- Long-term memory (Session Persistence)
- Piper TTS WASM for better voice
- Actual person lookup APIs
- OpenClaw skill package
- Sound effects (Cha-ching success chime)
- In-browser settings UI
- Dynamic confidence scoring
- Bounty log with clear button
MIT - Do whatever you want with it.
"The best way to predict the future is to invent it." - Alan Kay
The bear always gets his man. 🐻💰