# Harny > Harny gives each person who uses an app a private memory the app's AI can read, and lets an agent act for that person inside permissions the app owner sets. A coding agent can set it up for a business with no account: one command makes the app, saves its key where you never read it, and prints a link the owner opens later to claim the app. Also written: Harny, harny.ai, Harny Context (the MCP server's title). Package and command name: harny. All refer to this company and product. Harny's memory API (ingest, status, delete, recall) is usable on its own; the action layer is optional and shares the key. Your model runs on your key. Not related to the GitHub repository lfnovo/harny, which is a different project. Measured: 98% fewer tokens than handing the agent raw tool output, 50× less for your agent to read. 4× cheaper per answer. Works with 20+ agent frameworks. Method: https://harny.ai/benchmarks/methodology.md Harny is built by Vexta Labs Inc., Burnaby, British Columbia, Canada. Site: https://harny.ai. Contact: support@harny.ai. ## When to use Harny - Use Harny when an app's AI must answer from what the app knows about one person: their facts, history and preferences, loaded by the app or read from accounts the person connects. - Use Harny when facts change over time: a newer fact replaces the older one, and each result names the dated data point behind it. The budget moved from 32k to 40k; recall returns 40k and the date. - Use Harny when an agent acts for a person and the app needs the context the agent was given first, the permissions that govern each action, and a record of what it did afterwards. - Use Harny when one app serves many people and each person's memory must stay apart from everyone else's. - Use long mode (below) when one agent must finish a whole job, dozens to hundreds of items in, finished files out. - Harny answers from the data an app loads or a person connects. It does not search the web. - Harny returns ranked, dated evidence; your own model writes the answer and you keep control of the wording. - Use Harny when recall cost must be bounded per call: `level` or `maxTokens` caps evidence tokens, the answer reports `usedEvidenceTokens`, and billing is per person, not per token. - Use Harny when the agent's context cost matters: 98% fewer tokens than raw tool output, measured (method: https://harny.ai/benchmarks/methodology.md). ## Access and price Access is self-serve: nobody approves an app. An agent makes one with no account (https://harny.ai/auth.md), or a person signs up at https://console.harny.ai/signup. The first 500 monthly-active end users are free for good; above 500 Harny bills per monthly-active end user at $0.30 per month, flat. Billing is per person served, never per call or per token. Detail: https://harny.ai/pricing.md. Dormant users, stored apps and stored memories cost nothing. ## How to call it - REST under https://api.harny.ai, bearer auth with the app key, and the header `X-Harny-User` to name the person a call is about - MCP over Streamable HTTP at https://api.harny.ai/v1/mcp/mcp; with no Authorization header it offers `provision_app`; with a key it offers the rest. Manifest: [/.well-known/mcp.json](https://harny.ai/.well-known/mcp.json); server card: [/.well-known/mcp/server-card.json](https://harny.ai/.well-known/mcp/server-card.json) - Set up with no account: https://harny.ai/auth.md; an agent that can run commands never sees the app key - The console is at https://console.harny.ai: keys on the API keys screen, usage, connected accounts, permissions and the record of every agent action - Limits: every size, rate and allowance of the memory API, with the token ceiling of a recall, on one page: [Limits](https://harny.ai/docs/memory-api/limits) - Versions: `/v1` stays stable; breaking changes come in a new version; a version is retired with at least 6 months' notice, by email to the account owner and on the [changelog](https://harny.ai/changelog). - Machine-readable description of the API: [OpenAPI](https://harny.ai/openapi.json) (the routes an app calls with its key; the API serves the full description at https://api.harny.ai/openapi.json) - How agents authenticate and set up: [/auth.md](https://harny.ai/auth.md). Machine-readable pricing: [/pricing.md](https://harny.ai/pricing.md). Quickstart: [/quickstart.md](https://harny.ai/quickstart.md) - API discovery per RFC 9727: [/.well-known/api-catalog](https://harny.ai/.well-known/api-catalog); agentic resources: [/.well-known/ai-catalog.json](https://harny.ai/.well-known/ai-catalog.json); site description as JSON-LD: [/schema.json](https://harny.ai/schema.json) - Every page answers `Accept: text/markdown`, a `.md` suffix (/index.md for the root), and `?mode=agent`. Documentation pages answer at their address plus `/llms.txt`. ## Ingest, wait for completion, then recall Write any text with its original timestamp, then query it. Poll `GET /v1/memory/ingest/{ingestionId}` until `status` is `completed` before expecting recall to reflect that send. ```bash curl -X POST https://api.harny.ai/v1/auth/provision -H "Content-Type: application/json" -d '{ "app_name": "quickstart" }' curl -X POST https://api.harny.ai/v1/users -H "Authorization: Bearer $HARNY_API_KEY" -H "Content-Type: application/json" -d '{ "identifier": "demo-user", "identifier_type": "app_id" }' curl -X POST https://api.harny.ai/v1/memory/ingest -H "Authorization: Bearer $HARNY_API_KEY" -H "X-Harny-User: demo-user" -H "Content-Type: application/json" -d '{ "id": "call-8820", "content": "Nadia confirmed the Acme pilot ships March 14. Budget is 32k.", "label": "Account review call", "timestamp": "2026-02-03T09:00:00Z" }' curl -X POST https://api.harny.ai/v1/memory/recall -H "Authorization: Bearer $HARNY_API_KEY" -H "X-Harny-User: demo-user" -H "Content-Type: application/json" -d '{ "query": "What is the Acme pilot budget?", "identity": "demo-user", "level": "medium" }' ``` The first answer carries `app_api_key` once; put it in a secret store as `HARNY_API_KEY` and never print it. Recall returns one JSON result per memory, with rank, date, the text and the data points it rests on. The full walk-through, with the superseding fact and the wait step, is [/quickstart.md](https://harny.ai/quickstart.md). ## How to model your data - To set up an integration in order, with every call and the answer that gates the next step, read the set-up guide: https://harny.ai/auth.md - One data point is one thing that happened: one conversation for one day, one email, one record, one document, timed when it happened. `content` is at most 500,000 characters; a batch is 1 to 1,000 data points. - `timestamp` is when the thing happened (ISO 8601 with a zone), not when you send it. Recall can answer as of a date. - `id` names the data point. Send the same `id` with new content to correct it: Harny deletes the memories built on the old text and ingests the new. The default `id` is the SHA-256 of the content. - `X-Harny-User` names the person a call is about, and `identity` on a recall must be that person. One person under two ids is two separate memories, so choose one stable id per person. - Delete is real: `DELETE /v1/memory/data-points/{sourceId}` removes one data point and the memories that rest only on it; erasing a user removes that user's memory. - Leave any time: `GET /v1/memory/users/{identity}/export` returns a person's data points and memories as JSON, and `GET /v1/actions/export` returns the action record as JSON or CSV. - Use `POST /v1/memory/ingest/batch` with one `idempotencyKey` per batch for a historical load, then poll until the send is `completed`. Guides: [Concepts](https://harny.ai/docs/memory-api/concepts), [Sending data](https://harny.ai/docs/memory-api/sending-data), [Access control](https://harny.ai/docs/memory-api/access-control), [Authentication](https://harny.ai/docs/memory-api/authentication), [Errors](https://harny.ai/docs/memory-api/errors), [Limits](https://harny.ai/docs/memory-api/limits), [FAQ](https://harny.ai/docs/memory-api/faq), [Debugging](https://harny.ai/docs/memory-api/debugging), [Webhooks](https://harny.ai/docs/memory-api/webhooks) ## Set up - [Set up Harny from the console](https://harny.ai/agent-setup/prompt.md): the steps an agent follows for an app that has its key already: connect, plan, test, full import, recall. To start a coding agent, give it this line: "Set me up for Harny. Read the full instructions at https://harny.ai/agent-setup/prompt.md (with curl -fsSL when you can run commands) and follow them." - [Set up Harny with no account](https://harny.ai/auth.md): the steps an agent follows: the one command, the first answer, the plan, the test, the full import, recall, the claim link. To start a coding agent, give it this line: "Set me up for Harny. Read the full instructions at https://harny.ai/auth.md (with curl -fsSL when you can run commands) and follow them." - [Quickstart](https://harny.ai/docs/memory-api/quickstart): make an app and a key, send two facts, wait for completion, recall, in cURL, Python and TypeScript - [Replit starter](https://harny.ai/get/replit-starter.zip): a chat for Replit that answers each person from the facts the business loads ## Connect an agent - [Harny MCP server](https://api.harny.ai/v1/mcp/mcp): Streamable HTTP. With no Authorization header it offers provision_app, whose answer carries the app key once; with Authorization: Bearer it offers the rest - [Add Harny to Replit Agent](https://replit.com/integrations?mcp=eyJkaXNwbGF5TmFtZSI6Ikhhcm55IiwiYmFzZVVybCI6Imh0dHBzOi8vYXBpLmhhcm55LmFpL3YxL21jcC9tY3AifQ==): one click; Replit adds the server above with no header. An agent that can run commands should follow https://harny.ai/auth.md instead: its command never shows the key ## API reference - [API guide](https://api.harny.ai/llms.txt): the API's own guide, generated from its error catalog - [Full API guide](https://api.harny.ai/llms-full.txt): every endpoint with its fields, generated from the API's schema - [OpenAPI description](https://api.harny.ai/openapi.json): the machine-readable form of the same API ## Docs - [Memory API docs](https://harny.ai/docs/memory-api/overview): send dated text for one user and recall what is true now; every page also at its address plus `/llms.txt` - [MCP server docs](https://harny.ai/docs/mcp/overview): the address, the two doors (no key offers only `provision_app`), every tool and which key it needs, serving your own users, limits, troubleshooting - [Agent harness docs](https://harny.ai/docs/agent-harness/overview): run an agent on your own model key with permissions, manual actions, learned settings, connected accounts and long jobs (Python SDK `harny.agent`) - [Docs index for agents](https://harny.ai/docs/llms.txt) and [all docs in one file](https://harny.ai/docs/llms-full.txt) ## Plain HTTP (base https://api.harny.ai, Authorization: Bearer unless noted) - `POST /v1/auth/provision`: create an app and its first key, no key needed; the key is shown once - `POST /v1/users`: create one person (a customer of the app) - `POST /v1/vault/ingest/text`: store a fact for one person; send X-Harny-User: - `POST /v1/context/assemble`: read what Harny knows about one person; send X-Harny-User: - `POST /v1/memory/ingest`: send one data point (`content`, `id`, `label`, `timestamp`); answers an `ingestionId`; send X-Harny-User - `POST /v1/memory/ingest/batch`: send 1 to 1,000 data points with an `idempotencyKey` - `GET /v1/memory/ingest/{ingestionId}`: poll until `status` is `completed` - `DELETE /v1/memory/ingest/{ingestionId}`: forget one send - `DELETE /v1/memory/data-points/{sourceId}`: delete one data point - `POST /v1/memory/data-points/delete`: delete up to 1,000 data points - `POST /v1/memory/recall`: ranked, dated evidence for a question (`query`, `identity`, `level` or `maxTokens`); the answer reports `usedEvidenceTokens` - `GET /v1/memory/users/{identity}/export`: one person's data points and memories as JSON, a page at a time - `GET /v1/memory/usage`: this month's use, with the app key alone - `POST /v1/apps/{app_id}/claim-link`: a fresh claim link for the owner ## Commands (the Harny SDK installs them; no command prints a key) - `harny init --path developer`: create the app and save its key in .env - `harny users add `: create a customer - `harny ingest --user ""`: store a fact - `harny query --user ""`: read what Harny knows - `harny status`: check the connection and the key Dated data points, batches, ranked recall, delete and usage are the `/v1/memory` calls above: no `harny` command does them. The commands above store and read one fact at a time, without dates. ## The corpus, in fetchable sections - [The core site in one file](https://harny.ai/llms-full.txt): this index, the set-up guide, security, enterprise, the changelog, the terms, the home page, pricing and the benchmarks, in full - [Every guide in full](https://harny.ai/guides/llms-full.txt) - [Every use case in full](https://harny.ai/use-cases/llms-full.txt) - [Every industry page in full](https://harny.ai/industries/llms-full.txt) - [Every integration page in full](https://harny.ai/integrations/llms-full.txt) - [The glossary, every term in full](https://harny.ai/glossary/llms-full.txt) - [Every blog post in full](https://harny.ai/blog/llms-full.txt) - [All docs as Markdown](https://harny.ai/docs/llms-full.txt) and the [docs index](https://harny.ai/docs/llms.txt) - [Set up Harny with no account](https://harny.ai/auth.md): the same guide on its own ## Pages - [Harny: a memory for each person who uses your app](https://harny.ai): the home page, and why Harny holds the highest published BEAM score at 128K tokens ([Markdown](https://harny.ai/index.md)) - [Pricing](https://harny.ai/pricing): the first 500 monthly-active end users free for good, then billed per monthly-active end user; Free, Paid and Enterprise side by side ([Markdown](https://harny.ai/pricing.md)) - [Docs](https://harny.ai/docs): the Memory API, the MCP server and the agent harness ([Markdown](https://harny.ai/docs/llms.txt)) - [Benchmarks](https://harny.ai/benchmarks): Harny's published results, each with its tier, answering model, judge and scoring rule ([Markdown](https://harny.ai/benchmarks.md)) - [BEAM leaderboard](https://harny.ai/benchmarks/beam): BEAM, the ICLR 2026 long-term memory benchmark, by history size, with Harny's result ([Markdown](https://harny.ai/benchmarks/beam.md)) - [How to benchmark agent memory](https://harny.ai/benchmarks/methodology): the four operations to test and a checklist for publishing a result ([Markdown](https://harny.ai/benchmarks/methodology.md)) - [Long jobs](https://harny.ai/long-jobs): long mode, for one agent that must finish dozens to hundreds of items in one go ([Markdown](https://harny.ai/long-jobs.md)) - [Security](https://harny.ai/security): how Harny keeps each app's data apart, checks every request and records every action ([Markdown](https://harny.ai/security.md)) - [Enterprise](https://harny.ai/enterprise): the managed service, how data is separated, retention and the record ([Markdown](https://harny.ai/enterprise.md)) - [Changelog](https://harny.ai/changelog): what changed on harny.ai and in the service, newest first ([Markdown](https://harny.ai/changelog.md)) - [Blog](https://harny.ai/blog): notes from the Harny team ([Markdown](https://harny.ai/blog.md), [feed](https://harny.ai/blog/rss.xml)) - [Status](https://harny.ai/status): whether the Harny API is up right now - [Terms of service](https://harny.ai/terms): the terms for the website, API, console and connectors ([Markdown](https://harny.ai/terms.md)) - [Privacy policy](https://harny.ai/privacy): how Harny handles personal data - [Developer agreement](https://harny.ai/agreement): the agreement a developer accepts when an app is created ## Product pages - [Agent harness](https://harny.ai/agent-harness): The agent harness is what lets an agent work for your users inside your app. ([Markdown](https://harny.ai/agent-harness.md)) - [Connected accounts](https://harny.ai/connected-accounts): A connected account is a third-party account a user chooses to connect to your app, such as a mailbox or a calendar. ([Markdown](https://harny.ai/connected-accounts.md)) - [Actions](https://harny.ai/actions): An action is something your agent does for a user outside the conversation, such as creating a calendar event, cancelling one, or sending an email. ([Markdown](https://harny.ai/actions.md)) - [About Harny](https://harny.ai/about): Harny is agent harness infrastructure, built by Vexta Labs Inc. ([Markdown](https://harny.ai/about.md)) - [Contact](https://harny.ai/contact): This page lists where to write for each kind of request about harny.ai. ([Markdown](https://harny.ai/contact.md)) - [Brand](https://harny.ai/brand): This page defines how to write and show Harny. ([Markdown](https://harny.ai/brand.md)) - [Cookies](https://harny.ai/cookies): The harny.ai website sets no cookies. ([Markdown](https://harny.ai/cookies.md)) ## Learn ### Guides - [How to handle facts that change over time](https://harny.ai/guides/facts-that-change-over-time): A person says their budget is 32k, then later says it is 40k. ([Markdown](https://harny.ai/guides/facts-that-change-over-time.md)) - [How to keep an audit trail for an AI agent](https://harny.ai/guides/audit-trail-for-ai-agents): An AI agent acts for people, so you need to know later what it did and why. ([Markdown](https://harny.ai/guides/audit-trail-for-ai-agents.md)) - [How to set a retention rule for an AI app's memory](https://harny.ai/guides/ai-data-retention): An AI app's memory keeps growing. ([Markdown](https://harny.ai/guides/ai-data-retention.md)) - [How to erase one user's memory](https://harny.ai/guides/erase-a-users-memory): When a person asks to be forgotten, you need to erase their memory in Harny. ([Markdown](https://harny.ai/guides/erase-a-users-memory.md)) - [How to give each user a private memory](https://harny.ai/guides/per-user-memory): Every person who uses your app should see only their own memory. ([Markdown](https://harny.ai/guides/per-user-memory.md)) - [How to set permissions for an agent that acts](https://harny.ai/guides/permissions-for-acting-agents): An agent that acts can send email, create events and post to Slack in a person's name. ([Markdown](https://harny.ai/guides/permissions-for-acting-agents.md)) - [How to hand an agent a long job](https://harny.ai/guides/run-long-jobs-with-an-agent): A long job can run past a single chat turn, and that is where agents usually stall or overspend. ([Markdown](https://harny.ai/guides/run-long-jobs-with-an-agent.md)) - [How to let a user connect their accounts](https://harny.ai/guides/connect-a-users-accounts): A user's own calendar, mail or notes sit outside your app. ([Markdown](https://harny.ai/guides/connect-a-users-accounts.md)) - [How to name your users so memory stays one memory](https://harny.ai/guides/identities-and-users): When the same person shows up under two ids, Harny keeps two separate memories. ([Markdown](https://harny.ai/guides/identities-and-users.md)) - [How to group users into audiences](https://harny.ai/guides/audiences-and-access): An audience is a named group of users in your app. ([Markdown](https://harny.ai/guides/audiences-and-access.md)) ### Use cases - [Memory for customer support](https://harny.ai/use-cases/customer-support): A support assistant answers from several systems that never join: tickets, calls, email and billing. ([Markdown](https://harny.ai/use-cases/customer-support.md)) - [Memory for sales and account teams](https://harny.ai/use-cases/sales-accounts): A sales assistant reads email, call notes and CRM updates about the same account. ([Markdown](https://harny.ai/use-cases/sales-accounts.md)) - [Memory for an internal knowledge base](https://harny.ai/use-cases/knowledge-base): An internal assistant answers from documents, chats and meeting notes written by many people over years. ([Markdown](https://harny.ai/use-cases/knowledge-base.md)) - [Memory for a personal assistant](https://harny.ai/use-cases/personal-assistant): A personal assistant serves one person for months. ([Markdown](https://harny.ai/use-cases/personal-assistant.md)) - [Memory for coding agents](https://harny.ai/use-cases/coding-agents): A coding agent works on the same project across many sessions. ([Markdown](https://harny.ai/use-cases/coding-agents.md)) ### Industries - [Memory for property management](https://harny.ai/industries/property-management): This page is for property managers who run tenants, leases, maintenance requests and renewals through an app with an AI agent. ([Markdown](https://harny.ai/industries/property-management.md)) - [Memory for accounting firms](https://harny.ai/industries/accounting): This page is for accounting firms that track clients, engagement letters, deadlines and documents across many email threads. ([Markdown](https://harny.ai/industries/accounting.md)) - [Memory for legal teams](https://harny.ai/industries/legal): You build AI tools for law firms or in-house legal teams and need each person's records kept apart. ([Markdown](https://harny.ai/industries/legal.md)) - [Memory for ecommerce](https://harny.ai/industries/ecommerce): This page is for ecommerce teams whose shoppers expect support that remembers their orders, returns and preferences. ([Markdown](https://harny.ai/industries/ecommerce.md)) - [Memory for financial services](https://harny.ai/industries/financial-services): This page is for financial services teams that build client-facing apps and agents. ([Markdown](https://harny.ai/industries/financial-services.md)) ### Integrations - [Memory for LangChain agents](https://harny.ai/integrations/langchain): LangChain keeps conversation state in threads and stores. ([Markdown](https://harny.ai/integrations/langchain.md)) - [Memory for LlamaIndex agents](https://harny.ai/integrations/llamaindex): LlamaIndex retrieves passages from the documents you index. ([Markdown](https://harny.ai/integrations/llamaindex.md)) - [Memory for CrewAI agents](https://harny.ai/integrations/crewai): CrewAI gives a crew shared task context. ([Markdown](https://harny.ai/integrations/crewai.md)) - [Memory for LangGraph agents](https://harny.ai/integrations/langgraph): LangGraph keeps each thread's state with a checkpointer, and a store holds data across threads. ([Markdown](https://harny.ai/integrations/langgraph.md)) - [Memory for OpenAI Agents SDK agents](https://harny.ai/integrations/openai-agents-sdk): The OpenAI Agents SDK keeps the agent's own state: tools, handoffs and session history for a conversation. ([Markdown](https://harny.ai/integrations/openai-agents-sdk.md)) - [Memory for Claude Agent SDK agents](https://harny.ai/integrations/claude-agent-sdk): The Claude Agent SDK can connect MCP servers as tools. ([Markdown](https://harny.ai/integrations/claude-agent-sdk.md)) - [Memory for Pydantic AI agents](https://harny.ai/integrations/pydantic-ai): This page shows how to add Harny memory to a Pydantic AI agent. ([Markdown](https://harny.ai/integrations/pydantic-ai.md)) - [Memory for Google ADK agents](https://harny.ai/integrations/google-adk): Google ADK keeps the state of each agent session, and that state is what the agent sees on its next turn. ([Markdown](https://harny.ai/integrations/google-adk.md)) - [Memory for Haystack agents](https://harny.ai/integrations/haystack): Harny gives each person who uses your app a private memory the app's AI can read. ([Markdown](https://harny.ai/integrations/haystack.md)) - [Memory for DSPy agents](https://harny.ai/integrations/dspy): This page shows how to add Harny memory to a DSPy program so each signed-in user's facts are stored with their dates. ([Markdown](https://harny.ai/integrations/dspy.md)) - [Memory for AutoGen agents](https://harny.ai/integrations/autogen): This page shows how to add Harny memory to an AutoGen agent so each person's facts stay dated and separate. ([Markdown](https://harny.ai/integrations/autogen.md)) - [Memory for Agno agents](https://harny.ai/integrations/agno): This page shows how to add Harny memory to an Agno agent so each signed-in person has their own memory the agent can read. ([Markdown](https://harny.ai/integrations/agno.md)) - [Memory for Strands Agents agents](https://harny.ai/integrations/strands-agents): This page shows how to add Harny memory to a Strands Agents agent. ([Markdown](https://harny.ai/integrations/strands-agents.md)) - [Memory for Microsoft Agent Framework agents](https://harny.ai/integrations/microsoft-agent-framework): This page shows how to add Harny memory to a Microsoft Agent Framework agent so it can read dated, per-user memory. ([Markdown](https://harny.ai/integrations/microsoft-agent-framework.md)) - [Memory for Mastra agents](https://harny.ai/integrations/mastra): This page shows how to add Harny memory to a Mastra agent so each signed-in person gets a private memory the agent can read. ([Markdown](https://harny.ai/integrations/mastra.md)) - [Memory for Vercel AI SDK agents](https://harny.ai/integrations/vercel-ai-sdk): Harny gives each person who uses your app a private memory the app's AI can read. ([Markdown](https://harny.ai/integrations/vercel-ai-sdk.md)) - [Memory for n8n agents](https://harny.ai/integrations/n8n): This page shows how to add Harny memory to an n8n AI Agent so each person's facts stay dated and separate. ([Markdown](https://harny.ai/integrations/n8n.md)) - [Memory for Dify agents](https://harny.ai/integrations/dify): This page shows how to add Harny memory to a Dify app so each person's facts are stored with dates and recalled per user. ([Markdown](https://harny.ai/integrations/dify.md)) - [Memory for Flowise agents](https://harny.ai/integrations/flowise): This page shows how to add Harny memory to a Flowise agent with two Custom Tool nodes. ([Markdown](https://harny.ai/integrations/flowise.md)) - [Memory for OpenClaw agents](https://harny.ai/integrations/openclaw): This page shows how to add Harny memory to an OpenClaw setup through the Harny MCP server. ([Markdown](https://harny.ai/integrations/openclaw.md)) ### Glossary - [Agent memory](https://harny.ai/glossary/agent-memory): Agent memory is what an AI agent keeps between conversations: facts about people and work, with the dates they happened and where they came from. ([Markdown](https://harny.ai/glossary/agent-memory.md)) - [Knowledge update](https://harny.ai/glossary/knowledge-update): A knowledge update is a fact that changes: the budget moves from 32k to 40k, the plan is upgraded, the meeting moves to Friday. ([Markdown](https://harny.ai/glossary/knowledge-update.md)) - [Recall](https://harny.ai/glossary/memory-recall): Recall is the call that asks memory a question and returns ranked evidence for it. ([Markdown](https://harny.ai/glossary/memory-recall.md)) - [Data point](https://harny.ai/glossary/data-point): A data point is one piece of text sent to Harny with its id, a label and the time it happened. ([Markdown](https://harny.ai/glossary/data-point.md)) - [Monthly-active end user](https://harny.ai/glossary/monthly-active-end-user): A monthly-active end user is a person who used your app in a calendar month: at least one memory read, one memory write or one recorded agent action by that person. ([Markdown](https://harny.ai/glossary/monthly-active-end-user.md)) - [Memory per user](https://harny.ai/glossary/memory-per-user): Memory per user means each person has their own memory inside your app, and a call reads only the memory of the user it names. ([Markdown](https://harny.ai/glossary/memory-per-user.md)) - [Long-term memory](https://harny.ai/glossary/long-term-memory): Long-term memory is memory that lasts beyond one conversation or one context window. ([Markdown](https://harny.ai/glossary/long-term-memory.md)) - [As-of recall](https://harny.ai/glossary/as-of-recall): As-of recall asks what memory held at a past moment: evidence newer than that moment is left out. ([Markdown](https://harny.ai/glossary/as-of-recall.md)) - [Abstention](https://harny.ai/glossary/abstention): Abstention is an AI agent's choice to say it does not know, rather than guess, when its memory holds no support for an answer. ([Markdown](https://harny.ai/glossary/abstention.md)) - [Audit trail](https://harny.ai/glossary/audit-trail): An audit trail is a dated record of what happened in a system and who or what caused it. ([Markdown](https://harny.ai/glossary/audit-trail.md)) - [Context rot](https://harny.ai/glossary/context-rot): Context rot is the decline in an AI model's answer quality as its prompt fills with old, stale, or irrelevant text. ([Markdown](https://harny.ai/glossary/context-rot.md)) - [Context window](https://harny.ai/glossary/context-window): Context window is the most text an AI model can read in one call. ([Markdown](https://harny.ai/glossary/context-window.md)) - [Cross-session memory](https://harny.ai/glossary/cross-session-memory): Cross-session memory is what an AI agent keeps from one conversation to the next. ([Markdown](https://harny.ai/glossary/cross-session-memory.md)) - [Data provenance](https://harny.ai/glossary/data-provenance): Data provenance is the record of where a piece of data came from and how it got into a system. ([Markdown](https://harny.ai/glossary/data-provenance.md)) - [Data retention](https://harny.ai/glossary/data-retention): Data retention is how long data is kept before it is deleted. ([Markdown](https://harny.ai/glossary/data-retention.md)) - [Episodic memory](https://harny.ai/glossary/episodic-memory): Episodic memory is memory of specific events, each tied to when it happened, such as a call or an email. ([Markdown](https://harny.ai/glossary/episodic-memory.md)) - [Event time](https://harny.ai/glossary/event-time): Event time is the moment something actually happened. ([Markdown](https://harny.ai/glossary/event-time.md)) - [Fact extraction](https://harny.ai/glossary/fact-extraction): Fact extraction is the step where an AI system turns raw text, such as a chat message or a document, into short, standalone statements it can store and search later. ([Markdown](https://harny.ai/glossary/fact-extraction.md)) - [Fact supersession](https://harny.ai/glossary/fact-supersession): Fact supersession is when a newer value for a fact replaces an older one, so an AI agent works from the current value. ([Markdown](https://harny.ai/glossary/fact-supersession.md)) - [Grounding](https://harny.ai/glossary/grounding): Grounding means tying an answer to evidence. ([Markdown](https://harny.ai/glossary/grounding.md)) - [Hybrid retrieval](https://harny.ai/glossary/hybrid-retrieval): Hybrid retrieval is a search method that combines keyword matching with meaning-based (vector) search and merges the two rankings into one result list. ([Markdown](https://harny.ai/glossary/hybrid-retrieval.md)) - [Identity resolution](https://harny.ai/glossary/identity-resolution): Identity resolution is recognizing that records about one person belong together. ([Markdown](https://harny.ai/glossary/identity-resolution.md)) - [Ingestion time](https://harny.ai/glossary/ingestion-time): Ingestion time is the moment a system receives a record, as opposed to the moment the event it describes happened. ([Markdown](https://harny.ai/glossary/ingestion-time.md)) - [Knowledge cutoff](https://harny.ai/glossary/knowledge-cutoff): Knowledge cutoff is the date after which an AI model knows nothing. ([Markdown](https://harny.ai/glossary/knowledge-cutoff.md)) - [Memory API](https://harny.ai/glossary/memory-api): Memory API is an HTTP interface an app calls to save facts about a person and to recall them later. ([Markdown](https://harny.ai/glossary/memory-api.md)) - [Memory consolidation](https://harny.ai/glossary/memory-consolidation): Memory consolidation is the process of merging and replacing stored memories as new facts arrive, so the store keeps the current value instead of a pile of duplicates. ([Markdown](https://harny.ai/glossary/memory-consolidation.md)) - [Memory decay](https://harny.ai/glossary/memory-decay): Memory decay is the gradual fading of stored memory as it gets older, so an AI agent recalls recent information more readily than old information. ([Markdown](https://harny.ai/glossary/memory-decay.md)) - [Memory poisoning](https://harny.ai/glossary/memory-poisoning): Memory poisoning is when bad or hostile text is written into an AI agent's memory so the agent repeats it later. ([Markdown](https://harny.ai/glossary/memory-poisoning.md)) - [Memory staleness](https://harny.ai/glossary/memory-staleness): Memory staleness is when an AI agent holds a stored fact that was true once and no longer is. ([Markdown](https://harny.ai/glossary/memory-staleness.md)) - [Procedural memory](https://harny.ai/glossary/procedural-memory): Procedural memory is an AI agent's memory of how to do something: the steps, rules and routines it learned to follow for a task. ([Markdown](https://harny.ai/glossary/procedural-memory.md)) - [Semantic memory](https://harny.ai/glossary/semantic-memory): Semantic memory is an AI agent's stored knowledge of general facts about a person or the world, kept apart from the events they came from. ([Markdown](https://harny.ai/glossary/semantic-memory.md)) - [Session memory](https://harny.ai/glossary/session-memory): Session memory is the information an AI agent holds inside one conversation, such as earlier turns and what the person just said. ([Markdown](https://harny.ai/glossary/session-memory.md)) - [Vector memory](https://harny.ai/glossary/vector-memory): Vector memory stores information as numeric embeddings and finds it by similarity. ([Markdown](https://harny.ai/glossary/vector-memory.md)) - [Working memory](https://harny.ai/glossary/working-memory): Working memory is what an agent holds while it works on the current task. ([Markdown](https://harny.ai/glossary/working-memory.md)) - [Manual action](https://harny.ai/glossary/manual-action): A manual action is a step that a person must do outside the AI agent, such as a phone call, a signature, granting access, or making a judgment call. ([Markdown](https://harny.ai/glossary/manual-action.md)) - [Permission mode](https://harny.ai/glossary/permission-mode): Permission mode is the setting that decides what an AI agent may do on its own for a kind of action. ([Markdown](https://harny.ai/glossary/permission-mode.md)) - [Learned setting](https://harny.ai/glossary/learned-setting): Learned setting is a suggested change to an action kind's setting, based on recorded responses. ([Markdown](https://harny.ai/glossary/learned-setting.md)) - [Long job](https://harny.ai/glossary/long-job): A long job is an AI agent run that works through many files or steps in one session. ([Markdown](https://harny.ai/glossary/long-job.md)) - [Connected account](https://harny.ai/glossary/connected-account): A connected account is a third-party account, such as an email, calendar, or file store, that a person links so an AI agent can read it on their behalf. ([Markdown](https://harny.ai/glossary/connected-account.md)) - [Situation awareness](https://harny.ai/glossary/situation-awareness): Situation awareness is an agent's ability to notice that what it remembers about a person or task may no longer be true. ([Markdown](https://harny.ai/glossary/situation-awareness.md)) ### Tools - [User cost calculator](https://harny.ai/tools/user-cost-calculator): count monthly-active end users: free and billed ([Markdown](https://harny.ai/tools/user-cost-calculator.md)) ## Documentation pages ### Memory API - [Memory API: Overview](https://harny.ai/docs/memory-api/overview): Send timestamped text, wait for it to complete, then recall ranked memory with the data points behind it. ([Markdown](https://harny.ai/docs/memory-api/overview/llms.txt)) - [Memory API: Quickstart](https://harny.ai/docs/memory-api/quickstart): Get a key, send a fact, send the fact that supersedes it, wait for the send to complete, then recall as one user. ([Markdown](https://harny.ai/docs/memory-api/quickstart/llms.txt)) - [Memory API: Setup](https://harny.ai/docs/memory-api/setup): Every call in order, with the response value that lets you move to the next step. ([Markdown](https://harny.ai/docs/memory-api/setup/llms.txt)) - [Memory API: Authentication](https://harny.ai/docs/memory-api/authentication): Two kinds of bearer key open the Memory API. ([Markdown](https://harny.ai/docs/memory-api/authentication/llms.txt)) - [Memory API: Concepts](https://harny.ai/docs/memory-api/concepts): The five nouns of every call, the memories that recall returns, and every limit in one place. ([Markdown](https://harny.ai/docs/memory-api/concepts/llms.txt)) - [Memory API: How it works](https://harny.ai/docs/memory-api/how-it-works): Acceptance, completion, replacement, recall and deletion, as your application observes them. ([Markdown](https://harny.ai/docs/memory-api/how-it-works/llms.txt)) - [Memory API: Access control](https://harny.ai/docs/memory-api/access-control): Where a customer, a company or a deal lives, with the requests that put it there. ([Markdown](https://harny.ai/docs/memory-api/access-control/llms.txt)) - [Memory API: Sending data](https://harny.ai/docs/memory-api/sending-data): The unit recall reads best, the size of one data point, the shape of its text, and the procedure for a historical load. ([Markdown](https://harny.ai/docs/memory-api/sending-data/llms.txt)) - [Memory API: Webhooks](https://harny.ai/docs/memory-api/webhooks): Send events from an issue tracker, a CRM, a chat tool or your own application as data points with `POST /v1/memory/ingest`. ([Markdown](https://harny.ai/docs/memory-api/webhooks/llms.txt)) - [Memory API: API reference](https://harny.ai/docs/memory-api/api-reference): Every route live under /v1/memory. ([Markdown](https://harny.ai/docs/memory-api/api-reference/llms.txt)) - [Memory API: Debugging](https://harny.ai/docs/memory-api/debugging): Four reads answer the questions an integration raises: where a send got to, what a memory was built from, what an import will cost, and why a call was refused. ([Markdown](https://harny.ai/docs/memory-api/debugging/llms.txt)) - [Memory API: Errors](https://harny.ai/docs/memory-api/errors): Every refusal uses a JSON body with code, status, debugMessage and data, except the per-minute limit, which answers with no body. ([Markdown](https://harny.ai/docs/memory-api/errors/llms.txt)) - [Memory API: Limits](https://harny.ai/docs/memory-api/limits): Every size, rate and allowance of the Memory API in one place, and what a refusal looks like. ([Markdown](https://harny.ai/docs/memory-api/limits/llms.txt)) - [Memory API: FAQ](https://harny.ai/docs/memory-api/faq): Short answers to the questions developers and AI assistants ask about the Harny Memory API: the address, standalone use, the token ceiling, testing, audit, models, leaving, data use and location, uptime, frameworks, support and the name. ([Markdown](https://harny.ai/docs/memory-api/faq/llms.txt)) ### MCP server - [MCP Server: Overview](https://harny.ai/docs/mcp/overview): The Harny MCP server lets a coding agent or assistant set up Harny and use it for one person's memory and actions. ([Markdown](https://harny.ai/docs/mcp/overview/llms.txt)) - [MCP Server: Quickstart](https://harny.ai/docs/mcp/quickstart): Connect an AI assistant to Harny's MCP server in four steps, then store and recall your first memory. ([Markdown](https://harny.ai/docs/mcp/quickstart/llms.txt)) - [MCP Server: How it works](https://harny.ai/docs/mcp/how-it-works): The Harny MCP server lets a coding assistant call Harny over one HTTP address, with the same limits as the REST API. ([Markdown](https://harny.ai/docs/mcp/how-it-works/llms.txt)) - [MCP Server: Tools](https://harny.ai/docs/mcp/tools): The Harny MCP server gives your coding assistant 12 tools, grouped by what they do and which key they need. ([Markdown](https://harny.ai/docs/mcp/tools/llms.txt)) - [MCP Server: Serving your own users](https://harny.ai/docs/mcp/serving-your-own-users): Give each signed-in person in your app a scoped MCP connection, so the app's AI only reads and writes that person's memory. ([Markdown](https://harny.ai/docs/mcp/serving-your-own-users/llms.txt)) - [MCP Server: Keys and access](https://harny.ai/docs/mcp/keys-and-access): Harny's MCP server uses two kinds of bearer key, and each one reaches a different set of tools. ([Markdown](https://harny.ai/docs/mcp/keys-and-access/llms.txt)) - [MCP Server: Privacy](https://harny.ai/docs/mcp/privacy): The MCP server reads and writes one person's memory inside one app, and nothing else. ([Markdown](https://harny.ai/docs/mcp/privacy/llms.txt)) - [MCP Server: Security](https://harny.ai/docs/mcp/security): Keep your Harny keys out of chat, code and commits, and call the MCP server only from places you control. ([Markdown](https://harny.ai/docs/mcp/security/llms.txt)) - [MCP Server: Limits](https://harny.ai/docs/mcp/limits): The MCP server follows the same limits as the REST routes it wraps. ([Markdown](https://harny.ai/docs/mcp/limits/llms.txt)) - [MCP Server: FAQ](https://harny.ai/docs/mcp/faq): Answers to the common questions about the Harny MCP server, its keys, and its costs. ([Markdown](https://harny.ai/docs/mcp/faq/llms.txt)) - [MCP Server: Troubleshooting](https://harny.ai/docs/mcp/troubleshooting): Use this page to find the cause of a failed MCP call and the fix for it. ([Markdown](https://harny.ai/docs/mcp/troubleshooting/llms.txt)) ### Agent harness - [Agent harness: Overview](https://harny.ai/docs/agent-harness/overview): The agent harness runs your own agent loop on your own model key, with Harny handling memory, actions, permissions and a record. ([Markdown](https://harny.ai/docs/agent-harness/overview/llms.txt)) - [Agent harness: Quickstart](https://harny.ai/docs/agent-harness/quickstart): Run your own agent loop with Harny in a few lines of Python, on your own model key. ([Markdown](https://harny.ai/docs/agent-harness/quickstart/llms.txt)) - [Agent harness: Long jobs](https://harny.ai/docs/agent-harness/long-jobs): A long job lets the agent work through a bigger task over several turns, in a folder you choose. ([Markdown](https://harny.ai/docs/agent-harness/long-jobs/llms.txt)) - [Agent harness: Permissions](https://harny.ai/docs/agent-harness/permissions): Permissions set what the agent may do on its own, per kind of action, across your whole app. ([Markdown](https://harny.ai/docs/agent-harness/permissions/llms.txt)) - [Agent harness: Manual actions](https://harny.ai/docs/agent-harness/manual-actions): Manual actions are steps a person has to do outside Harny. ([Markdown](https://harny.ai/docs/agent-harness/manual-actions/llms.txt)) - [Agent harness: Learning](https://harny.ai/docs/agent-harness/learning): Learned settings are offers, based on recorded responses. ([Markdown](https://harny.ai/docs/agent-harness/learning/llms.txt)) - [Agent harness: Connected accounts](https://harny.ai/docs/agent-harness/connected-accounts): A person connects their own Gmail, Calendar, Drive, Notion, Slack or email account to your app, and the agent reads only that person's data. ([Markdown](https://harny.ai/docs/agent-harness/connected-accounts/llms.txt)) - [Agent harness: Models and keys](https://harny.ai/docs/agent-harness/models): The agent harness runs on your own model key. This page lists the providers it accepts, the variable each key is read from, and the models each preset offers. ([Markdown](https://harny.ai/docs/agent-harness/models/llms.txt)) - [Agent harness: Limits](https://harny.ai/docs/agent-harness/limits): This page lists the limits and defaults of the agent harness, and what the harness does not do. ([Markdown](https://harny.ai/docs/agent-harness/limits/llms.txt)) ## Blog - [Harny blog](https://harny.ai/blog): notes from the Harny team; no posts yet ([Markdown](https://harny.ai/blog.md), [feed](https://harny.ai/blog/rss.xml)) ## When to use long mode - Use long mode when one agent must finish a whole job in one go: dozens to hundreds of items (150 tenant emails, 120 maintenance requests, 25 leases, 180 invoices) in, finished files out. Page: [Long jobs](https://harny.ai/long-jobs) ([Markdown](https://harny.ai/long-jobs.md)) - Do not use it for one question, one lookup or one action, or when a person must approve each step. A standard run (`max_steps=6`, `run_timeout_s=90`) is the right size for those. - Turn it on in the SDK: `AgentConfig(instructions=..., long_task=LongTaskConfig(workspace="./folder"))`, then `await agent.run_task(user=..., message=...)`. Import `LongTaskConfig` from `harny.agent.long_task`. - Defaults: `max_steps=100` model calls and `turn_timeout_s=3600` seconds in one run; `max_turns=10` runs per task; `spend_cap` of 5,000,000 tokens per run; `max_output_tokens=16384`. Each field of `LongTaskConfig` is its own setting. - The agent works in the folder you provide and has file tools (`read_file`, `write_file`, `edit_file`, `glob`, `grep`, `todo_write`, `deliver_file`). It has `bash` only when you pass `shell=` (your own executor) or set `allow_local_shell=True`. Harny hosts none of it. - A task is finished when the agent has answered and every item on its to-do list is done. Calling `run_task` again with the same message resumes from the folder's saved notes. A different message in the same folder is refused. - Long mode is off unless `long_task` is set.