haltija

Roadmap to 11/10

Current state: 9/10 - Best-in-class developer tool. GET support for actions, /key endpoint, diff-on-action, iframe visibility, simplified API.

Goal: 10/10 - The standard way AI agents interact with browsers.

Beyond: 11/10 - Agent-as-a-Service for browsers. Zero-config AI automation.

Current Focus: Phase 5 - CI Integration POC

Recent Progress (v0.1.9):


Phase 1: Documentation & Discovery (Low effort, high impact)

The product is better than people can tell. Fix that first.

1.1 Landing Page Hero

Problem: README buries the lede. Users don’t immediately understand the value.

Solution:

1.2 Consolidate Documentation

Problem: Docs scattered across CLAUDE.md, /docs, /api, embedded markdown, README.

Solution:

1.3 Use Case Galleries

Problem: Users don’t know what’s possible.

Solution:

1.4 API Reference Polish

Problem: /api endpoint is a wall of text.

Solution:


Phase 2: Developer Experience & β€œHobbyist Lock-In” (Medium effort, high impact)

Make it impossible for an individual developer to use anything else.

2.1 Node.js Support

Problem: Bun-only limits adoption. Many teams aren’t on Bun yet.

Status: Server uses Bun.serve() - Node.js would require abstracting HTTP layer. Low priority since:

Solution (if needed):

2.2 Browser Extension

Problem: Bookmarklet requires manual click per page. CSP blocks injection on some sites.

Solution:

2.3 Better Error Messages

Problem: Some failures are still cryptic.

Solution:

2.4 TypeScript SDK

Problem: Raw HTTP calls are tedious.

Solution:

import { Haltija } from 'haltija'

const h = new Haltija('http://localhost:4000')
await h.click('#submit')
const tree = await h.tree({ depth: 2 })

2.5 β€œWatch and Learn” Mode βœ… (Mostly done)

Problem: Copy/pasting prompts is low friction, but zero friction is better.

Status: Recording infrastructure exists (/recording/start, /recording/stop, /recording/generate). Generates test JSON from user actions.

Remaining:

Low priority: CLI test runner (bunx haltija run test.json) - works via API already, CLI feels like regression to Playwright model

Key differentiator: We connect to a live browser you’re already using - no cold start, existing auth/cookies/state preserved. Test the actual thing you’re looking at, not a sterile simulation. Need isolation? Open a new tab - instant fresh context without browser spinup.

2.6 β€œFlight Recorder” UI

Problem: β€œClick with Diff” produces powerful data, but it’s just JSON.

Solution:

2.7 Skill Marketplace / Community Registry

Problem: Sharing automation recipes is ad-hoc.

Solution:


Phase 3: Platform Expansion βœ… (Mostly done)

Build scripts work for all platforms. v0.1.9 includes:

3.1 Document Local Build Process

Problem: Users don’t know they can build locally.

Solution:

3.2 Windows Testing βœ… (Build works)

Problem: Windows build untested.

Status: Build scripts work, produces installer + portable exe. Needs real Windows testing.

Solution:

3.3 Pre-built Binaries

Problem: Building locally requires dev environment.

Solution:

3.4 Docker Image

Problem: Cloud deployment requires manual setup.

Solution:

docker run -p 4000:4000 haltija/haltija

Phase 4: Enterprise Readiness (High effort, high impact for adoption)

What’s needed for production deployment at scale.

Approach: Dogfood in real CI environment first. The items below are hypotheses - actual friction points will emerge from integration with real workflows (CI systems, Copilot, PR processes). Build what’s actually needed, not what’s imagined.

4.1 API Authentication

Problem: No auth on REST API. Anyone on localhost can control the browser.

Solution:

4.2 Audit Logging

Problem: No record of what commands were executed.

Solution:

4.3 Rate Limiting

Problem: Runaway agent could spam commands.

Solution:

4.4 Multi-Browser Support

Problem: One browser per server instance.

Solution:

4.5 Automated Test Reports

Problem: Managers don’t trust AI. They need to see the work.

Solution:

4.6 β€œSigned/Safe” Enterprise Mode

Problem: Security teams hate β€œMagic Apps” that strip CSP.

Solution:

4.7 Fleet Orchestration

Problem: Localhost is a ceiling for enterprise scale.

Solution:


Phase 5: Cloud & CI Integration (High effort, transformative impact)

This is the 10/10 unlock.

5.1 Hosted Haltija Cloud

Problem: Requires local server for every user.

Solution:

5.2 CI/CD Integration

Problem: Running in CI requires manual setup.

Solution:

5.3 AI QA Agent

Problem: Users still have to write test specs.

Solution:

5.4 PR Integration

Problem: Test results are separate from code review.

Solution:


Phase 6: Ecosystem (Ongoing)

Build the moat through adoption.

6.1 Framework Integrations

6.2 Test Framework Bridges

6.3 IDE Extensions

6.4 Community


Priority Matrix

Phase Effort Impact Do When
1. Docs & Discovery Low High Now
2. Developer Experience Medium High Next
3. Platform Expansion Low-Medium Medium βœ… Done
4. Enterprise Readiness High Medium Dogfood first
5. Cloud & CI High Transformative The 10/10
6. Ecosystem Ongoing Cumulative Continuous
7. Hosted Service Medium Business The 11/10

What Gets Us to 10/10 (and Beyond)

A product is 10/10 when it becomes the obvious default choice.

We’re at 9/10 now: Best-in-class developer tool. GET support, /key, diff-on-action, simplified API.

Phase 2 additions lock in developers:

Phase 4-5 unlocks enterprise:

Phase 5 gets us to 10/10: AI QA in CI that just works. Push code, get human-readable test results, auto-fixed tests, real bug reports.

Phase 7 gets us to 11/10: Agent-as-a-Service. One curl command = AI controlling a browser. No setup, no MCP, no local Claude. Just:

curl https://yourco.haltija.net/do -d '{"task": "fill out the signup form"}'

The architecture makes this possible: we route messages, we don’t run browsers. Near-zero marginal cost while competitors burn money on browser infrastructure.


Phase 7: Hosted Service & Agent-as-a-Service (The 11/10)

This is what makes Haltija a business, not just a tool.

The Architecture Insight

Why this is cheap to run:

Cost projection: | Users | Concurrent Sessions | Monthly Cost | |β€”β€”-|β€”β€”β€”β€”β€”β€”β€”|————–| | 1,000 | ~200 | ~$5 | | 10,000 | ~2,000 | ~$20 | | 100,000 | ~20,000 | ~$50 |

That’s 95%+ margins on the relay itself.

7.1 Core Infrastructure

Firebase stack (known quantity):

Relay service (Fly.io):

7.2 Domain Structure

haltija.dev           - marketing site, docs
app.haltija.dev       - dashboard (Firebase Hosting)
api.haltija.dev       - shared API (free tier, auth via token)

*.haltija.net         - customer-specific endpoints
acme.haltija.net      - Acme Corp's dedicated relay
initech.haltija.net   - Initech's dedicated relay

Benefits of customer subdomains:

7.3 Payments & Subscriptions

Stripe integration:

Proposed tiers: | Tier | Price | Limits | |β€”β€”|β€”β€”-|——–| | Free | $0 | 1K commands/mo, 10 test runs | | Pro | $29/mo | 50K commands/mo, 500 test runs | | Team | $99/mo | 500K commands/mo, unlimited tests | | Enterprise | Custom | Unlimited, SLA, dedicated subdomain |

7.4 Telemetry & Analytics

Instrument Haltija to learn what works:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Telemetry Events                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Usage:     command_invoked, test_run_started, test_passed   β”‚
β”‚ Utility:   command_success_rate, avg_response_time          β”‚
β”‚ Usability: command_retry_count, error_frequency, feedback   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Per-command tracking:

7.5 Agent Feedback Endpoint

Let agents report friction directly:

POST /feedback
{
  "type": "friction" | "suggestion" | "error",
  "context": "tried to click dropdown but it was inside shadow DOM",
  "command": "/click",
  "severity": "medium"
}

Dashboard aggregates:

7.6 Magic Token: Agent-as-a-Service

The killer feature - zero config agents:

Current setup requires:

  1. Install Claude Desktop / configure MCP
  2. Get API keys from Anthropic
  3. Configure the MCP server
  4. Figure out the system prompt
  5. Connect to Haltija

Magic token flow:

  1. Sign up at haltija.dev
  2. Add your Anthropic key (stored encrypted)
  3. Get a magic token
  4. Done:
    curl https://yourco.haltija.net/do \
      -H "Authorization: Bearer xxx" \
      -d '{"task": "click the login button"}'
    

Architecture:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              haltija.net (hosted)                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚  β”‚  Auth   │───▢│  Agent  │───▢│  Relay  │─────────────────┼──▢ Browser
β”‚  β”‚ + Keys  β”‚    β”‚ (Claude)β”‚    β”‚         β”‚                 β”‚    (your machine)
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β–²
         β”‚
    curl/REST (your CI, scripts, whatever)

What this enables:

Pricing options:

7.7 Bookmarklet + HTTPS

HTTPS is non-negotiable for the hosted service:

Magic bookmarklet flow:

  1. User clicks bookmarklet on any page
  2. Widget injected, connects to wss://api.haltija.dev/ws?token=xxx
  3. Agent can now control that browser from anywhere

Use case: β€œClick this bookmarklet and I can see your browser” for remote debugging/support.

7.8 Dashboard

What users see:


The Business Model

Why this works:

  1. Near-zero marginal cost - we route messages, we don’t run browsers
  2. Competitor moat - they’re stuck with expensive browser infrastructure
  3. Usage-aligned pricing - customers pay for value delivered
  4. Enterprise upsell - dedicated subdomains, SLAs, compliance

Revenue projection (conservative):

The real insight: A week to build the core product. Another week or two for hosted service MVP. Competitors maintain Kubernetes clusters of browsers.


Non-Goals

Things we’re explicitly not building:


Success Metrics

How we know we’ve hit 10/10:

How we know we’ve hit 11/10: