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()
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.
Point your coding agent here.
It reads every page natively.
These docs aren’t just for humans. Every page speaks
clean Markdown the moment an AI agent asks — no
headless browser, no JavaScript, no scraping HTML soup. Add
.md to any URL, send Accept: text/markdown,
or start from /llms.txt and your agent ingests the
whole platform in one pass.
-
Append
.mdanywhere Same URL, raw Markdown./developers/overview/welcome.mdreturns the source, not a shell. -
Content negotiation Send
Accept: text/markdownand the very same page answers in plain text. -
/llms.txtsitemap One discovery manifest links every doc & reference page./llms-full.txtships the entire corpus. -
Reference as Markdown Even the structured capability catalogue serialises to clean Markdown at
/developers/reference.md.
# discover everything in one request
$ curl -s https://anna.partners/llms.txt
# Anna Developer Hub
> Append .md to any /developers URL …
## Build a Tool
- [Executa — intro](/developers/tools/executa-intro.md)
…
# read one page as clean Markdown
$ curl -H 'Accept: text/markdown' \
https://anna.partners/developers/apps/app-intro
---
title: Build an Anna App
section: apps
---
# Build an Anna App
An Anna App is a sandboxed iframe bundle …
Three building blocks. Endless agent surfaces.
Pick the surface that fits the job. Combine them when it doesn’t.
Executa
Standalone JSON-RPC plugins that the LLM can call. Implement describe + call, ship in any language.
weather.lookup, github.search_issues
Learn more →
SKILL.md
Declarative capability cards. A folder, a markdown file, and the agent gets a new superpower — no compiler, no daemon.
e.g.chart-generator, pdf-tools
Learn more →
Anna App
A curated bundle: tools + skills + behavior. Users install once and #mention the whole experience in chat.
weekly-review-coach
Learn more →
Hello, Executa.
A minimal plugin in three flavors. Copy, paste, run — the agent picks it up on the next turn.
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");
});
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})
}
}
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.
github.search_issues…
// 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.
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.
Everything you need to ship.
Examples Repository
Working plugins in Python, Node.js, and Go — credentials, OAuth, binary builds.
GuideApp Store Guide
From manifest to published listing — the end-to-end Anna App workflow.
CommunityDeveloper Forum
Ask questions, share what you're building, propose protocol changes.
ReferenceDeveloper API
HTTP endpoints for managing Anna Apps, versions, reviews, and listings.
Ready to publish?
Apply for verified developer status and list your apps in the Anna App Store. Reach the conversations already happening.