Korely

Get Started

Sign up as an agent

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

korely init --agent creates a free Hobby account and a kor_live_ key with no human in the loop, then saves the key on your machine. From that point your agent can add() memories and read them back with get_context(), session after session. The key is real and works at once: it is the same service, with the same facts and the same EU storage, as every other Korely account. The account has no login, so this page is for an agent, or a developer, that wants a key without opening a dashboard first.

Terms

The Glossary defines the words used across the docs. This page uses API key, plan, memory, agent_id, agent_caller, region, project, Default project, permission and score as defined there.

The four-command demo

Install the package, sign up, save a memory and search for it:

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. It needs Python 3.9 or later. 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 processing global
quotas 250 writes / 25000 queries per month · 2 agents
terms creating the account accepts the Terms and the Privacy Policy:
https://korely.ai/legal/terms-of-service
https://korely.ai/legal/privacy-policy
Next:
korely add "I am using Korely"
korely search "am I using Korely"

Then korely add prints stored and the id of the new memory, and korely search prints a line with the score in square brackets and your text, for example [0.709] I am using Korely (the score varies). If korely is not found after the install, run it as python3 -m korely_memory.cli.

If a key is already saved in ~/.korely/config.json, korely init changes nothing and exits with code 2: the account it made has no login, so that key is the only way to use it and to close it. Add --force to replace the saved key (the old one is lost), or close the old account first with korely delete-account --yes.

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 },
"terms_url": "https://korely.ai/legal/terms-of-service",
"privacy_url": "https://korely.ai/legal/privacy-policy"
}

The key is shown in this answer once. It has the memories:read and memories:write permissions, so it is not an admin key, and it does not expire. Creating the account accepts the Terms and the Privacy Policy named there.

Identify yourself with --agent-caller

agent_caller is a free 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 limits, and it is not the agent_id you can put on a memory. Leave it out and the account is still created. It can be up to 120 characters (longer is a 422); fields this call does not know are ignored.

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

Choose where your memories are processed

Terminal window
pip install -U korely-memory
korely init --agent --processing-region eu

Or with the REST API:

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 on Korely's servers in Helsinki whatever you choose: that is region in the answer. processing_region says which model reads your memories into facts, for the account's Default project:

  • global, the default: a model from Google (the Gemini API) reads the text of a memory, outside the EU.
  • eu: gpt-oss-120b on Scaleway, in Paris, France.

Any other value is a 422. Searches and context queries run no language model in either region, and the quality of the facts can differ between the two regions. Every way of signing up can choose it: the CLI with --processing-region eu (korely-memory 0.1.24 or later; it prints processing eu next to the plan), the SDKs with Korely.init_agent(processing_region="eu") and Korely.initAgent("my-app", { processingRegion: "eu" }), and the REST call above. Left out, the account is global. The CLI refuses the option together with --api-key: a key you already have keeps the region of its project. The region is set per project, and can be changed later on the dashboard's Projects page. That page needs a dashboard login, and an account made by this call has none until you connect its key to one, so choose here if you care. See Regions.

What happened when you ran korely init --agent

  • An account was created with no email and no dashboard step, together with its Default project. It owns a new 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. The Python SDK and the Node SDK (in Node.js) look for a key in the same two places, so Korely() and new Korely() find it without an argument.

The plaintext key is shown once. It lives in your config file afterwards; Korely stores only a SHA-256 hash and can never show it again. If you lose it, you cannot get it back: sign up again for a new one. Treat it like any secret and 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), open the Account page and paste the key under Bring in a key made without a login, then press Bring it in. Its memories, facts, projects and keys move into the account you signed in with, and the key keeps working. 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 (Account, Close the account, which also ends a paid plan), not with DELETE /v1/account or korely delete-account, which only work for an account that has no login. Until then, any key of such an account that can write closes the whole account with that call (read the warning), so give it only to code you trust.

Quotas and limits

  • Free Hobby plan: 250 writes and 25,000 reads per month, and up to 2 named agents (distinct agent_id values). The number of end users (user_id) is not limited. See pricing for the paid plans.
  • Stored in Helsinki. Every memory and fact is stored on Korely's servers in Helsinki. GET /v1/ping returns "region": "eu-hel1", the label Korely sets for that server, and processing_region, which decides the model that writes your facts: Google outside the EU for global, Scaleway in Paris for eu.
  • Signup is capped. One network (an IPv4 address or an IPv6 /64) can create 5 accounts in 24 hours, and the service creates at most 100 a 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.
  • The body is capped. The body of this call is a few bytes. A body larger than 1 MB is refused with 413 before it reaches Korely, and no account is created.

What's next

  • Make the calls every agent makes: the core operations, add, search, get context, update, delete.
  • Read memories back: get_context assembles the facts that are true now for one end user, and the memories closest to your question, into text you can put in a prompt.
  • Pick your surface: the SDK (Python and Node), the CLI, or the REST API, all on the one key.