Korely

Get Started

Sign up as an agent

One command. No email, no dashboard. Your agent gets a working memory key.

korely init --agent mints a free hobby account and a kor_live_ key with no human in the loop, then saves it locally. From that point your agent can add() memories and pull them back with get_context() across sessions. The key is real and works immediately: same store, same typed bi-temporal facts, same EU storage as every other Korely account.

The four-command demo

Install, sign up, push a memory, search it, and you have persistent memory:

Terminal window
pip install korely-memory
korely init --agent --agent-caller claude-code
korely add "I am using Korely"
korely search "am I using Korely"

korely init is the one command that runs without a key, it is how you get one. Here is what it prints:

You're set: a free hobby key was minted and saved to /Users/you/.korely/config.json (chmod 600).
key kor_live_…a1b2
tier hobby region eu-hel1
quotas 250 writes / 25000 queries per month · 2 agents
Next:
korely add "I am using Korely"
korely search "am I using Korely"

The REST call, POST /v1/agents/init with no key, answers 201 Created with the same thing as JSON:

{
"api_key": "kor_live_...",
"tier": "hobby",
"region": "eu-hel1",
"processing_region": "global",
"scopes": ["memories:read", "memories:write"],
"quotas": { "writes_per_month": 250, "queries_per_month": 25000, "agents": 2 }
}

Identify yourself with --agent-caller

--agent-caller is a free-form label for who is signing up (claude-code, cursor, your app's name). It is stored with the account for your own reference, it does not change scoping or quotas. Omit it and the account is still minted. Up to 120 characters (longer is a 422); fields the API does not know are ignored.

Terminal window
korely init --agent --agent-caller my-support-bot

Choose where your memories are processed

Terminal window
curl -X POST https://api.korely.ai/v1/agents/init \
-H "Content-Type: application/json" \
-d '{"agent_caller": "my-support-bot", "processing_region": "eu"}'

Your data is stored in the EU (Helsinki) whatever you choose: that is region in the answer. processing_region says where the language model that reads your memories into facts runs, for the account's Default project:

  • global, the default: Google Gemini.
  • eu: gpt-oss-120b on Scaleway, in Paris. No memory text reaches Google.

Any other value is a 422. Searches and context queries run no language model in either region. processing_region is a REST field: korely init and the SDKs' init_agent() / initAgent() do not send it yet, so they sign you up on global. A region is changed later per project on the dashboard's Projects page, which needs a dashboard login, and an account made by this call has none until you connect its key to one: choose here. See Regions.

What happened when you ran korely init --agent

  • An anonymous account was minted on the Korely backend, no Firebase, no email, no dashboard step. It owns a fresh hobby kor_live_ key.
  • The key was saved to ~/.korely/config.json with owner-only permissions (chmod 600). Every later korely command reads it from there, so you do not pass it again.
  • Key precedence is --api-key > KORELY_API_KEY > ~/.korely/config.json. Export KORELY_API_KEY with the same value and the Python and Node SDKs pick it up too.

The plaintext key is shown once. It lives in your config file afterwards; Korely stores only a SHA-256 hash and can never reveal it again. Treat it like any secret, do not commit it.

Connect the key to a dashboard login

An account made with korely init --agent is its key: it has no login. To upgrade, top up, see usage or set webhooks, sign in at the dashboard (agent.korely.ai) and paste the key on the API Keys page, under Connect that key to this login. Its memories, facts, projects and keys move into the account you signed in with, and the key keeps working on that account's plan. When that account already has a Default project, the key's one arrives as Default (from key). From then on the account is closed from the dashboard (Settings, Close your account, which also ends a paid plan), not with DELETE /v1/account.

Quotas and limits

  • Free hobby tier: 250 memories (writes) and 25,000 queries per month, across 2 agents. End users (user_id) are unlimited. See pricing for the paid tiers.
  • Stored in the EU. Every memory and fact is stored in the EU (Helsinki). Confirm it any time with GET /v1/ping: it returns "region": "eu-hel1", and processing_region, where the model that writes your facts runs.
  • Signup is capped. One network (an IPv4 address or an IPv6 /64) can mint a few accounts per rolling 24 hours, and the service mints a limited number per day in total. Past either cap the call returns 429 signup_rate_limited with Retry-After: 86400. When self-signup is closed it returns 403 signup_disabled.

What's next

  • Make the calls every agent makes: the core operations, add, search, get context, update, delete.
  • Use the moat recall path: get_context assembles your end user's currently-valid typed facts into a prompt-ready block.
  • Pick your surface: the SDK (Python and Node), the CLI, or the REST API, all on the one key.