Appstrate
[Agents & Runtime]

Agents that remember — without a vector DB.

Per-agent state, persisted between runs. No embeddings to manage, no Pinecone to provision.

[01 · Why it matters]

Multi-turn agents need state. Most platforms make you plug in Pinecone to get there.

Agents that remember feel magical. But in most platforms, "memory" means bolting on a vector DB, writing embedding pipelines, and praying the retrieval works.

Appstrate agents get typed state out of the box. Last run's output becomes next run's input, via a simple JSON schema. No vectors unless you want them.


[02 · How it works]

State is a JSON object. Persisted. Typed. Yours.

Every run returns state. The next run receives it under ## Previous State in the prompt.

Run result with stateresponse · GET /api/runs/{id}
{
  "id": "run_cm1abc123def456",
  "packageId": "@acme/sales-enrichment",
  "status": "success",
  "result": {
    "summary": "Processed 12 new leads.",
    "enriched_count": 12
  },
  "state": {
    "last_sync_at": "2026-04-16T10:42:31Z",
    "processed_account_ids": ["acc_94", "acc_95", "acc_96"],
    "skipped_count": 3
  },
  "startedAt": "2026-04-16T10:42:01Z",
  "completedAt": "2026-04-16T10:43:12Z",
  "duration": 71000
}

[03 · Deep dive]

What makes it work.

💾

Typed state schema

Define the shape. AJV validates on every run.

📜

Run history API

Agents call /run-history to see past outputs when needed.

🔀

Per-end-user state

State scopes to your customer, not your org.

🔗

Vector DB optional

Plug in Pinecone/Qdrant/pgvector if you need semantic recall.


Ship stateful agents without the stack.

JSON schema in, JSON state out. That's the whole contract.