Hey Anna app developers! ![]()
Another massive stretch — 25+ releases since beta.96, and this one is special: your apps can now run hours-long tools, parse office documents natively, get real usage analytics, and — drumroll
— earn real money. Here’s everything that matters for your apps, in one friendly digest. Let’s dive in! ![]()
New Host APIs & SDK Goodies
Async Tool Jobs — long-running tools, done right (beta.108–112) — The 90-second wall is gone! New host RPCs tools.invokeAsync/getJob/cancelJob/listJobslet a tool run from 60s up to 24 hours, with no long-hanging HTTP anywhere. The SDK (@anna-ai/app-runtime0.15.0) ships a high-levelanna.tools.invokeAsyncAwait(args, { onProgress, signal, timeoutMs })— real-timetool_jobprogress events, AbortSignal-powered cancellation, and automatic recovery after page reload. Plugins report progress viaemit_progress, and per-invoke tokens auto-renew for the life of the job. The local dev harness (anna-app-runtime-local0.2.0a20) mirrors the full job lifecycle in-process, so you can build it all offline.
doc_read&sheet_readplatform tools (beta.116, forum #207) — Native server-side parsing for xlsx / xls / docx / pptx / pdf! Explicit pagination (truncated.next_callis copy-paste ready), typed spreadsheet cells, zip-bomb guards, and flat compute-unit pricing. Available in agent sessions and the main chat — your apps can finally read the attachments users throw at them.
BYOK — users bring their own LLM keys (beta.116) — Users can register their own OpenAI-compatible providers and models (byok:namespace). BYOK calls cost zero Energy. A privacy-first policy switch controls whether third-party apps may use the user’s keys — off by default, and when off, BYOK models are completely invisible to your app’s sampling. Everything just works through the samellm.complete/llm.streamyou already use.
Full platform tool kit in sandbox sessions (beta.115, forum #192) — The agent session registry grew from a handful to 23 platform tools: the whole fsfamily (10),exec(2), browser core (9+), plusweb_search. Every one is individually grantable viaallowed_tools— “read files but never write” is finally expressible.
System prompt limit: 4,000 → 32,000 chars (beta.113, forum #116/#203) — agent.sessionsystem prompts got 8× the room, on both session create and per-run overrides. Bring your big personas!
anna.files.download+ iframe downloads (beta.97, forum #175) — Apps can now trigger real save dialogs! Host-mediated downloads forceContent-Disposition: attachmentwith UTF-8 filenames, and the short-lived URL never enters your iframe’s DOM. Declare"download"inmanifest.ui.host_api.files.
anna-app dev --web real(beta.103, forum #189) — Testanna.web.*against the real platform search chain (Tavily provider registry, caching, real CU billing) from your local harness. Also fixed: the local ddgs fallback now ships as a proper dependency, so the web-search demo works out of the box.
Your Apps Are a Business Now
Revenue Share & Payouts (beta.120–121) — This is the big one: 70% of eligible usage profit goes to you. Daily earnings roll up automatically (T+1), an append-only ledger keeps every cent traceable, and daily reconciliation cross-checks everything. The developer console gets a new Earnings view: balance, monthly statements, payout requests (from $50), and encrypted payout profiles. Build great apps → get paid. 
App Analytics dashboard (beta.117) — New Analytics tab in the developer console: DAU time series, rolling WAU/MAU, token & cost aggregates per app — with a clean GET /developer/apps/{app_id}/statsAPI. Aggregates only, never user-level data. See how your app is actually doing!


Public App Store & share links (beta.118–119) — Every published app now has a public, SEO-friendly landing page at /store/@handle/slug— OG/Twitter cards, JSON-LD, sitemap, no login required to browse. Share buttons everywhere,?action=installlogin-wall flow that auto-resumes install after sign-in,?ref=channel attribution so you know where installs come from, andopen_appdeep links straight into a running app. Your app is now one link away from anyone.
App reviewer channel (beta.122) — Designated reviewers can now install and run apps in PENDING_REVIEWvia a dedicated review queue — faster, smoother reviews for everyone’s submissions.
Starter tier (beta.98) — New $7.99/mo plan (3,000 Anna Energy) fills the Free→Pro gap. Same model catalog as Pro — a bigger addressable audience for your apps!
Publishing & Distribution
Content-addressed bundle storage + 1 GiB limit (beta.105, forum #195) — UI bundles are now deduplicated by sha256: republishing only uploads changed bytes, apps cutis zero-copy, and limits jumped to 1 GiB total / 50 MiB per file. Plus an official guide for hosting truly large static assets.
Same-version republish is truly idempotent (beta.99 + beta.106, forum #185/#198) — Two rounds of hardening: registry-distributed Executas now include package@versionin the content hash (version bumps always freeze a new version — no more silent no-ops), and platform-side manifest cache rewrites no longer cause phantom 409s when you only changed your app frontend. When a 409 is real, it now lists exactly which fields changed.
App Update actually upgrades bundled Executas (beta.103, forum #187) — Version drift between what’s deployed and what’s desired is now detected and reconciled in the same pass. Clicking “Update” does what it says.
Cloud Agent & Runtime Reliability
Cloud Agents upgraded to 2 CPU / 2 GB (beta.107, forum #199) — Chrome/Puppeteer-based Executas no longer get OOM-killed mid-render. Also: tools.invoketimeout is now 90s (aligned with what the network edge can actually deliver — use async jobs for anything longer!), gateway HTML error pages are converted to structured retriable RPC errors instead ofUnexpected token '<', and host-side cancellation now kills the entire plugin process group — no more zombie Chrome.
Persistent storage, documented + 90-day retention (beta.114, forum #194) — $ANNA_WORKSPACE_DIRis your Executa’s persistent workspace contract, with a full lifecycle guarantee table in the newexecuta-cloud-storagereference chapter. Idle-agent reap window extended from 72 hours to 90 days. Your users’ data sticks around.
Active agents never get mis-suspended (beta.102, forum #190) — Hot paths (tools.invoke, default-agent resolution) now refresh the activity clock, so an agent in continuous use can’t hit the idle-suspend timer mid-task.
Agent runs: no more “empty success” (beta.103, forum #191) — Runs that produce no output are now properly failed with a retriable empty_completionerror,agent.session.cancelactually cancels (including queued runs), session delete cascades cancellation, and execution leases prevent long tasks from double-running. Plus a per-user concurrent-run limit returns a clean, retryable 429 instead of melting the worker pool.
Notable Bug Fixes
anna-app devsandbox sessions had zero tools (beta.115, forum #192) —inherit_host_tools: falsewas silently dropped and the dev grant’s tool intersection was always empty. Both fixed — dev sandbox sessions now behave like production.
Concurrent host/uploadFileownership race (beta.103, forum #188) — Upload confirmation is now strictly bound to the uploading user’s identity.
Google OAuth verification unblocked (beta.116, forum #206) — Removed a restricted scope from the credentials provider registry; existing stored scopes cleaned up by migration.
doc_readSSRF guard false positives — Platform-owned storage domains are whitelisted before DNS checks, fixing failures under fake-ip / split-horizon DNS setups.
Compatibility Notes
Everything is additive — existing apps keep working unchanged; unknown methods return -32601and degrade gracefully.
Current pin matrix: dispatcher_version0.19.0 ·anna-app-schema0.19.0 ·anna-app-core0.18.0 ·@anna-ai/app-runtime0.15.0 ·anna-app-runtime-local0.2.0a20 ·@anna-ai/cli0.1.45.
To use the new goodies (tools.invokeAsyncAwait,doc_read/sheet_read,files.download, analytics, earnings): update@anna-ai/clito 0.1.45 and@anna-ai/app-runtimeto 0.15.0, then declare the new capabilities in your manifest.
One behavior change to note: tools.invokeis now capped at 90s (previously 180s, which the network edge couldn’t deliver anyway). If your tool runs longer, switch totools.invokeAsync— it’s built exactly for that.
Feedback Welcome!
Shipped a long-running tool with async jobs? Watching your first earnings roll in? Built something cool with doc_read? We’d love to hear about it — drop your questions, feedback, or showcase posts below. Happy building! ![]()
![]()