Programs Beat Prompts: AI Forges Deterministic Interface Programs That Run Forever
<p>Every time my AI agent automated a website interaction, it was burning tokens to solve the same problem it had already solved last run. Find the API. Locate the selector. Compose the steps. Re-solved, re-paid, every single time.</p> <p>I built <strong>Tap</strong> to fix this. The core idea: <strong>operating an interface is a solved problem the moment you figure out how.</strong> So separate the figuring-out (AI's job, done once) from the executing (a deterministic program's job, done forever).</p> <h2> The Paradigm: Forging </h2> <div class="highlight js-code-highlight"> <pre class="highlight plaintext"><code>forge_inspect → forge_verify → forge_save → tap.run AI analyzes AI tests AI saves runs forever, zero AI </code></pre> </div> <p>AI analyzes the live site, creates a <code>.tap.js
Every time my AI agent automated a website interaction, it was burning tokens to solve the same problem it had already solved last run. Find the API. Locate the selector. Compose the steps. Re-solved, re-paid, every single time.
I built Tap to fix this. The core idea: operating an interface is a solved problem the moment you figure out how. So separate the figuring-out (AI's job, done once) from the executing (a deterministic program's job, done forever).
The Paradigm: Forging
forge_inspect → forge_verify → forge_save → tap.run AI analyzes AI tests AI saves runs forever, zero AIforge_inspect → forge_verify → forge_save → tap.run AI analyzes AI tests AI saves runs forever, zero AIEnter fullscreen mode
Exit fullscreen mode
AI analyzes the live site, creates a .tap.js file, and that file runs forever — no LLM calls, no prompts, no API keys. Runs in <1s. Returns structured data. Same result every time.
Cost model: ~$0.50 in tokens to forge. Then $0.00 at runtime, forever.
The Protocol
Tap defines a minimal, complete contract for interface automation:
8 core operations (irreducible atoms):
eval · pointer · keyboard · nav · wait · screenshot · run · capabilities
Enter fullscreen mode
Exit fullscreen mode
17 built-in operations (composed from core):
click · type · fill · hover · scroll · pressKey · select · upload · dialog fetch · find · cookies · download · waitFor · waitForNetwork · ssrState · storageclick · type · fill · hover · scroll · pressKey · select · upload · dialog fetch · find · cookies · download · waitFor · waitForNetwork · ssrState · storageEnter fullscreen mode
Exit fullscreen mode
8 + 17 = every interaction a human can perform on any interface.
A new runtime implements 8 methods → gets 17 built-ins free. Write a tap once, run it on Chrome, Playwright, macOS native apps — same protocol.
106 Ready-to-Use Skills
# Install curl -fsSL https://raw.githubusercontent.com/LeonTing1010/tap/master/install.sh | sh tap update # Pulls 106 skills across 50 sites# Install curl -fsSL https://raw.githubusercontent.com/LeonTing1010/tap/master/install.sh | sh tap update # Pulls 106 skills across 50 sitesUse
tap github trending --limit 5 tap hackernews hot tap xiaohongshu hot
Compose with Unix pipes
tap github trending | tap tap/filter --field stars --gt 1000`
Enter fullscreen mode
Exit fullscreen mode
Skills cover GitHub, Reddit, YouTube, Hacker News, X/Twitter, Medium, arXiv, Bilibili, Zhihu, Xiaohongshu, Weibo, and 40+ more sites.
What a .tap.js looks like
// API-first: fetch data directly export default { site: "hackernews", name: "hot", description: "Hacker News top stories", health: { min_rows: 10, non_empty: ["title"] },// API-first: fetch data directly export default { site: "hackernews", name: "hot", description: "Hacker News top stories", health: { min_rows: 10, non_empty: ["title"] },extract: async () => {
const ids = await fetch('https://hacker-news.firebaseio.com/v0/topstories.json').then(r => r.json())
const items = await Promise.all(ids.slice(0, 30).map(id =>
fetch(https://hacker-news.firebaseio.com/v0/item/${id}.json).then(r => r.json())
))
return items.map(i => ({ title: i.title, score: String(i.score), url: i.url, author: i.by }))
}
}`
Enter fullscreen mode
Exit fullscreen mode
Pure JavaScript. Zero AI at runtime. The health contract means tap doctor can self-verify this tap automatically.
MCP Native
Works with Claude Code, Cursor, Windsurf, and any MCP-compatible agent:
{ "mcpServers": { "tap": { "command": "tap", "args": ["mcp"] } } }{ "mcpServers": { "tap": { "command": "tap", "args": ["mcp"] } } }Enter fullscreen mode
Exit fullscreen mode
43 tools across 6 categories — run taps, forge new ones, inspect pages, intercept network traffic.
Security
Community taps are untrusted code. Three layers:
-
Sandbox — Deno Worker, zero permissions (no filesystem, network, env)
-
Static analysis — 7 CI checks on every PR to tap-skills
-
Data isolation — secrets and sessions never leave your machine
How It Compares
Tap Browser-Use / Stagehand Playwright
AI at runtime No (forge once) Yes (every step) No (manual scripts)
Detection risk Undetectable Detectable (CDP) Detectable (headless)
Cost model ~$0.50 once, then $0 Tokens per session Free (manual)
Reusable artifacts .tap.js (shareable) None (ephemeral) None
Skills ecosystem 106 across 50 sites None None
GitHub
https://github.com/LeonTing1010/tap
106 skills, 3 runtimes, ~2,000 lines of Deno, zero dependencies.
DEV Community
https://dev.to/leonting1010/programs-beat-prompts-ai-forges-deterministic-interface-programs-that-run-forever-j9eSign in to highlight and annotate this article

Conversation starters
Daily AI Digest
Get the top 5 AI stories delivered to your inbox every morning.
More about
claudemodelupdate
Ran Qwen 3.5 27B via Ollama as a persistent background agent for 30 days. Not a demo. Honest results.
I wanted to know if a local LLM could handle recurring background tasks reliably over an extended period — not as a chatbot, but as a persistent worker that runs scheduled jobs, maintains context across sessions, and routes tool calls without human prompting. So I ran it for 30 days on real tasks from my actual workflow. Model: Qwen 3.5 27B via Ollama. Hardware: Mac with 32GB unified memory, but the architecture works on any machine that can run a 27B+ model locally. Setup Each agent runs in a persistent workspace with its own memory, skills, and MCP sidecars. The workspace structure separates human-authored instructions ( AGENTS.md ), model config and provider settings ( workspace.yaml ), modular capabilities ( skills/ ), and installed workspace apps ( apps/ ). Memory lives in a separate

p-e-w/gemma-4-E2B-it-heretic-ara: Gemma 4's defenses shredded by Heretic's new ARA method 90 minutes after the official release
Google's Gemma models have long been known for their strong "alignment" (censorship). I am happy to report that even the latest iteration, Gemma 4, is not immune to Heretic's new Arbitrary-Rank Ablation (ARA) method, which uses matrix optimization to suppress refusals. Here is the result: https://huggingface.co/p-e-w/gemma-4-E2B-it-heretic-ara And yes, it absolutely does work. It answers questions properly, few if any evasions as far as I can tell. And there is no obvious model damage either. What you need to reproduce (and, presumably, process the other models as well): git clone -b ara https://github.com/p-e-w/heretic.git cd heretic pip install . pip install git+https://github.com/huggingface/transformers.git heretic google/gemma-4-E2B-it From my limited experiments (hey, it's only been
Knowledge Map
Connected Articles — Knowledge Graph
This article is connected to other articles through shared AI topics and tags.




Discussion
Sign in to join the discussion
No comments yet — be the first to share your thoughts!