ianalloway commited on
Commit
d3ebf05
·
verified ·
1 Parent(s): 21fb6f3

Upload folder using huggingface_hub

Browse files
Files changed (5) hide show
  1. .nojekyll +0 -0
  2. README.md +1 -3
  3. app.py +0 -41
  4. index.html +56 -0
  5. requirements.txt +0 -2
.nojekyll ADDED
File without changes
README.md CHANGED
@@ -3,9 +3,7 @@ title: Browser Agent Benchmark
3
  emoji: 🧭
4
  colorFrom: blue
5
  colorTo: purple
6
- sdk: gradio
7
- sdk_version: 5.0.0
8
- app_file: app.py
9
  pinned: false
10
  license: mit
11
  short_description: Real-world browser automation as an agent benchmark
 
3
  emoji: 🧭
4
  colorFrom: blue
5
  colorTo: purple
6
+ sdk: static
 
 
7
  pinned: false
8
  license: mit
9
  short_description: Real-world browser automation as an agent benchmark
app.py DELETED
@@ -1,41 +0,0 @@
1
- import gradio as gr
2
-
3
- POST_URL = "https://allowayai.substack.com/p/the-browser-is-the-real-agent-benchmark"
4
-
5
- CHECKLIST = """
6
- ## Real-world browser agent checklist
7
-
8
- A browser agent is not production-ready until it can handle:
9
-
10
- - persistent authenticated profiles
11
- - MFA / CAPTCHA handoff without credential leakage
12
- - iframe switching
13
- - Shadow DOM traversal
14
- - ProseMirror / Quill rich-text editors
15
- - passkey/WebAuthn dead ends
16
- - viewport and responsive layout shifts
17
- - final-state verification with a receipt
18
-
19
- The core idea: do not claim success because the script exited. Claim success only after the public page, admin state, screenshot, or server response proves it.
20
- """
21
-
22
- with gr.Blocks(title="Browser Agent Benchmark") as demo:
23
- gr.Markdown(
24
- """
25
- # The browser is the real agent benchmark
26
-
27
- Most agent demos skip the part that breaks in production: real websites.
28
-
29
- This is a small public companion to Ian Alloway's write-up on browser agents, publishing automation, and why agent work needs receipts instead of vibes.
30
-
31
- [Read the full post on Substack](%s)
32
- """ % POST_URL
33
- )
34
- gr.Markdown(CHECKLIST)
35
- with gr.Row():
36
- gr.Button("Open the post", link=POST_URL)
37
- gr.Button("Ian on GitHub", link="https://github.com/ianalloway")
38
- gr.Button("Portfolio", link="https://ianalloway.xyz")
39
-
40
- if __name__ == "__main__":
41
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
index.html ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>The browser is the real agent benchmark</title>
7
+ <meta name="description" content="A real-world browser automation checklist for AI agents: auth, iframes, Shadow DOM, rich-text editors, and receipts." />
8
+ <style>
9
+ :root { color-scheme: dark; --bg: #090b12; --fg: #eef2ff; --muted: #a8b3cf; --card: #111827; --line: #263044; --accent: #8b5cf6; --accent2: #38bdf8; }
10
+ * { box-sizing: border-box; }
11
+ body { margin: 0; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: radial-gradient(circle at top left, rgba(139,92,246,.22), transparent 35%), radial-gradient(circle at bottom right, rgba(56,189,248,.16), transparent 30%), var(--bg); color: var(--fg); line-height: 1.6; }
12
+ main { max-width: 920px; margin: 0 auto; padding: 64px 24px 80px; }
13
+ .eyebrow { color: var(--accent2); text-transform: uppercase; letter-spacing: .18em; font-size: .8rem; font-weight: 700; }
14
+ h1 { font-size: clamp(2.3rem, 6vw, 5rem); line-height: .96; margin: 18px 0 22px; letter-spacing: -.05em; }
15
+ .lede { font-size: clamp(1.1rem, 2vw, 1.35rem); color: var(--muted); max-width: 720px; }
16
+ .actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 30px 0 46px; }
17
+ a.button { color: white; text-decoration: none; border: 1px solid var(--line); padding: 12px 16px; border-radius: 999px; background: rgba(255,255,255,.05); }
18
+ a.primary { background: linear-gradient(135deg, var(--accent), var(--accent2)); border: 0; color: #06111f; font-weight: 800; }
19
+ section { background: rgba(17,24,39,.72); border: 1px solid var(--line); border-radius: 22px; padding: 24px; margin: 18px 0; backdrop-filter: blur(12px); }
20
+ h2 { margin-top: 0; letter-spacing: -.02em; }
21
+ li { margin: 8px 0; }
22
+ code { background: rgba(255,255,255,.08); padding: 2px 6px; border-radius: 6px; }
23
+ footer { color: var(--muted); margin-top: 34px; font-size: .95rem; }
24
+ </style>
25
+ </head>
26
+ <body>
27
+ <main>
28
+ <div class="eyebrow">Real-world agent evals</div>
29
+ <h1>The browser is the real agent benchmark</h1>
30
+ <p class="lede">Most agent demos skip the part that breaks in production: real websites. Auth flows, iframes, Shadow DOM, rich-text editors, redirects, passkeys, and verification receipts.</p>
31
+ <div class="actions">
32
+ <a class="button primary" href="https://allowayai.substack.com/p/the-browser-is-the-real-agent-benchmark">Read the full write-up</a>
33
+ <a class="button" href="https://github.com/ianalloway">GitHub</a>
34
+ <a class="button" href="https://ianalloway.xyz">Portfolio</a>
35
+ </div>
36
+ <section>
37
+ <h2>What the benchmark cares about</h2>
38
+ <ul>
39
+ <li>Persistent authenticated browser profiles.</li>
40
+ <li>MFA and CAPTCHA handoff without leaking credentials.</li>
41
+ <li>Iframe switching and Shadow DOM traversal.</li>
42
+ <li>ProseMirror and Quill rich-text editors.</li>
43
+ <li>Passkey/WebAuthn prompts that sit outside the DOM.</li>
44
+ <li>Responsive layout shifts and hidden controls.</li>
45
+ <li>Final-state verification instead of trusting a process exit.</li>
46
+ </ul>
47
+ </section>
48
+ <section>
49
+ <h2>Receipts over vibes</h2>
50
+ <p>If an agent says it posted, submitted, updated, or paid for something, it needs a receipt: a final URL, a DOM state, a server response, a public page check, or a screenshot.</p>
51
+ <p>That is the difference between a chatbot and infrastructure.</p>
52
+ </section>
53
+ <footer>Built by Ian Alloway · public companion page for the Substack post.</footer>
54
+ </main>
55
+ </body>
56
+ </html>
requirements.txt DELETED
@@ -1,2 +0,0 @@
1
- gradio>=5.0.0
2
- pyaudioop>=0.2.0