Skip to content
Anna Developer Platform · v1

Build the AI-native
apps people live inside.

Tools, Skills, and Anna Apps that any conversation can call by name. An open protocol, a curated runtime, and a distribution surface that already talks to your users every day.

  • JSON-RPC 2.0 over stdio
  • Python · Node.js · Go · Rust
  • Open spec · MIT samples
  • 99.99% runtime SLA
100%
Open protocol · MIT
< 40ms
Median tool round-trip
4
First-class language SDKs
Surfaces the agent reaches
The Stack

Three building blocks. Endless agent surfaces.

Pick the surface that fits the job. Combine them when it doesn’t.

Quickstart

Hello, Executa.

A minimal plugin in three flavors. Copy, paste, run — the agent picks it up on the next turn.

Python Open quickstart →
import json, sys
def handle(req):
    if req["method"] == "describe":
        return {"name": "hello", "tools": [{"name": "echo", "parameters": []}]}
    if req["method"] == "call":
        return {"output": "hello, anna"}
for line in sys.stdin:
    req = json.loads(line)
    sys.stdout.write(json.dumps({"jsonrpc": "2.0", "id": req["id"], "result": handle(req)}) + "\n")
    sys.stdout.flush()
Node.js Open quickstart →
const readline = require("readline");
const rl = readline.createInterface({ input: process.stdin });
rl.on("line", line => {
  const req = JSON.parse(line);
  const result = req.method === "describe"
    ? { name: "hello", tools: [{ name: "echo", parameters: [] }] }
    : { output: "hello, anna" };
  process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id: req.id, result }) + "\n");
});
Go Open quickstart →
package main
import ("bufio"; "encoding/json"; "os")
func main() {
  s := bufio.NewScanner(os.Stdin)
  for s.Scan() {
    var req map[string]any; _ = json.Unmarshal(s.Bytes(), &req)
    res := map[string]any{"output": "hello, anna"}
    if req["method"] == "describe" { res = map[string]any{"name": "hello", "tools": []any{}} }
    json.NewEncoder(os.Stdout).Encode(map[string]any{"jsonrpc": "2.0", "id": req["id"], "result": res})
  }
}
Live · JSON-RPC 2.0

A single round-trip from chat to your code.

The user types. Anna picks the right tool. Your process answers on stdout. Streaming tokens flow back. No webhooks, no servers, no glue.

user · chat
What did the GitHub issues look like this week?
| Calling github.search_issues
your-executa · stdio
// stdin
{ "jsonrpc": "2.0", "id": 7,
  "method": "call",
  "params": {
    "name": "search_issues",
    "args": { "q": "is:open created:>7d" }
  } }

// stdout
{ "jsonrpc": "2.0", "id": 7,
  "result": {
    "output": [
      { "title": "Auth flow flake",
        "url": "https://…" }
    ]
  } }

Anatomy of an Anna App

Every published App is a manifest pointing at a curated set of capabilities.

Anna App manifest · listing · review anna.app/v1 manifest screenshots · pricing · docs Required Executas notion.search · calendar.list_events auto-installed for the user Optional Executas linear.list_issues opt-in per user Behavior system_prompt_addendum user_message_prefix Skills SKILL.md bundles Surface # mention in chat
Distribution

Ship once. Reach every conversation.

Every published Anna App lights up across the surfaces users already use — no separate front-ends to maintain.

Inline in chat

Users type #your-app and your tools become first-class citizens of the next reply.

Anna App Store

Listed, searchable, reviewed. Versioned releases with changelogs and pricing.

Embedded UI

Render a window, a sidebar, or a full canvas via the Anna App UI bundle — HTML, JS, CSS.

Background skills

SKILL.md cards trigger when intent matches — the agent acquires a new ability without a redeploy.

Resources

Everything you need to ship.

Verified Developer Program

Ready to publish?

Apply for verified developer status and list your apps in the Anna App Store. Reach the conversations already happening.