Halvin docs

Short docs, honest status. The import path works end to end today; task execution and billing are being shipped in the open.

Getting started

  1. Export your Jules workspace with Google's official script (Jules changelog).
  2. Zip the jules-export/ folder so that folder is the archive root.
  3. Open /import, choose the zip (100 MB max) and upload it.
  4. Wait for the status to reach done, then read the counts and any warnings.
  5. Use /repos and /sessions/<id> to inspect what came across.

Step-by-step detail, file layout and error cases: Import from Google Jules.

Plans and limits

Plus
$50 /mo
7 tasks/day (rolling 24h)
4 concurrent tasks
Model calls included
Max
$100 /mo
14 tasks/day (rolling 24h)
8 concurrent tasks
Model calls included
Team
$200 /mo
25 tasks/day (rolling 24h)
15 concurrent tasks
Model calls included
BYOK
BYOK
$29 /mo
20 tasks/day (rolling 24h)
3 concurrent tasks
Your own model provider key
LimitValueScope
Tasks per dayFrom tasksPerDay in src/config/plans.tsRolling 24-hour window, resets continuously
Concurrent tasksFrom concurrentTasks in src/config/plans.tsAt any instant
Session timeNo limitNot enforced

Security

  • Imported env var values are encrypted with AES-GCM (WebCrypto) before they reach the database, and the API returns names only — never values.
  • Archive entries that escape the zip root are rejected and the import fails with no rows written.
  • Session cookies are HMAC-signed, HttpOnly, SameSite=Lax, Secure outside localhost, with a 30-day absolute TTL; sign-out revokes the row server-side.
  • Secrets are Worker secrets (wrangler secret put), never vars in committed configuration. Sign-in and import fail closed when a required secret is missing.

Feature status

FeatureStatusNotes
Import from Google JulesLiveRepos, setup scripts, test commands, memories, scheduled tasks, sessions, patches
Plans and pricingLiveServed from src/config/plans.ts at /api/plans
GitHub sign-inWired, app registration pendingOAuth + sessions implemented; routes return 503 until the OAuth app is registered
Cloud task executionShippingSandbox runner (Containers/Sandbox) and the agent engine
Stripe billingShippingCheckout, Customer Portal and webhook
GitHub App (clone + open PR)ShippingRead code, open pull requests, receive checks

Public API

MethodPathPurpose
GET/api/health{ "ok": true }
GET/api/plansThe five plans, exactly as published on /pricing
GET/api/auth/github/startBegin GitHub sign-in
GET/api/meSigned-in account and entitlement (401 when signed out)
POST/api/importsUpload a Jules export zip (100 MB max) → 202 with an import id
GET/api/imports/:idImport status, counts, warnings
GET/api/reposImported repositories
GET/api/sessions?repo=Session index, optionally filtered by repository
GET/api/sessions/:idPrompt, plan, patches and summary for one session
GET/api/env-varsImported env var names only

Machine-readable

  • Every page here has a Markdown twin: /index.md, /pricing.md, /docs.md.
  • /llms.txt is the short index for AI assistants; /llms-full.txt is every page in one file.
  • /sitemap.xml and /robots.txt are generated from the same page list.